有没有人知道一个 xlib 函数可以在不失去原始焦点的情况下捕获按键事件?如何消除它?
(或者说“如何使用 XGrabKey() 而不生成抓取式焦点丢失”?)
(或者说“如何在系统级别消除 NotifyGrab 和 NotifyUngrab 焦点事件?”)
XGrabKey 会在按键被按下时失去焦点,并在松开按键时恢复焦点。
我想要捕获按键事件,而不将其泄漏到原始窗口中(就像 XGrabKey 可以做到的那样)。
参考资料:
...XGrabKey将窃取焦点... https://bugs.launchpad.net/gtkhotkey/+bug/390552/comments/8
...程序接收控制以响应按键组合。同时,程序已暂时获取焦点... 在XGrabKey(board)期间,发现哪个窗口已被聚焦
...XGrabKeyboard函数主动控制键盘并生成FocusIn和FocusOut事件... http://www.x.org/archive/X11R6.8.0/doc/XGrabKeyboard.3.html#toc3
...我看不到提供Metacity当前桌面更改行为(同时更改和显示弹出对话框)的方法而不会导致窗口的Grab类型失去焦点... https://mail.gnome.org/archives/wm-spec-list/2007-May/msg00000.html
...全屏模式不应在使用NotifyGrab的FocusOut事件中退出... https://bugzilla.mozilla.org/show_bug.cgi?id=578265
抓取键盘不允许更改焦点... grabbing keyboard doesnt allow changing focus
由Grabs生成的焦点事件(包括XGrabKeyboard的活动抓取和XGrabKey的被动抓取) http://www.x.org/releases/X11R7.6/doc/libX11/specs/libX11/libX11.html#Focus_Events_Generated_by_Grabs
XGrabKey源代码:http://cgit.freedesktop.org/xorg/lib/libX11/tree/src/GrKey.c也许我们可以修改它以摆脱焦点失去事件?
ActivateKeyboardGrab()中有"DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab);": http://cgit.freedesktop.org/xorg/xserver/tree/dix/events.c