c - 为纯 X11 应用程序向 Unity 的全局菜单栏添加项目

标签 c linux gtk x11 ubuntu-unity

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

最佳答案

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

我使用 node-dbus 在 JavaScript 中创建了一个简单的库来实现所有这些和 node-x11图书馆。参见 example为它创建顶层窗口和统一菜单(这里没有 glib/libdbus/libx11 依赖项,纯网络)

关于c - 为纯 X11 应用程序向 Unity 的全局菜单栏添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24293123/

相关文章:

c - 3 维 malloc 数组的段错误

c - 使用特定的 OpenSSL 版本构建 OpenVPN

linux - 如何链接 'mimetype -b' 和 'find' 命令以获取同一 csv 中的文件名和文件类型?

c++ 异常和 pthread_cancel 混淆

python - gtk TreeView : place image buttons on rows

c - 与 NodeJs 和 mbedtls 一起工作的加密程序

Java通过TCP发送给C

c - POSIX 取消点应该如何表现?

c - 将接收到的参数传递给回调函数

gtk - 使用 compton 的 GTK 窗口的不透明度问题