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, | |||
160 | 160 | ||
161 | static enum hotspot_event_handling block_hotspot_callback( | 161 | static enum hotspot_event_handling block_hotspot_callback( |
162 | struct swaybar_output *output, struct swaybar_hotspot *hotspot, | 162 | struct swaybar_output *output, struct swaybar_hotspot *hotspot, |
163 | double x, double y, uint32_t button, void *data) { | 163 | double x, double y, uint32_t button, bool released, void *data) { |
164 | struct i3bar_block *block = data; | 164 | struct i3bar_block *block = data; |
165 | struct status_line *status = output->bar->status; | 165 | struct status_line *status = output->bar->status; |
166 | return i3bar_block_send_click(status, block, x, y, | 166 | return i3bar_block_send_click(status, block, x, y, |
@@ -168,7 +168,7 @@ static enum hotspot_event_handling block_hotspot_callback( | |||
168 | y - (double)hotspot->y, | 168 | y - (double)hotspot->y, |
169 | (double)hotspot->width, | 169 | (double)hotspot->width, |
170 | (double)hotspot->height, | 170 | (double)hotspot->height, |
171 | output->scale, button); | 171 | output->scale, button, released); |
172 | } | 172 | } |
173 | 173 | ||
174 | static void i3bar_block_unref_callback(void *data) { | 174 | static void i3bar_block_unref_callback(void *data) { |
@@ -599,10 +599,15 @@ static uint32_t render_binding_mode_indicator(struct render_context *ctx, | |||
599 | 599 | ||
600 | static enum hotspot_event_handling workspace_hotspot_callback( | 600 | static enum hotspot_event_handling workspace_hotspot_callback( |
601 | struct swaybar_output *output, struct swaybar_hotspot *hotspot, | 601 | struct swaybar_output *output, struct swaybar_hotspot *hotspot, |
602 | double x, double y, uint32_t button, void *data) { | 602 | double x, double y, uint32_t button, bool released, void *data) { |
603 | if (button != BTN_LEFT) { | 603 | if (button != BTN_LEFT) { |
604 | return HOTSPOT_PROCESS; | 604 | return HOTSPOT_PROCESS; |
605 | } | 605 | } |
606 | if (released) { | ||
607 | // Since we handle the pressed event, also handle the released event | ||
608 | // to block it from falling through to a binding in the bar | ||
609 | return HOTSPOT_IGNORE; | ||
610 | } | ||
606 | ipc_send_workspace_command(output->bar, (const char *)data); | 611 | ipc_send_workspace_command(output->bar, (const char *)data); |
607 | return HOTSPOT_IGNORE; | 612 | return HOTSPOT_IGNORE; |
608 | } | 613 | } |