diff options
Diffstat (limited to 'swaybar/render.c')
-rw-r--r-- | swaybar/render.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/swaybar/render.c b/swaybar/render.c index a878805e..95f6e5be 100644 --- a/swaybar/render.c +++ b/swaybar/render.c @@ -160,7 +160,7 @@ static void render_sharp_line(cairo_t *cairo, uint32_t color, static enum hotspot_event_handling block_hotspot_callback( struct swaybar_output *output, struct swaybar_hotspot *hotspot, - double x, double y, uint32_t button, void *data) { + double x, double y, uint32_t button, bool released, void *data) { struct i3bar_block *block = data; struct status_line *status = output->bar->status; return i3bar_block_send_click(status, block, x, y, @@ -168,7 +168,7 @@ static enum hotspot_event_handling block_hotspot_callback( y - (double)hotspot->y, (double)hotspot->width, (double)hotspot->height, - output->scale, button); + output->scale, button, released); } static void i3bar_block_unref_callback(void *data) { @@ -599,10 +599,15 @@ 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, void *data) { + 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; } |