Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 当我的程序在前台时,覆盖gnome中的全局热键Alt-F2_Linux_X11 - Fatal编程技术网

Linux 当我的程序在前台时,覆盖gnome中的全局热键Alt-F2

Linux 当我的程序在前台时,覆盖gnome中的全局热键Alt-F2,linux,x11,Linux,X11,我的问题与此类似: Gnome似乎为Alt-F2调用了XGrabKey(),但它也是我程序中的一个热键。当我的程序在前台时,如何让它接收这个事件而不是Gnome shell 如果调用XGrabKey(),它将返回BadAccess。如果我调用XGrabKeyboard(),那么我的程序将抑制所有其他全局热键。这是不可能的。您没有收到该事件。根窗口接收按键并由窗口管理器拥有。然后,窗口管理器委派按键。全局快捷方式优先 一个邪恶的黑客可能是在程序运行时改变Gnome的全局快捷方式。用户会为此烧毁你的

我的问题与此类似:

Gnome似乎为Alt-F2调用了
XGrabKey()
,但它也是我程序中的一个热键。当我的程序在前台时,如何让它接收这个事件而不是Gnome shell


如果调用
XGrabKey()
,它将返回
BadAccess
。如果我调用
XGrabKeyboard()
,那么我的程序将抑制所有其他全局热键。

这是不可能的。您没有收到该事件。根窗口接收按键并由窗口管理器拥有。然后,窗口管理器委派按键。全局快捷方式优先

一个邪恶的黑客可能是在程序运行时改变Gnome的全局快捷方式。用户会为此烧毁你的房子

另一种选择是,正如你提到的,抓住键盘。然后接收事件,而不是根窗口。您可以通过XTest扩展将不感兴趣的按键(其他全局快捷方式)传递到根窗口。用户会为此烧毁你的房子


如果您更改快捷方式,用户可能会非常高兴。

即使可能,我建议不要这样做。Alt+F2是一个非常常见的热键,不仅在Gnome中使用,在许多其他桌面环境中也使用它来运行命令/程序。当然,肯定还有其他更适合此任务的方法?只有在顶级应用程序尚未处理此类按键事件的情况下,才能通过根窗口处理此类按键事件吗?您能否澄清您的问题?在谁看来可能?窗口管理器?最顶级的应用程序?