feat(tray): 成为 selection owner 后广播 MANAGER 事件通知托盘客户端
This commit is contained in:
@@ -46,6 +46,8 @@
|
|||||||
X(_NET_WM_WINDOW_TYPE_NOTIFICATION)
|
X(_NET_WM_WINDOW_TYPE_NOTIFICATION)
|
||||||
|
|
||||||
#define ATOM_LIST(X) \
|
#define ATOM_LIST(X) \
|
||||||
|
X(MANAGER) \
|
||||||
|
\
|
||||||
X(COMPOUND_TEXT) \
|
X(COMPOUND_TEXT) \
|
||||||
X(UTF8_STRING) \
|
X(UTF8_STRING) \
|
||||||
\
|
\
|
||||||
|
|||||||
@@ -191,6 +191,25 @@ static bool tray_take_selection_owner(tray_host_t *tray, backend_t *backend) {
|
|||||||
return success;
|
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(
|
void tray_init(
|
||||||
backend_t *backend,
|
backend_t *backend,
|
||||||
xcb_window_t host_window,
|
xcb_window_t host_window,
|
||||||
@@ -220,4 +239,7 @@ void tray_init(
|
|||||||
|
|
||||||
tray->enabled = true;
|
tray->enabled = true;
|
||||||
tray->initialized = true;
|
tray->initialized = true;
|
||||||
|
|
||||||
|
tray_broadcast_manager(tray, backend);
|
||||||
|
xcb_flush(backend->conn);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user