【发布时间】:2014-06-19 07:21:22
【问题描述】:
目标
我想根据键将键盘输入重定向到不同的窗口。不是所有的键都会重定向到同一个窗口,我不能用XSetInputFocus。
第一次尝试:XGrabKey
>我发现我可以抓取某些键,然后将事件发送到正确的窗口。 我像这样使用XGrabKey
XGrabKey( mDisplay(),
XKeysymToKeycode(mDisplay(),XK_F1) ,
AnyModifier ,
RootWindow(mDisplay(), mScreenNum),
false, //Events aren't sent to the focused window
GrabModeAsync,
GrabModeAsync );
它不适用于 F1 到 F4 键,但它适用于 F5 和 F6。它也不适用于一些常规键,如 e、r 和 t。可能还有其他人。 我需要能够重定向 Fkey,所以这个解决方案对我不起作用。
第二次尝试:XGrabKeyboard
我试过XGrabKeyboard,像这样
XGrabKeyboard(mDisplay(),
RootWindow(mDisplay(), mScreenNum),
false,
GrabModeAsync,
GrabModeAsync,
CurrentTime);
它适用于所有 Fkey,但它产生了其他问题。当抓取键盘处于活动状态时,我无法再用鼠标移动窗口(如果应用程序移动其窗口,它仍然有效),我无法访问上下文菜单和闪烁的“|”不显示在输入区域。
其他信息
there 已经讨论过这个问题,但他们没有找到解决方案。我使用的是 Lubuntu(LXDE) 而不是 GNOME,我仍然有同样的问题。。 p>
unmap 事件可能会提供一些信息:
当键盘没有被抓住并且我右击
显示上下文菜单,没有取消映射事件。
当我退出上下文菜单时:
我有 3 个取消映射事件:(我在 Unmap 旁边打印窗口的名称)
Unmap pcmanfm
Unmap pcmanfm
Unmap
当键盘被抓住并且我右击
我只有 1 个取消映射事件:
Unmap
上下文菜单看起来在显示之前未映射。
我的要求
我想任一:
- 使用 XGrabKeyboard 没有副作用
- 将 XGrabKey 与任意键一起使用
- 使用允许我重定向键盘输入的另一个函数
谢谢。
【问题讨论】: