linux中的菜单如何工作?

时间:2014-07-19 16:44:54

标签: c++ linux x11 dbus xlib

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

TLDR(回答):在linux中,每个窗口都会处理自己的菜单。没有像例如的集中式菜单。 OS X。

编辑:好的,感谢您的见解,即使我的问题非常广泛。我现在明白在linux中没有集中的方式来做窗口菜单,但是每个窗口都处理它自己的菜单。这意味着没有防弹方式来做全局菜单(虽然Unity有很好的实现)。 无论如何,我决定开始挖掘Qt和appmenu-qt5

3 个答案:

答案 0 :(得分:1)

  

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

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

  2. 在外部报告菜单选项没有要求或标准方法。它们是进程私有记忆的一部分。

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

答案 1 :(得分:0)

了解X11X Window System core protocolwindow managersICCCMEWMH

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

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

另见libsdl

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

答案 2 :(得分:0)

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

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

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