替换XKeycodeToKeysym

当我尝试在Ubuntu 12.04中使用X11标头构建我的代码
case KeyPress:
        xcommon_update_server_time( event.xkey.time );
        /* if( event.xkey.state & ShiftMask ) arg |= I_SHIFT; */
        /* this alternate approach allows handling of keys like '<' and '>' -- mrallen */
        if( event.xkey.state & ShiftMask ) {
            mykey = XKeycodetoKeysym( display,event.xkey.keycode,1 );
        } else {
            mykey = XKeycodetoKeysym( display,0 );
        }

预期结果是什么?
编译.

会发生什么?

warning: 'XKeycodetoKeysym' is deprecated (declared at /usr/include/X11/Xlib.h:1695) [-Wdeprecated-declarations]

由于https://bugs.freedesktop.org/show_bug.cgi?id=5349 XKeycodetoKeysym现已正确标记为已弃用.

如何修复我的代码以警告免费和正确的构建?

谢谢

解决方法

如果XKB可用,那么XKeycodetoKeysym的最简单替代是:
#include <X11/XKBlib.h>
/* which declares:
     KeySym XkbKeycodetoKeysym(display *dpy,KeyCode kc,unsigned int group,unsigned int level); */

…然后原始问题的代码可能变成:

mykey = XkbKeycodetoKeysym( display,event.xkey.state & ShiftMask ? 1 : 0);

笔记:

>此chromium bug report讨论了XGetKeyboardMapping和XKB替换解决方案.
> X.org上的XkbKeyCodeToKeysym手册页

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...