billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=90b3a93698ae94da1f4bc20bc723b2a13c81d82e

commit 90b3a93698ae94da1f4bc20bc723b2a13c81d82e
Author: Boris Faure <[email protected]>
Date:   Mon Feb 24 23:49:21 2014 +0100

    fix ctrl+minus. Closes T922
---
 src/bin/keyin.c  | 20 ++++++++++----------
 src/bin/keyin.h  |  3 ++-
 src/bin/termio.c | 26 ++++++++++----------------
 3 files changed, 22 insertions(+), 27 deletions(-)

diff --git a/src/bin/keyin.c b/src/bin/keyin.c
index 42a9fcc..7fd222d 100644
--- a/src/bin/keyin.c
+++ b/src/bin/keyin.c
@@ -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));
diff --git a/src/bin/keyin.h b/src/bin/keyin.h
index b7c83f1..5fa3182 100644
--- a/src/bin/keyin.h
+++ b/src/bin/keyin.h
@@ -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
diff --git a/src/bin/termio.c b/src/bin/termio.c
index 31dd74d..ec0ab93 100644
--- a/src/bin/termio.c
+++ b/src/bin/termio.c
@@ -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");

-- 


Reply via email to