将项目添加到Unity的全局菜单栏中,以获得纯X11应用程序

时间:2014-06-18 18:57:38

标签: c linux gtk x11 ubuntu-unity

我的应用程序仅使用纯X11 API编写,即没有GTK,qt或任何其他中间件。一切都是通过低级Xlib API完成的,例如: XCreateWindow()等。是否可以从纯X11应用程序向Unity的全局菜单栏添加项目,或者这会迫使我使用像GTK这样的工具包来执行所有窗口和事件循环处理?我真的很想坚持使用我当前基于X11的纯实现,但如果能够以某种方式为Unity应用程序添加一些菜单项,那就太棒了。

1 个答案:

答案 0 :(得分:2)

要在每次聚焦某个顶层窗口时显示菜单,您需要调用com.canonical.AppMenu.Registrar.RegisterWindow /com/canonical/AppMenu/Registrar方法传递窗口ID和菜单路径(您的字符串ID,也是服务名称 - 通常构建使用一些路径并赢得id)。然后,您需要在该服务名称上实现com.canonical.dbusmenu接口 - 即GetLayoutGetGroupPropertiesEventAboutToShowLayoutUpdated方法。< / p>

我使用node-dbusnode-x11库在JavaScript中实现了所有这些功能的简单库。请参阅example创建顶层窗口和统一菜单(此处没有glib / libdbus / libx11依赖,纯网络)