I thought XKeycodeToKeysym was still the correct function to use in the rare case you found yourself running without XKB - it certainly doesn't seem like we should recommend people reinvent it with XGetKeyboardMapping on their own, especially not by doing a round trip to grab the table each time, lookup one keysym and then discarding it.
-alan- On 06/30/13 06:15 AM, Christophe wrote:
From: Christophe CURIS <christophe.cu...@free.fr> The original update provided very few information to developper; this patches describes a bit more how to properly fix the warning, including an example to help devs fixing the issue properly. Signed-off-by: Christophe CURIS <christophe.cu...@free.fr> --- man/XStringToKeysym.man | 51 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/man/XStringToKeysym.man b/man/XStringToKeysym.man index 3a7fb7b..19f2b1f 100644 --- a/man/XStringToKeysym.man +++ b/man/XStringToKeysym.man @@ -142,9 +142,9 @@ If no symbol is defined, returns .ZN NoSymbol . .ZN XKeycodeToKeysym -predates the XKB extension. If you want to lookup a KeySym while -using XKB you have to use -.ZN XkbKeycodeToKeysym . +is deprecated, please see +.B NOTES +below. .LP If the specified KeySym is not defined for any KeyCode, .ZN XKeysymToKeycode @@ -158,6 +158,51 @@ otherwise, the specified KeySym is returned to both lower_return and upper_return. Support for conversion of other than Latin and Cyrillic KeySyms is implementation-dependent. +.SH NOTES +The function +.ZN XKeysymToKeycode +does not provide the necessary capability to handle modern multi-language +environments. It have been marked as deprecated to help removing its use. +.LP +If the +.B Xkb +extension is present (see +.ZN XkbQueryExtension ), +the proper function to use is +.ZN XkbKeycodeToKeysym . +If the extension is not present, you may use the function +.ZN XLookupKeysym +to retreive the KeySym, or if not applicable you may use +.ZN XGetKeyboardMapping +instead. An example of proper usage could be: + +.Ds 0 +/* This code should be executed only once after connecting to the display */ +Bool have_xkb; +have_xkb = XkbQueryExtension(display, NULL, NULL, NULL, NULL, NULL); + +/* This code effectively converts a Keycode to KeySym */ +KeySym keysym; +if (have_xkb) { + keysym = XkbKeycodeToKeysym(display, keycode, group, level); +} else { + KeySym *key_table; + int keysym_per_keycode; + + key_table = XGetKeyboardMapping(display, keycode, 1, &keysym_per_keycode); + if (key_table) { + keysym = key_table[level]; + XFree(key_table); + } else { + keysym = NoSymbol; + } +} +.De + +.SH HISTORY +The function +.ZN XKeysymToKeycode +have been marked deprecated from X11R7.7 released on 6 June 2012. .SH "SEE ALSO" XkbKeycodeToKeysym(__libmansuffix__), XLookupKeysym(__libmansuffix__)
-- -Alan Coopersmith- alan.coopersm...@oracle.com Oracle Solaris Engineering - http://blogs.oracle.com/alanc _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel