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
#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)
{
{
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;
}
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,
double mry);
void _ecore_x_modifiers_get(void);
+KeySym _ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int index);
//#define LOGFNS 1
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;