问题描述
我有一个应用程序,我需要拦截键盘 LEFT / RIGHT 按键并将它们转换为 SHIFT+TAB / TAB。我了解 Gdk::Window::add_filter()
或 gdk_window_add_filter()
是我前进的方向。
所以我通过调用上面的方法安装了一个过滤器功能,我能够正确地拦截事件。但是我无法将 X 事件转换为等效的 Gdk 事件。
001 GdkFilterReturn FilterInput(GdkXEvent *xevent,002 GdkEvent *event,003 gpointer data)
004 {
005 GdkFilterReturn eRet = GDK_FILTER_CONTINUE;
006
007 {
008 XEvent *pEvent = (XEvent*)xevent;
009
010 if (2
011 == pEvent->type)
012 {
013 if ((113
014 == pEvent->xkey.keycode)
015 || (114
016 == pEvent->xkey.keycode))
017 {
018 event->key.hardware_keycode = pEvent->xkey.keycode;
019 event->key.keyval = GDK_KEY_Tab;
020 event->key.length = 0;
021 event->key.time = pEvent->xkey.time;
022 event->key.type = GDK_KEY_PRESS;
023
024 if(113 == pEvent->xkey.keycode)
025 {
026 event->key.state |= GDK_SHIFT_MASK;
027 event->key.keyval = GDK_KEY_ISO_Left_Tab;
028 }
029
030 eRet = GDK_FILTER_TRANSLATE;
031 }
032 }
033 }
034
035 return eRet;
036 }
当我执行 LEFT / RIGHT 并带有以下警告时,上述代码总是会导致应用程序崩溃。
Gdk-WARNING **:13:16:43.246:类型 8 的事件不持有 GdkDevice。它很可能是在 Gdk/GTK+ 之外合成的
我进行了大量搜索以找到将 X 事件转换为 Gdk 事件而无需任何线索的示例。有人能告诉我我的代码中缺少什么吗,或者指出一些完成过滤的示例?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)