fix ctrl+minus. Closes T922

This commit is contained in:
Boris Faure 2014-02-24 23:49:21 +01:00
parent e1de7a8521
commit 90b3a93698
3 changed files with 22 additions and 27 deletions

View File

@ -217,7 +217,8 @@ _key_try(Termpty *ty, const Keyout *map, Evas_Event_Key_Down *ev)
} }
void void
keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev) keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev,
int alt, int shift, int ctrl)
{ {
if (ty->state.crlf) if (ty->state.crlf)
{ {
@ -228,10 +229,9 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev)
if (_key_try(ty, nocrlf_keyout, ev)) return; if (_key_try(ty, nocrlf_keyout, ev)) return;
} }
if ( if (
((ty->state.alt_kp) && ((ty->state.alt_kp) && (shift))
(evas_key_modifier_is_set(ev->modifiers, "Shift")))
// || ((!ty->state.alt_kp) && // || ((!ty->state.alt_kp) &&
// (!evas_key_modifier_is_set(ev->modifiers, "Shift"))) // (!shift))
) )
{ {
if (_key_try(ty, kps_keyout, ev)) return; if (_key_try(ty, kps_keyout, ev)) return;
@ -243,9 +243,9 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev)
if (_key_try(ty, kp_keyout, ev)) return; if (_key_try(ty, kp_keyout, ev)) return;
} }
} }
if (evas_key_modifier_is_set(ev->modifiers, "Control")) if (ctrl)
{ {
if (!strcmp(ev->key, "Minus")) if (!strcmp(ev->key, "minus"))
{ {
termpty_write(ty, "\037", 1); // generate US (unit separator) termpty_write(ty, "\037", 1); // generate US (unit separator)
return; return;
@ -255,17 +255,17 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev)
termpty_write(ty, "\0", 1); // generate 0 byte for ctrl+space termpty_write(ty, "\0", 1); // generate 0 byte for ctrl+space
return; return;
} }
else if (!evas_key_modifier_is_set(ev->modifiers, "Shift")) else if (!shift)
{ {
if (_key_try(ty, ctrl_keyout, ev)) return; if (_key_try(ty, ctrl_keyout, ev)) return;
} }
} }
else if (evas_key_modifier_is_set(ev->modifiers, "Shift")) else if (shift)
{ {
if (_key_try(ty, shift_keyout, ev)) return; if (_key_try(ty, shift_keyout, ev)) return;
} }
else if (evas_key_modifier_is_set(ev->modifiers, "Alt")) else if (alt)
{ {
if (_key_try(ty, alt_keyout, ev)) return; if (_key_try(ty, alt_keyout, ev)) return;
} }
@ -302,7 +302,7 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev)
{ {
if ((ev->string[0]) && (!ev->string[1])) if ((ev->string[0]) && (!ev->string[1]))
{ {
if (evas_key_modifier_is_set(ev->modifiers, "Alt")) if (alt)
termpty_write(ty, "\033", 1); termpty_write(ty, "\033", 1);
} }
termpty_write(ty, ev->string, strlen(ev->string)); termpty_write(ty, ev->string, strlen(ev->string));

View File

@ -1,6 +1,7 @@
#ifndef _KEYIN_H__ #ifndef _KEYIN_H__
#define _KEYIN_H__ 1 #define _KEYIN_H__ 1
void keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev); void keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev,
int alt, int shift, int ctrl);
#endif #endif

View File

@ -2065,11 +2065,12 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
Termio *sd = evas_object_smart_data_get(data); Termio *sd = evas_object_smart_data_get(data);
Ecore_Compose_State state; Ecore_Compose_State state;
char *compres = NULL; char *compres = NULL;
int alt = evas_key_modifier_is_set(ev->modifiers, "Alt");
int shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control");
EINA_SAFETY_ON_NULL_RETURN(sd); EINA_SAFETY_ON_NULL_RETURN(sd);
if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) && if ((!alt) && (ctrl) && (!shift))
(evas_key_modifier_is_set(ev->modifiers, "Control")) &&
(!evas_key_modifier_is_set(ev->modifiers, "Shift")))
{ {
if (!strcmp(ev->key, "Prior")) if (!strcmp(ev->key, "Prior"))
{ {
@ -2142,9 +2143,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
goto end; goto end;
} }
} }
if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) && if ((!alt) && (ctrl) && (shift))
(evas_key_modifier_is_set(ev->modifiers, "Control")) &&
(evas_key_modifier_is_set(ev->modifiers, "Shift")))
{ {
if (!strcmp(ev->key, "Prior")) if (!strcmp(ev->key, "Prior"))
{ {
@ -2183,9 +2182,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
goto end; goto end;
} }
} }
if ((evas_key_modifier_is_set(ev->modifiers, "Alt")) && if ((alt) && (!shift) && (!ctrl))
(!evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
(!evas_key_modifier_is_set(ev->modifiers, "Control")))
{ {
if (!strcmp(ev->key, "Home")) if (!strcmp(ev->key, "Home"))
{ {
@ -2200,9 +2197,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
goto end; goto end;
} }
} }
if ((evas_key_modifier_is_set(ev->modifiers, "Alt")) && if ((alt) && (ctrl) && (!shift))
(evas_key_modifier_is_set(ev->modifiers, "Control")) &&
(!evas_key_modifier_is_set(ev->modifiers, "Shift")))
{ {
if (_handle_alt_ctrl(ev->key, data)) if (_handle_alt_ctrl(ev->key, data))
{ {
@ -2215,7 +2210,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
// EXCEPTION. Don't filter modifiers alt+shift -> breaks emacs // EXCEPTION. Don't filter modifiers alt+shift -> breaks emacs
// and jed (alt+shift+5 for search/replace for example) // and jed (alt+shift+5 for search/replace for example)
// Don't filter modifiers alt, is used by shells // Don't filter modifiers alt, is used by shells
if (!evas_key_modifier_is_set(ev->modifiers, "Alt")) if ((!alt) && (!ctrl))
{ {
Ecore_IMF_Event_Key_Down imf_ev; Ecore_IMF_Event_Key_Down imf_ev;
@ -2228,8 +2223,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
} }
} }
} }
if ((evas_key_modifier_is_set(ev->modifiers, "Shift")) && if ((shift) && (ev->key))
(ev->key))
{ {
int by = sd->grid.h - 2; int by = sd->grid.h - 2;
@ -2284,7 +2278,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
} }
else goto end; else goto end;
} }
keyin_handle(sd->pty, ev); keyin_handle(sd->pty, ev, alt, shift, ctrl);
end: end:
if (sd->config->flicker_on_key) if (sd->config->flicker_on_key)
edje_object_signal_emit(sd->cursor.obj, "key,down", "terminology"); edje_object_signal_emit(sd->cursor.obj, "key,down", "terminology");