diff --git a/apps/engine.c b/apps/engine.c index e5b0a56..c7256e2 100644 --- a/apps/engine.c +++ b/apps/engine.c @@ -33,6 +33,7 @@ ibus_eei_engine_class_init (IBusEEIEngineClass *klass) engine_class->page_up = ibus_eei_engine_page_up_button; engine_class->candidate_clicked = ibus_eei_engine_candidate_clicked; engine_class->reset = ibus_eei_engine_reset; + engine_class->focus_out = ibus_eei_engine_focus_out; engine_class->enable = ibus_eei_engine_enable; } diff --git a/src/predict/lib/src/lib.rs b/src/predict/lib/src/lib.rs index 09eb398..a925be0 100644 --- a/src/predict/lib/src/lib.rs +++ b/src/predict/lib/src/lib.rs @@ -442,6 +442,25 @@ pub unsafe extern "C" fn ibus_eei_engine_page_up_button(engine: *mut IBusEngine) } } } +#[no_mangle] +pub unsafe extern "C" fn ibus_eei_engine_focus_out(engine: *mut IBusEngine) { + match EngineCore::get(engine) { + Some(engine_core) => { + engine_core.abort_table_input(); + match (*engine_core.parent_engine_class).focus_out { + Some(parent_focus_out) => { + parent_focus_out(engine); + } + None => { + log::error!("Could not retrieve parent function for focus out") + } + } + } + None => { + log::error!("Could not retrieve engine core for focus out"); + } + } +} #[no_mangle] pub unsafe extern "C" fn ibus_eei_engine_reset(engine: *mut IBusEngine) {