feat(core): wire up Wizard accessibility page

This commit is contained in:
Federico Terzi 2021-06-26 21:32:21 +02:00
parent 7f7b3cb358
commit 355196ea90
3 changed files with 65 additions and 9 deletions

View File

@ -0,0 +1,38 @@
/*
* This file is part of espanso.
*
* Copyright (C) 2019-2021 Federico Terzi
*
* espanso is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* espanso is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
*/
#[cfg(not(target_os = "macos"))]
pub fn is_accessibility_enabled() -> bool {
true
}
#[cfg(not(target_os = "macos"))]
pub fn prompt_enable_accessibility() -> bool {
true
}
#[cfg(target_os = "macos")]
pub fn is_accessibility_enabled() -> bool {
espanso_mac_utils::check_accessibility()
}
#[cfg(target_os = "macos")]
pub fn prompt_enable_accessibility() -> bool {
espanso_mac_utils::prompt_accessibility()
}

View File

@ -22,6 +22,7 @@ use crate::preferences::Preferences;
use super::{CliModule, CliModuleArgs}; use super::{CliModule, CliModuleArgs};
mod accessibility;
mod util; mod util;
// TODO: test also with modulo feature disabled // TODO: test also with modulo feature disabled
@ -84,7 +85,7 @@ fn launcher_main(args: CliModuleArgs) -> i32 {
}; };
// TODO: consider also Windows case? // TODO: consider also Windows case?
let add_to_path_handler = Box::new(move || match util::add_espanso_to_path() { let add_to_path_handler = Box::new(move || match util::add_espanso_to_path() {
Ok(_) => true, Ok(_) => true,
Err(error) => { Err(error) => {
eprintln!("Add to path returned error: {}", error); eprintln!("Add to path returned error: {}", error);
false false
@ -92,11 +93,16 @@ fn launcher_main(args: CliModuleArgs) -> i32 {
}); });
let is_accessibility_page_enabled = if cfg!(target_os = "macos") { let is_accessibility_page_enabled = if cfg!(target_os = "macos") {
// TODO: add actual check !accessibility::is_accessibility_enabled()
true
} else { } else {
false false
}; };
let is_accessibility_enabled_handler = Box::new(move || {
accessibility::is_accessibility_enabled()
});
let enable_accessibility_handler = Box::new(move || {
accessibility::prompt_enable_accessibility();
});
let preferences_clone = preferences.clone(); let preferences_clone = preferences.clone();
let on_completed_handler = Box::new(move || { let on_completed_handler = Box::new(move || {
@ -129,18 +135,21 @@ fn launcher_main(args: CliModuleArgs) -> i32 {
welcome_image_path: icon_paths welcome_image_path: icon_paths
.logo_no_background .logo_no_background
.map(|path| path.to_string_lossy().to_string()), .map(|path| path.to_string_lossy().to_string()),
accessibility_image_1_path: None, // TODO accessibility_image_1_path: icon_paths
accessibility_image_2_path: None, // TODO .accessibility_image_1
.map(|path| path.to_string_lossy().to_string()),
accessibility_image_2_path: icon_paths
.accessibility_image_2
.map(|path| path.to_string_lossy().to_string()),
handlers: WizardHandlers { handlers: WizardHandlers {
is_legacy_version_running: Some(is_legacy_version_running_handler), is_legacy_version_running: Some(is_legacy_version_running_handler),
backup_and_migrate: Some(backup_and_migrate_handler), backup_and_migrate: Some(backup_and_migrate_handler),
add_to_path: Some(add_to_path_handler), add_to_path: Some(add_to_path_handler),
enable_accessibility: None, // TODO enable_accessibility: Some(enable_accessibility_handler),
is_accessibility_enabled: None, // TODO is_accessibility_enabled: Some(is_accessibility_enabled_handler),
on_completed: Some(on_completed_handler), on_completed: Some(on_completed_handler),
}, },
}); });
} }
// TODO: initialize config directory if not present // TODO: initialize config directory if not present

View File

@ -38,6 +38,10 @@ const MAC_BINARY: &[u8] = include_bytes!("res/macos/icon.png");
const MAC_DISABLED_BINARY: &[u8] = include_bytes!("res/macos/icondisabled.png"); const MAC_DISABLED_BINARY: &[u8] = include_bytes!("res/macos/icondisabled.png");
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
const MAC_SYSTEM_DISABLED_BINARY: &[u8] = include_bytes!("res/macos/iconsystemdisabled.png"); const MAC_SYSTEM_DISABLED_BINARY: &[u8] = include_bytes!("res/macos/iconsystemdisabled.png");
#[cfg(target_os = "macos")]
const MAC_ACCESSIBILITY_1_BINARY: &[u8] = include_bytes!("res/accessibility_1.png");
#[cfg(target_os = "macos")]
const MAC_ACCESSIBILITY_2_BINARY: &[u8] = include_bytes!("res/accessibility_2.png");
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct IconPaths { pub struct IconPaths {
@ -47,7 +51,10 @@ pub struct IconPaths {
pub tray_icon_normal: Option<PathBuf>, pub tray_icon_normal: Option<PathBuf>,
pub tray_icon_disabled: Option<PathBuf>, pub tray_icon_disabled: Option<PathBuf>,
pub tray_icon_system_disabled: Option<PathBuf>, // TODO: secure input pub tray_icon_system_disabled: Option<PathBuf>,
pub accessibility_image_1: Option<PathBuf>,
pub accessibility_image_2: Option<PathBuf>,
pub logo: Option<PathBuf>, pub logo: Option<PathBuf>,
pub logo_no_background: Option<PathBuf>, pub logo_no_background: Option<PathBuf>,
@ -76,6 +83,8 @@ pub fn load_icon_paths(runtime_dir: &Path) -> Result<IconPaths> {
tray_icon_system_disabled: Some(extract_icon(MAC_SYSTEM_DISABLED_BINARY, &runtime_dir.join("systemdisabled.png"))?), tray_icon_system_disabled: Some(extract_icon(MAC_SYSTEM_DISABLED_BINARY, &runtime_dir.join("systemdisabled.png"))?),
logo: Some(extract_icon(ICON_BINARY, &runtime_dir.join("icon.png"))?), logo: Some(extract_icon(ICON_BINARY, &runtime_dir.join("icon.png"))?),
logo_no_background: Some(extract_icon(LOGO_NO_BACKGROUND_BINARY, &runtime_dir.join("icon_no_background.png"))?), logo_no_background: Some(extract_icon(LOGO_NO_BACKGROUND_BINARY, &runtime_dir.join("icon_no_background.png"))?),
accessibility_image_1: Some(extract_icon(MAC_ACCESSIBILITY_1_BINARY, &runtime_dir.join("accessibility_1.png"))?),
accessibility_image_2: Some(extract_icon(MAC_ACCESSIBILITY_2_BINARY, &runtime_dir.join("accessibility_2.png"))?),
..Default::default() ..Default::default()
}) })
} }