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
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)
{
@ -228,10 +229,9 @@ keyin_handle(Termpty *ty, Evas_Event_Key_Down *ev)
if (_key_try(ty, nocrlf_keyout, ev)) return;
}
if (
((ty->state.alt_kp) &&
(evas_key_modifier_is_set(ev->modifiers, "Shift")))
((ty->state.alt_kp) && (shift))
// || ((!ty->state.alt_kp) &&
// (!evas_key_modifier_is_set(ev->modifiers, "Shift")))
// (!shift))
)
{
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 (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)
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
return;
}
else if (!evas_key_modifier_is_set(ev->modifiers, "Shift"))
else if (!shift)
{
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;
}
else if (evas_key_modifier_is_set(ev->modifiers, "Alt"))
else if (alt)
{
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 (evas_key_modifier_is_set(ev->modifiers, "Alt"))
if (alt)
termpty_write(ty, "\033", 1);
}
termpty_write(ty, ev->string, strlen(ev->string));

View File

@ -1,6 +1,7 @@
#ifndef _KEYIN_H__
#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

View File

@ -2065,11 +2065,12 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
Termio *sd = evas_object_smart_data_get(data);
Ecore_Compose_State state;
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);
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 ((!alt) && (ctrl) && (!shift))
{
if (!strcmp(ev->key, "Prior"))
{
@ -2142,9 +2143,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
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 ((!alt) && (ctrl) && (shift))
{
if (!strcmp(ev->key, "Prior"))
{
@ -2183,9 +2182,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
goto end;
}
}
if ((evas_key_modifier_is_set(ev->modifiers, "Alt")) &&
(!evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
(!evas_key_modifier_is_set(ev->modifiers, "Control")))
if ((alt) && (!shift) && (!ctrl))
{
if (!strcmp(ev->key, "Home"))
{
@ -2200,9 +2197,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
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 ((alt) && (ctrl) && (!shift))
{
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
// 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"))
if ((!alt) && (!ctrl))
{
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")) &&
(ev->key))
if ((shift) && (ev->key))
{
int by = sd->grid.h - 2;
@ -2284,7 +2278,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
}
else goto end;
}
keyin_handle(sd->pty, ev);
keyin_handle(sd->pty, ev, alt, shift, ctrl);
end:
if (sd->config->flicker_on_key)
edje_object_signal_emit(sd->cursor.obj, "key,down", "terminology");