我正在尝试为 X11 制作一个 xlib 托盘栏,它使用 XEMBED 嵌入托盘图标,如托盘规格中所述。但是,当我使用托盘图标关闭应用程序时,它只是将其从容器窗口中删除,但黑色容器窗口矩形和我的代码中的条目仍然存在。
在XEMBED 文档中它说
嵌入器有责任跟踪所有转发的加速器并在客户端窗口终止时将其删除。
但是,当嵌入式窗口死机时,我的应用程序不会收到任何事件或指示。
我基本上只收到一个停靠请求事件,之后什么都没有。当一个停靠请求事件出现时,我为我的面板创建一个子窗口,其中包含托盘窗口并像这样重新设置它:
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);
将它添加到面板没有任何问题,但我不知道如何检查何时再次删除它。
如何让我的应用程序接收这些托盘图标的关闭事件,或者如何检查重新设置的窗口是否仍然存在?