From 39dc37c24392e224e78b9907e9fc9f582f422e3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?= Date: Thu, 15 Aug 2024 11:17:16 +0000 Subject: [PATCH] swaybar: refactor workspace button handling logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the workspace pointer/touch button handling logic from render.c to input.c, and reorganize it so handling more buttons is more natural. No functional change intended. Signed-off-by: Joan Bruguera Micó --- include/swaybar/input.h | 3 +++ swaybar/input.c | 15 +++++++++++++++ swaybar/render.c | 12 ++---------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/include/swaybar/input.h b/include/swaybar/input.h index 8ea88a69a..35360c963 100644 --- a/include/swaybar/input.h +++ b/include/swaybar/input.h @@ -78,6 +78,9 @@ uint32_t event_to_x11_button(uint32_t event); void free_hotspots(struct wl_list *list); +bool handle_workspace_button(struct swaybar_output *output, + uint32_t button, bool released, const char *ws); + void swaybar_seat_free(struct swaybar_seat *seat); #endif diff --git a/swaybar/input.c b/swaybar/input.c index ada4bc862..d58628324 100644 --- a/swaybar/input.c +++ b/swaybar/input.c @@ -236,6 +236,21 @@ static void workspace_next(struct swaybar *bar, struct swaybar_output *output, } } +bool handle_workspace_button(struct swaybar_output *output, + uint32_t button, bool released, const char *ws) { + if (button == BTN_LEFT) { + if (released) { + // Since we handle the pressed event, also handle the released event + // to block it from falling through to a binding in the bar + return true; + } + ipc_send_workspace_command(output->bar, ws); + return true; + } + + return false; +} + static void process_discrete_scroll(struct swaybar_seat *seat, struct swaybar_output *output, struct swaybar_pointer *pointer, uint32_t axis, wl_fixed_t value) { diff --git a/swaybar/render.c b/swaybar/render.c index 879a4e42a..d0302eb64 100644 --- a/swaybar/render.c +++ b/swaybar/render.c @@ -599,16 +599,8 @@ static uint32_t render_binding_mode_indicator(struct render_context *ctx, static enum hotspot_event_handling workspace_hotspot_callback( struct swaybar_output *output, struct swaybar_hotspot *hotspot, double x, double y, uint32_t button, bool released, void *data) { - if (button != BTN_LEFT) { - return HOTSPOT_PROCESS; - } - if (released) { - // Since we handle the pressed event, also handle the released event - // to block it from falling through to a binding in the bar - return HOTSPOT_IGNORE; - } - ipc_send_workspace_command(output->bar, (const char *)data); - return HOTSPOT_IGNORE; + return handle_workspace_button(output, button, released, (const char *)data) + ? HOTSPOT_IGNORE : HOTSPOT_PROCESS; } static uint32_t render_workspace_button(struct render_context *ctx,