diff --git a/src/bin/termio.c b/src/bin/termio.c index 3bd2fc83..c0a09c17 100644 --- a/src/bin/termio.c +++ b/src/bin/termio.c @@ -1899,39 +1899,12 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, sd = evas_object_smart_data_get(data); if (!sd) return; - if (sd->imf) - { - // EXCEPTION. Don't filter modifiers alt+shift -> breaks emacs - // and jed (alt+shift+5 for search/replace for example) - // Don't filter modifiers alt, is used by shells - if (!evas_key_modifier_is_set(ev->modifiers, "Alt")) - { - Ecore_IMF_Event_Key_Down imf_ev; - - ecore_imf_evas_event_key_down_wrap(ev, &imf_ev); - if (!sd->composing) - { - if (ecore_imf_context_filter_event - (sd->imf, ECORE_IMF_EVENT_KEY_DOWN, (Ecore_IMF_Event *)&imf_ev)) - goto end; - } - } - } + // handle ctrl+1,2,3...9,0 specially before imf filtering if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) && (evas_key_modifier_is_set(ev->modifiers, "Control")) && (!evas_key_modifier_is_set(ev->modifiers, "Shift"))) { - if (!strcmp(ev->keyname, "Prior")) - { - evas_object_smart_callback_call(data, "prev", NULL); - goto end; - } - else if (!strcmp(ev->keyname, "Next")) - { - evas_object_smart_callback_call(data, "next", NULL); - goto end; - } - else if (!strcmp(ev->keyname, "1")) + if (!strcmp(ev->keyname, "1")) { _compose_seq_reset(sd); evas_object_smart_callback_call(data, "tab,1", NULL); @@ -1992,6 +1965,39 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, goto end; } } + if (sd->imf) + { + // EXCEPTION. Don't filter modifiers alt+shift -> breaks emacs + // and jed (alt+shift+5 for search/replace for example) + // Don't filter modifiers alt, is used by shells + if (!evas_key_modifier_is_set(ev->modifiers, "Alt")) + { + Ecore_IMF_Event_Key_Down imf_ev; + + ecore_imf_evas_event_key_down_wrap(ev, &imf_ev); + if (!sd->composing) + { + if (ecore_imf_context_filter_event + (sd->imf, ECORE_IMF_EVENT_KEY_DOWN, (Ecore_IMF_Event *)&imf_ev)) + goto end; + } + } + } + if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) && + (evas_key_modifier_is_set(ev->modifiers, "Control")) && + (!evas_key_modifier_is_set(ev->modifiers, "Shift"))) + { + if (!strcmp(ev->keyname, "Prior")) + { + evas_object_smart_callback_call(data, "prev", NULL); + goto end; + } + else if (!strcmp(ev->keyname, "Next")) + { + evas_object_smart_callback_call(data, "next", NULL); + goto end; + } + } if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) && (evas_key_modifier_is_set(ev->modifiers, "Control")) && (evas_key_modifier_is_set(ev->modifiers, "Shift")))