我正在尝试开发一个小型XCB软件,该软件将在托盘应用程序(例如stalonetray(中进行。
到目前为止,我设法使用本教程显示了一个简单的窗口,但是我坚持不懈地试图将窗口放入托盘中。
我只是通过玩xcb_change_property
或通过在软件中添加EWMH支持来使它工作。
使用Xlib我可能会以类似的方式使用XWMHINT:
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
的出路由于代码太长而无法粘贴,因此我将链接转发到我的git帐户:
链接到来源
如果有人有线索?预先感谢
我得到了它,
为了将窗口注册到系统托盘中,需要向托盘发送消息。我最终得到了以下代码:
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);
为了检索托盘的窗口ID,还有更多的代码。我建议您在下面查看我的代码,以查看它的混合方式。
欢呼