feat(tray): 成为 selection owner 后广播 MANAGER 事件通知托盘客户端

This commit is contained in:
2026-07-24 20:59:51 +08:00
parent 47bd59b806
commit e7a0945a93
2 changed files with 24 additions and 0 deletions

View File

@@ -46,6 +46,8 @@
X(_NET_WM_WINDOW_TYPE_NOTIFICATION)
#define ATOM_LIST(X) \
X(MANAGER) \
\
X(COMPOUND_TEXT) \
X(UTF8_STRING) \
\

View File

@@ -191,6 +191,25 @@ static bool tray_take_selection_owner(tray_host_t *tray, backend_t *backend) {
return success;
}
static void tray_broadcast_manager(tray_host_t *tray, backend_t *backend) {
auto conn = backend->conn;
auto root = backend->screen->root;
xcb_client_message_event_t event = {
.response_type = XCB_CLIENT_MESSAGE,
.window = root,
.format = 32,
.type = backend->atoms.MANAGER,
.data.data32 = {
[0] = XCB_CURRENT_TIME,
[1] = tray->selection_atom,
[2] = tray->container,
},
};
uint32_t event_mask = XCB_EVENT_MASK_STRUCTURE_NOTIFY;
xcb_send_event(conn, false, root, event_mask, (char *)&event);
}
void tray_init(
backend_t *backend,
xcb_window_t host_window,
@@ -220,4 +239,7 @@ void tray_init(
tray->enabled = true;
tray->initialized = true;
tray_broadcast_manager(tray, backend);
xcb_flush(backend->conn);
}