ecore_x: XKeycodeToKeysym
authorngc891 <ngc891@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 4 Jun 2012 05:46:33 +0000 (05:46 +0000)
committerngc891 <ngc891@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 4 Jun 2012 05:46:33 +0000 (05:46 +0000)
ecore_x is calling XKeycodeToKeysym from xlib, but this function has issues. It
has been deprecated 6 months ago in X.org and it is suggested to use
XkbKeycodeToKeysym instead: https://bugs.freedesktop.org/show_bug.cgi?id=25732

This commit makes a wrapper function that makes use of XkbKeycodeToKeysym when
possible or fallback to XKeycodeToKeysym otherwise.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@71677 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_x/xlib/ecore_x.c
src/lib/ecore_x/xlib/ecore_x_events.c
src/lib/ecore_x/xlib/ecore_x_private.h
src/lib/ecore_x/xlib/ecore_x_test.c

index 6788d62..4d942b1 100644 (file)
@@ -211,6 +211,16 @@ _XReply(Display *disp,
 
 #endif /* ifdef LOGRT */
 
+/* wrapper to use XkbKeycodeToKeysym when possible */
+KeySym
+_ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int index)
+{
+#ifdef ECORE_XKB
+   return XkbKeycodeToKeysym(display, keycode, 0, index);
+#endif
+   return XKeycodeToKeysym(display, keycode, index);
+}
+
 void
 _ecore_x_modifiers_get(void)
 {
@@ -1056,7 +1066,8 @@ _ecore_x_key_mask_get(KeySym sym)
        {
           for (j = 0; j < 8; j++)
             {
-               sym2 = XKeycodeToKeysym(_ecore_x_disp, mod->modifiermap[i], j);
+               sym2 = _ecore_x_XKeycodeToKeysym(_ecore_x_disp,
+                                                mod->modifiermap[i], j);
                if (sym2 != 0)
                  break;
             }
index 0b06a79..acb64a9 100644 (file)
@@ -278,8 +278,8 @@ _ecore_key_press(int event,
    int val;
 
    _ecore_x_last_event_mouse_move = 0;
-   keyname = XKeysymToString(XKeycodeToKeysym(xevent->display,
-                                              xevent->keycode, 0));
+   keyname = XKeysymToString(_ecore_x_XKeycodeToKeysym(xevent->display,
+                                                       xevent->keycode, 0));
    if (!keyname)
      {
         snprintf(keyname_buffer,
index 02a01f7..8132e13 100644 (file)
@@ -372,6 +372,7 @@ Ecore_Event_Mouse_Button *_ecore_mouse_button(int event,
                                               double mry);
 
 void _ecore_x_modifiers_get(void);
+KeySym _ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int index);
 
 //#define LOGFNS 1
 
index 23eea10..a4d40f6 100644 (file)
@@ -98,9 +98,9 @@ ecore_x_test_fake_key_press(const char *key __UNUSED__)
           return EINA_FALSE;
 
         keycode = XKeysymToKeycode(_ecore_x_disp, keysym);
-        if (XKeycodeToKeysym(_ecore_x_disp, keycode, 0) != keysym)
+        if (_ecore_x_XKeycodeToKeysym(_ecore_x_disp, keycode, 0) != keysym)
           {
-             if (XKeycodeToKeysym(_ecore_x_disp, keycode, 1) == keysym)
+             if (_ecore_x_XKeycodeToKeysym(_ecore_x_disp, keycode, 1) == keysym)
                shift = 1;
              else
                keycode = 0;