linux中的菜单是如何工作的? [关闭]

Posted

技术标签:

【中文标题】linux中的菜单是如何工作的? [关闭]【英文标题】:How does menu in linux works? [closed] 【发布时间】:2014-09-10 15:13:09 【问题描述】:

我想知道 linux 如何处理应用程序窗口菜单。我正在开发一个面板应用程序,但对于初学者来说,我想列出当前聚焦窗口的菜单项。我应该从哪里开始我的研究? 谢谢

TLDR(答案):在 linux 中,每个窗口都有自己的菜单。没有像例如这样的集中式菜单。操作系统。

编辑:好的,尽管我的问题很广泛,但感谢您的见解。我现在明白在 linux 中没有集中的方式来做窗口菜单,但是每个窗口都处理自己的菜单。这意味着没有防弹方法来执行全局菜单(尽管 Unity 有一个很好的实现)。 不管怎样,我决定开始挖掘 Qt 和 appmenu-qt5。

【问题讨论】:

谷歌是开始研究的好地方 我做了,bud 没有找到任何我可以使用的东西.. 我什至不敢相信你:p 先了解窗口管理器,然后了解 x-server,然后你就会更接近谷歌搜索正确的东西 Linux 没有“菜单”,您必须选择特定的窗口管理器。 窗口管理器只负责应用程序窗口周围的标题栏和边框。 窗口内的所有东西,包括工具栏和菜单栏,都是由应用程序自己创建的。 【参考方案1】:

我想知道linux如何处理应用程序窗口菜单...我想列出当前焦点窗口的菜单项

    GNU/Linux 系统上的桌面 GUI 在此级别是异构的。大多数应用程序将使用小部件工具包实现菜单,通常是 GTK+,但不能保证这一点。

    对于外部报告菜单选项没有要求或标准方法。它们是进程私有内存的一部分。

简而言之,你可以随心所欲地挖掘这个,你不会找到任何东西。单独的窗口管理器/桌面环境不会实现任何便利它,因为根据上面的#2,大多数单独的应用程序都没有,如果 WM 需要,它实际上会被排除在外一切。

【讨论】:

应用程序(或工具包)的可访问性支持可能是一种可能性:如果屏幕阅读器可以获取菜单项的名称,那么另一个程序也可以。不过,我对此接口一无所知。【参考方案2】:

有一些尝试获得全局菜单栏,但部分面临相同的问题:如果全局菜单栏无法确定窗口包含哪些菜单,则全局菜单栏可能无法工作。这需要 GTK+、Qt 和各种应用程序的补丁,但并非所有这些补丁都已被接受。

如果您有兴趣,可以确保您的系统确实包含所有这些补丁,然后您可以使用与全局菜单栏相同的界面。 (大多数设计都将全局菜单栏设为可选;您不需要使用全局菜单栏来访问该界面。)

并非所有获得全局菜单栏的尝试都使用相同的方法和相同的补丁。我相信最近的尝试是 Ubuntu,但他们的方法与早期的方法不兼容,例如 gnome2-globalmenu 项目。 Ubuntu 的补丁是免费提供的,或者为简单起见,您可以在 Ubuntu 系统上开发。

【讨论】:

【参考方案3】:

了解X11、X Window System core protocol、window managers、ICCCM 和 EWMH

然后你会意识到你应该使用一些现有的 C++ 图形toolkit。可能是Qt,但你也可以试试Fox Toolkit(或GtkMM...)

生命太短暂,不能靠自己完成所有这些(不使用工具包,而是直接为Xlib 编码)。到时候(几年)你会得到一些东西,wayland 可能与替换 X11 相关。

另见libsdl。

请注意,窗口管理器(和应用程序)可以自定义菜单 ....

【讨论】:

以上是关于linux中的菜单是如何工作的? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭热点资讯,如何关闭360浏览器热点资讯

在 React 中打开另一个菜单时如何自动关闭一个菜单?

带有多个子菜单下拉菜单的 jQuery 导航菜单关闭父菜单项

如何修改jQuery mobile子菜单中的关闭按钮以进行初始打开

单击子项后侧边菜单关闭

如何正确显示/隐藏移动菜单 onclick