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 帐户:
如果有人有线索?提前致谢
我明白了,
为了将 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,还需要获取更多代码。我建议你看看我下面的代码,看看它是如何混合的。
干杯
我正在尝试开发一个小型 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 帐户:
如果有人有线索?提前致谢
我明白了,
为了将 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,还需要获取更多代码。我建议你看看我下面的代码,看看它是如何混合的。
干杯