ecore: Fix support for intl keyboards
[framework/uifw/ecore.git] / src / lib / ecore_x / xlib / ecore_x.c
index 98c2526..e40966f 100644 (file)
@@ -130,6 +130,7 @@ int ECORE_X_MODIFIER_SHIFT = 0;
 int ECORE_X_MODIFIER_CTRL = 0;
 int ECORE_X_MODIFIER_ALT = 0;
 int ECORE_X_MODIFIER_WIN = 0;
+int ECORE_X_MODIFIER_MODE = 0;
 
 EAPI int ECORE_X_LOCK_SCROLL = 0;
 EAPI int ECORE_X_LOCK_NUM = 0;
@@ -217,8 +218,9 @@ _ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int idx)
 {
 #ifdef ECORE_XKB
    return XkbKeycodeToKeysym(display, keycode, 0, idx);
-#endif
+#else
    return XKeycodeToKeysym(display, keycode, idx);
+#endif
 }
 
 void
@@ -239,11 +241,10 @@ _ecore_x_modifiers_get(void)
    /* the windows key... a valid modifier :) */
    ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Super_L);
    if (!ECORE_X_MODIFIER_WIN)
-     ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Mode_switch);
-
-   if (!ECORE_X_MODIFIER_WIN)
      ECORE_X_MODIFIER_WIN = _ecore_x_key_mask_get(XK_Meta_L);
 
+   ECORE_X_MODIFIER_MODE = _ecore_x_key_mask_get(XK_Mode_switch);
+
    if (ECORE_X_MODIFIER_WIN == ECORE_X_MODIFIER_ALT)
      ECORE_X_MODIFIER_WIN = 0;
 
@@ -2155,6 +2156,9 @@ _ecore_x_event_modifier(unsigned int state)
    if (state & ECORE_EVENT_MODIFIER_WIN)
      xmodifiers |= ECORE_X_MODIFIER_WIN;
 
+   if (state & ECORE_EVENT_MODIFIER_MODE)
+     xmodifiers |= ECORE_X_MODIFIER_MODE;
+
    if (state & ECORE_EVENT_LOCK_SCROLL)
      xmodifiers |= ECORE_X_LOCK_SCROLL;