i3bar: forward the sync request via IPC, not X11
i3bar’s X11 output is not what our testcases are testing — the state manipulations which i3bar triggers via IPC messages to i3 are what we are interested in.
This commit is contained in:
parent
eca8fae2de
commit
145ac532aa
|
@ -114,13 +114,18 @@ void got_bar_config(char *reply) {
|
||||||
|
|
||||||
/* Data structure to easily call the reply handlers later */
|
/* Data structure to easily call the reply handlers later */
|
||||||
handler_t reply_handlers[] = {
|
handler_t reply_handlers[] = {
|
||||||
&got_command_reply,
|
&got_command_reply, /* I3_IPC_REPLY_TYPE_COMMAND */
|
||||||
&got_workspace_reply,
|
&got_workspace_reply, /* I3_IPC_REPLY_TYPE_WORKSPACES */
|
||||||
&got_subscribe_reply,
|
&got_subscribe_reply, /* I3_IPC_REPLY_TYPE_SUBSCRIBE */
|
||||||
&got_output_reply,
|
&got_output_reply, /* I3_IPC_REPLY_TYPE_OUTPUTS */
|
||||||
NULL,
|
NULL, /* I3_IPC_REPLY_TYPE_TREE */
|
||||||
NULL,
|
NULL, /* I3_IPC_REPLY_TYPE_MARKS */
|
||||||
&got_bar_config,
|
&got_bar_config, /* I3_IPC_REPLY_TYPE_BAR_CONFIG */
|
||||||
|
NULL, /* I3_IPC_REPLY_TYPE_VERSION */
|
||||||
|
NULL, /* I3_IPC_REPLY_TYPE_BINDING_MODES */
|
||||||
|
NULL, /* I3_IPC_REPLY_TYPE_CONFIG */
|
||||||
|
NULL, /* I3_IPC_REPLY_TYPE_TICK */
|
||||||
|
NULL, /* I3_IPC_REPLY_TYPE_SYNC */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -694,21 +694,12 @@ static void handle_client_message(xcb_client_message_event_t *event) {
|
||||||
if (event->type == atoms[I3_SYNC]) {
|
if (event->type == atoms[I3_SYNC]) {
|
||||||
xcb_window_t window = event->data.data32[0];
|
xcb_window_t window = event->data.data32[0];
|
||||||
uint32_t rnd = event->data.data32[1];
|
uint32_t rnd = event->data.data32[1];
|
||||||
DLOG("[i3 sync protocol] Forwarding random value %d, X11 window 0x%08x to i3\n", rnd, window);
|
/* Forward the request to i3 via the IPC interface so that all pending
|
||||||
|
* IPC messages are guaranteed to be handled. */
|
||||||
void *reply = scalloc(32, 1);
|
char *payload = NULL;
|
||||||
xcb_client_message_event_t *ev = reply;
|
sasprintf(&payload, "{\"rnd\":%d, \"window\":%d}", rnd, window);
|
||||||
|
i3_send_msg(I3_IPC_MESSAGE_TYPE_SYNC, payload);
|
||||||
ev->response_type = XCB_CLIENT_MESSAGE;
|
free(payload);
|
||||||
ev->window = window;
|
|
||||||
ev->type = atoms[I3_SYNC];
|
|
||||||
ev->format = 32;
|
|
||||||
ev->data.data32[0] = window;
|
|
||||||
ev->data.data32[1] = rnd;
|
|
||||||
|
|
||||||
xcb_send_event(conn, false, xcb_root, XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (char *)ev);
|
|
||||||
xcb_flush(conn);
|
|
||||||
free(reply);
|
|
||||||
} else if (event->type == atoms[_NET_SYSTEM_TRAY_OPCODE] &&
|
} else if (event->type == atoms[_NET_SYSTEM_TRAY_OPCODE] &&
|
||||||
event->format == 32) {
|
event->format == 32) {
|
||||||
DLOG("_NET_SYSTEM_TRAY_OPCODE received\n");
|
DLOG("_NET_SYSTEM_TRAY_OPCODE received\n");
|
||||||
|
|
Loading…
Reference in New Issue