Hi,

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 

So I made a wrapper function that makes use of XkbKeycodeToKeysym when
possible or fallback to XKeycodeToKeysym. I'm ready to commit it but I
would like to have comments about the patch, because, well, you know the
surrounding code better than me :-)

-- 
Jérôme Pinot
http://ngc891.blogdns.net/
Index: ecore/src/lib/ecore_x/xlib/ecore_x_test.c
===================================================================
--- ecore/src/lib/ecore_x/xlib/ecore_x_test.c   (revision 71640)
+++ ecore/src/lib/ecore_x/xlib/ecore_x_test.c   (working copy)
@@ -98,9 +98,9 @@
           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;
Index: ecore/src/lib/ecore_x/xlib/ecore_x_private.h
===================================================================
--- ecore/src/lib/ecore_x/xlib/ecore_x_private.h        (revision 71640)
+++ ecore/src/lib/ecore_x/xlib/ecore_x_private.h        (working copy)
@@ -372,6 +372,7 @@
                                               double mry);
 
 void _ecore_x_modifiers_get(void);
+KeySym _ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int index);
 
 //#define LOGFNS 1
 
Index: ecore/src/lib/ecore_x/xlib/ecore_x.c
===================================================================
--- ecore/src/lib/ecore_x/xlib/ecore_x.c        (revision 71640)
+++ ecore/src/lib/ecore_x/xlib/ecore_x.c        (working copy)
@@ -211,6 +211,16 @@
 
 #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 @@
        {
           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: ecore/src/lib/ecore_x/xlib/ecore_x_events.c
===================================================================
--- ecore/src/lib/ecore_x/xlib/ecore_x_events.c (revision 71640)
+++ ecore/src/lib/ecore_x/xlib/ecore_x_events.c (working copy)
@@ -278,8 +278,8 @@
    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,

Attachment: signature.asc
Description: Digital signature

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to