Linux 用于 stalonetray 的 XCB dockapp 软件

Linux XCB dockapp software for stalonetray

我正在尝试开发一个小型 XCB 软件,该软件可以放入 stalonetray 等托盘应用程序中。

到目前为止,我设法使用 this tutorial 显示了一个简单的 window,但我无法尝试将 window 放入托盘。

我只是不知道如何让它工作,通过玩 xcb_change_property 或向软件添加 EWMH 支持。

使用 Xlib 我可能会以类似的方式使用 XWMHints :

wm_hints.initial_state = WithdrawnState;
wm_hints.icon_window = wm_hints.window_group = dockapp;
wm_hints.flags = StateHint | IconWindowHint;
XSetWMHints(display, dockapp, &wm_hints);

但我就是找不到 XCB 的出路

由于代码太长无法粘贴,我将 link 转发到我的 git 帐户:

LINK TO THE SOURCES

如果有人有线索?提前致谢

我明白了,

为了将 window 注册到系统托盘,需要向托盘发送消息。我最终得到了以下代码:

 xcb_client_message_event_t tray_request;
 tray_request.response_type = XCB_CLIENT_MESSAGE;
 tray_request.format = 32;
 tray_request.sequence = 0;
 tray_request.window = selection_owner->owner;  // tray window id
 tray_request.type = atom_list[5];  // TODO : change hardcode
 tray_request.data.data32[0] = XCB_CURRENT_TIME;
 tray_request.data.data32[1] = SYSTEM_TRAY_REQUEST_DOCK;
 tray_request.data.data32[2] = w;  // window id to be docked 
 xcb_send_event(c, 0, selection_owner->owner, XCB_EVENT_MASK_NO_EVENT, (const char *)&tray_request);

要获取托盘的 window ID,还需要获取更多代码。我建议你看看我下面的代码,看看它是如何混合的。

干杯