From 725ee3ce6269947577deb7a67a0e1d9762c21600 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Fri, 30 Mar 2018 21:05:32 +0200 Subject: [PATCH] move i3 sync code into sync_respond (for following commits) --- Makefile.am | 1 + include/all.h | 1 + include/sync.h | 14 ++++++++++++++ src/handlers.c | 16 +--------------- src/sync.c | 28 ++++++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 include/sync.h create mode 100644 src/sync.c diff --git a/Makefile.am b/Makefile.am index 184b0734..557c65a5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -562,6 +562,7 @@ i3_SOURCES = \ src/sd-daemon.c \ src/sighandler.c \ src/startup.c \ + src/sync.c \ src/tree.c \ src/util.c \ src/version.c \ diff --git a/include/all.h b/include/all.h index ecc875d0..e93b066b 100644 --- a/include/all.h +++ b/include/all.h @@ -82,4 +82,5 @@ #include "fake_outputs.h" #include "display_version.h" #include "restore_layout.h" +#include "sync.h" #include "main.h" diff --git a/include/sync.h b/include/sync.h new file mode 100644 index 00000000..e726f99e --- /dev/null +++ b/include/sync.h @@ -0,0 +1,14 @@ +/* + * vim:ts=4:sw=4:expandtab + * + * i3 - an improved dynamic tiling window manager + * © 2009 Michael Stapelberg and contributors (see also: LICENSE) + * + * sync.c: i3 sync protocol: https://i3wm.org/docs/testsuite.html#i3_sync + * + */ +#pragma once + +#include + +void sync_respond(xcb_window_t window, uint32_t rnd); diff --git a/src/handlers.c b/src/handlers.c index 50fd8566..d5023b9d 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -800,21 +800,7 @@ static void handle_client_message(xcb_client_message_event_t *event) { } else if (event->type == A_I3_SYNC) { xcb_window_t window = event->data.data32[0]; uint32_t rnd = event->data.data32[1]; - DLOG("[i3 sync protocol] Sending random value %d back to X11 window 0x%08x\n", rnd, window); - - void *reply = scalloc(32, 1); - xcb_client_message_event_t *ev = reply; - - ev->response_type = XCB_CLIENT_MESSAGE; - ev->window = window; - ev->type = A_I3_SYNC; - ev->format = 32; - ev->data.data32[0] = window; - ev->data.data32[1] = rnd; - - xcb_send_event(conn, false, window, XCB_EVENT_MASK_NO_EVENT, (char *)ev); - xcb_flush(conn); - free(reply); + sync_respond(window, rnd); } else if (event->type == A__NET_REQUEST_FRAME_EXTENTS) { /* * A client can request an estimate for the frame size which the window diff --git a/src/sync.c b/src/sync.c new file mode 100644 index 00000000..dafbc355 --- /dev/null +++ b/src/sync.c @@ -0,0 +1,28 @@ +/* + * vim:ts=4:sw=4:expandtab + * + * i3 - an improved dynamic tiling window manager + * © 2009 Michael Stapelberg and contributors (see also: LICENSE) + * + * sync.c: i3 sync protocol: https://i3wm.org/docs/testsuite.html#i3_sync + * + */ +#include "all.h" + +void sync_respond(xcb_window_t window, uint32_t rnd) { + DLOG("[i3 sync protocol] Sending random value %d back to X11 window 0x%08x\n", rnd, window); + + void *reply = scalloc(32, 1); + xcb_client_message_event_t *ev = reply; + + ev->response_type = XCB_CLIENT_MESSAGE; + ev->window = window; + ev->type = A_I3_SYNC; + ev->format = 32; + ev->data.data32[0] = window; + ev->data.data32[1] = rnd; + + xcb_send_event(conn, false, window, XCB_EVENT_MASK_NO_EVENT, (char *)ev); + xcb_flush(conn); + free(reply); +} -- 2.39.2