diff --git a/espanso-modulo/src/sys/interop/interop.h b/espanso-modulo/src/sys/interop/interop.h index 9339b4c..2a571e4 100644 --- a/espanso-modulo/src/sys/interop/interop.h +++ b/espanso-modulo/src/sys/interop/interop.h @@ -117,4 +117,5 @@ typedef struct WizardMetadata { int (*add_to_path)(); int (*enable_accessibility)(); int (*is_accessibility_enabled)(); + void (*on_completed)(); } WizardMetadata; \ No newline at end of file diff --git a/espanso-modulo/src/sys/interop/mod.rs b/espanso-modulo/src/sys/interop/mod.rs index 20c84d0..cbddb98 100644 --- a/espanso-modulo/src/sys/interop/mod.rs +++ b/espanso-modulo/src/sys/interop/mod.rs @@ -134,6 +134,7 @@ pub struct WizardMetadata { pub add_to_path: extern fn() -> c_int, pub enable_accessibility: extern fn() -> c_int, pub is_accessibility_enabled: extern fn() -> c_int, + pub on_completed: extern fn(), } // Native bindings diff --git a/espanso-modulo/src/sys/wizard/mod.rs b/espanso-modulo/src/sys/wizard/mod.rs index ffa1733..46f48ab 100644 --- a/espanso-modulo/src/sys/wizard/mod.rs +++ b/espanso-modulo/src/sys/wizard/mod.rs @@ -76,17 +76,15 @@ pub fn show(options: WizardOptions) { .lock() .expect("unable to acquire lock in add_to_path method"); let handlers_ref = (*lock).as_ref().expect("unable to unwrap handlers"); - // TODO: - // if let Some(handler_ref) = handlers_ref.add_to_path.as_ref() { - // if (*handler_ref)() { - // 1 - // } else { - // 0 - // } - // } else { - // -1 - // } - 0 + if let Some(handler_ref) = handlers_ref.add_to_path.as_ref() { + if (*handler_ref)() { + 1 + } else { + 0 + } + } else { + -1 + } } extern "C" fn enable_accessibility() -> c_int { @@ -125,6 +123,16 @@ pub fn show(options: WizardOptions) { 0 } + extern "C" fn on_completed() { + let lock = HANDLERS + .lock() + .expect("unable to acquire lock in on_completed method"); + let handlers_ref = (*lock).as_ref().expect("unable to unwrap handlers"); + if let Some(handler_ref) = handlers_ref.on_completed.as_ref() { + (*handler_ref)() + } + } + { let mut lock = HANDLERS.lock().expect("unable to acquire handlers lock"); *lock = Some(options.handlers) @@ -174,6 +182,7 @@ pub fn show(options: WizardOptions) { add_to_path, enable_accessibility, is_accessibility_enabled, + on_completed, }; unsafe { diff --git a/espanso-modulo/src/sys/wizard/wizard.cpp b/espanso-modulo/src/sys/wizard/wizard.cpp index 21085c2..8b69d34 100644 --- a/espanso-modulo/src/sys/wizard/wizard.cpp +++ b/espanso-modulo/src/sys/wizard/wizard.cpp @@ -98,6 +98,7 @@ protected: void welcome_start_clicked(wxCommandEvent &event); void migrate_button_clicked(wxCommandEvent &event); void migrate_compatibility_mode_clicked(wxCommandEvent &event); + void add_path_continue_clicked( wxCommandEvent& event ); void navigate_to_next_page_or_close(); void change_default_button(int target_page); @@ -180,6 +181,41 @@ void DerivedFrame::migrate_button_clicked(wxCommandEvent &event) } } +void DerivedFrame::add_path_continue_clicked( wxCommandEvent& event ) { + if (!add_path_checkbox->IsChecked()) { + this->navigate_to_next_page_or_close(); + return; + } + + if (metadata->add_to_path) + { + while (true) { + int result = metadata->add_to_path(); + if (result == 1) + { + this->navigate_to_next_page_or_close(); + return; + } + else + { + wxMessageDialog* dialog = new wxMessageDialog(this, + "An error occurred while registering the 'espanso' command to the PATH, please check the logs for more information.\nDo you want to retry? You can always add espanso to the PATH later", + "Operation failed", + wxCENTER | wxOK_DEFAULT | wxOK | wxCANCEL | + wxICON_EXCLAMATION); + + dialog->SetOKLabel("Retry"); + + int prompt_result = dialog->ShowModal(); + if (prompt_result == wxID_CANCEL) { + this->navigate_to_next_page_or_close(); + break; + } + } + } + } +} + void DerivedFrame::check_timer_tick(wxTimerEvent &event) { if (this->m_simplebook->GetSelection() == LEGACY_VERSION_PAGE_INDEX) diff --git a/espanso-modulo/src/wizard/mod.rs b/espanso-modulo/src/wizard/mod.rs index 3885c82..1208831 100644 --- a/espanso-modulo/src/wizard/mod.rs +++ b/espanso-modulo/src/wizard/mod.rs @@ -43,6 +43,7 @@ pub struct WizardHandlers { pub add_to_path: Option bool + Send>>, pub enable_accessibility: Option>, pub is_accessibility_enabled: Option bool + Send>>, + pub on_completed: Option>, } #[derive(Debug)]