【发布时间】:2016-04-07 14:56:19
【问题描述】:
我正在尝试为 X11 制作一个 xlib 托盘栏,它使用 XEMBED 嵌入托盘图标,如tray specs 中所述。但是,当我使用托盘图标关闭应用程序时,它只是将其从容器窗口中删除,但黑色容器窗口矩形和我的代码中的条目仍然存在。
在XEMBED documentation 中写着
嵌入器有责任跟踪所有转发的 加速器并在客户端窗口消失时将其删除。
但是,当嵌入式窗口死机时,我的应用程序没有收到任何事件或指示。
我基本上只收到一个停靠请求事件,之后什么都没有。当一个停靠请求事件出现时,我为我的面板创建一个子窗口,其中包含托盘窗口并像这样重新设置它:
enum trayIconSize = 24; // dimensions of icon
icon.trayWindow = XCreateWindow(x.display, panel.window, 0, 0, ...);
icon.ownerHandle = event.data.l[2]; // window id of icon which wants to dock
XReparentWindow(x.display, icon.ownerHandle, icon.trayWindow, 0, 0);
XMoveResizeWindow(x.display, icon.ownerHandle, 0, 0, trayIconSize, trayIconSize);
将其添加到面板没有任何问题,但我不知道如何检查何时再次将其删除。
如何让我的应用程序接收这些托盘图标的关闭事件,或者如何检查重新设置的窗口是否仍然存在?
【问题讨论】:
标签: d xlib system-tray freedesktop.org xembed