Ignore unknown modifiers
authorChoe Hwanjin <choe.hwanjin@gmail.com>
Mon, 14 Dec 2009 14:03:43 +0000 (23:03 +0900)
committerChoe Hwanjin <choe.hwanjin@gmail.com>
Mon, 14 Dec 2009 14:03:43 +0000 (23:03 +0900)
 * ignore all modifiers which ibus-hangul don't understand,
   or modifier compare routine will not work.
   e.g. When a user change the keyboard layout with Xkb.

src/engine.c

index 62de567..e4a4495 100644 (file)
@@ -955,10 +955,17 @@ static gboolean
 key_event_list_match(GArray* list, guint keyval, guint modifiers)
 {
     guint i;
+    guint mask;
 
-    modifiers &= 0x7FFF;          /* ignore ibus internal values */
-    modifiers &= ~IBUS_LOCK_MASK; /* ignore capslock */
-    modifiers &= ~IBUS_MOD2_MASK; /* ignore numlock */
+    /* ignore capslock and numlock */
+    mask = IBUS_SHIFT_MASK |
+          IBUS_CONTROL_MASK |
+          IBUS_MOD1_MASK |
+          IBUS_MOD3_MASK |
+          IBUS_MOD4_MASK |
+          IBUS_MOD5_MASK;
+
+    modifiers &= mask;
     for (i = 0; i < list->len; ++i) {
        struct KeyEvent* ev = &g_array_index(list, struct KeyEvent, i);
        if (ev->keyval == keyval && ev->modifiers == modifiers) {