luc*_*cho 7 keyboard-shortcuts x11
如果右键单击子菜单(例如桌面、图标/文件或面板)处于活动状态,则键盘快捷键(如Ctrl+ Alt+ T)或多媒体键(如播放/暂停)将不起作用。同样,在 gmusicbrowser、qpdfview 或 Libreoffice 等应用程序中打开右键单击菜单时,它们也不起作用(我不会尝试每一个)。在通过按下任何面板图标打开面板中的子菜单后,或者在 Thunar 中打开子菜单(例如编辑)时,它们都不起作用。
为什么是这样?直觉上,这似乎是因为活动的子菜单禁用了“系统”“从快捷方式收听呼叫”的能力。这样对吗??严格来说,这不是系统“听能力”的限制吗?
奇怪的是(?),当打开 Firefox 的右键菜单时不会发生这种情况。
这种效果是由于X Windows 中的一个抓取。当我在 Fedora 25 中运行 Wayland 桌面时,即使 XWayland 中的 X 应用程序也不再有这种效果。与此问题相关的KDE 错误已被关闭以支持使用 Wayland。
从技术上讲,是否使用抓取取决于所使用的 GUI 工具包/小部件(或应用程序,如果它直接与 X 对话)。许多 GUI 工具包在菜单打开时使用 X 抓取。然而原因- 以及 Firefox 似乎如何避免它 - 似乎相当模糊。
X 抓取的另一个用途是游戏和嵌套桌面(例如远程访问和虚拟机)。最初编写此答案时,Wayland 不支持任何获取所需键盘事件的方法。[1] [2]。因此,目前尚不清楚 XWayland 抓取将如何处理,即 XWayland 抓取是否会再次开始具有您描述的特定效果。Fedora 27 上的测试表明没有。
堆栈溢出建议使用输入抓取,而不是将输入焦点设置到子窗口,可能是防止窗口管理器以“非活动”颜色重新绘制主窗口标题栏的唯一方法。
我能够找到的关于此的最“官方”来源是错误报告。很明显,使用 X 抓取菜单是一个长期存在的问题。如果你读到最后,你会看到一个建议,它可以解决上面的窗口管理器问题。也许这就是 Firefox 所做的。
(仔细想想,我不确定全局键盘快捷键在原始桌面环境中是否重要。我知道 Alt+Tab 来自 CDE,但没有明显的理由在菜单打开时使用 Alt+Tab)。
Qt 菜单弹出窗口抓取键盘和指针,防止用户使用系统热键(例如做屏幕截图)
X11 提供的实现弹出菜单的机制是全局键盘鼠标抓取。所有现代应用程序和工具包都使用这种机制,包括 Qt。不幸的是,我没有看到可以在没有一些非常严重的行为改变(这也会损害用户体验)的情况下改变这种情况的方法。
这是由 Michel 在http://bugs.debian.org/514036 中回答的
--8<-- 米歇尔·丹泽尔
确实如此;这是菜单在指针位于菜单之外时可以接收输入事件的唯一方式。AFAIK 这是一个相当深的 X11 设计问题,所以恐怕这不能轻易解决。随意把它带到上游。
--8<--
好的。感谢此信息。我向上游报告了:
我不清楚是否确实需要通过键盘抓取来实现带有访问键的菜单,尽管工具包经常这样做。
从将事件定向到菜单窗口的角度来看可能很方便。
但在大多数情况下,主应用程序窗口会有焦点,因此应用程序可以在那里接收键盘事件。
如果由于某种原因客户端通常没有在主窗口中获得焦点,我想知道它是否应该协商键盘焦点(可能在全局活动输入模型下)而不是窃取键盘抓取,这在客户端发布之前不能被覆盖。
通过单击屏幕上的任何其他位置,但实际上不会触发您单击的元素,指针抓取可能有助于“单击”菜单。但是维基百科说可以在不抓住键盘的情况下抓住指针。/
| 归档时间: |
|
| 查看次数: |
837 次 |
| 最近记录: |