aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/i3bar.c
diff options
context:
space:
mode:
authorLibravatar Joan Bruguera <joanbrugueram@gmail.com>2021-09-18 22:21:22 +0200
committerLibravatar Simon Ser <contact@emersion.fr>2022-11-26 10:17:53 +0100
commit94b69acf0d7b26ee5af2172300cb18473508da76 (patch)
tree1b26242344968929fc2698b49b12478eb9fe4fae /swaybar/i3bar.c
parentswaybar: Prioritize hotspot events to bar bindings (diff)
downloadsway-94b69acf0d7b26ee5af2172300cb18473508da76.tar.gz
sway-94b69acf0d7b26ee5af2172300cb18473508da76.tar.zst
sway-94b69acf0d7b26ee5af2172300cb18473508da76.zip
swaybar: Make hotspots block bar release bindings
The previous commit prioritized hotspots before bar bindings for press events, which matches i3's behaviour. However, since hotspots don't need to do any processing on release events, those were not handled, and simply fell through to `bindsym --release` bar bindings (if any). This is counter-intuitive, and doesn't match i3's behaviour. Instead in case a hotspot handles the press event, it should also handle the release event, doing nothing, but blocking the event from triggering a --release bar binding. E.g., in Sway, without this commit, this config. shows a text on tray clicks: bar { # ... bindsym --release button1 exec swaynag -m I_got_the_release_event. } But the same configuration in i3 (with i3-nagbar) doesn't show the text. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
Diffstat (limited to 'swaybar/i3bar.c')
-rw-r--r--swaybar/i3bar.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/swaybar/i3bar.c b/swaybar/i3bar.c
index 6d00befb..ccd5a076 100644
--- a/swaybar/i3bar.c
+++ b/swaybar/i3bar.c
@@ -269,11 +269,16 @@ bool i3bar_handle_readable(struct status_line *status) {
269 269
270enum hotspot_event_handling i3bar_block_send_click(struct status_line *status, 270enum hotspot_event_handling i3bar_block_send_click(struct status_line *status,
271 struct i3bar_block *block, double x, double y, double rx, double ry, 271 struct i3bar_block *block, double x, double y, double rx, double ry,
272 double w, double h, int scale, uint32_t button) { 272 double w, double h, int scale, uint32_t button, bool released) {
273 sway_log(SWAY_DEBUG, "block %s clicked", block->name); 273 sway_log(SWAY_DEBUG, "block %s clicked", block->name);
274 if (!block->name || !status->click_events) { 274 if (!block->name || !status->click_events) {
275 return HOTSPOT_PROCESS; 275 return HOTSPOT_PROCESS;
276 } 276 }
277 if (released) {
278 // Since we handle the pressed event, also handle the released event
279 // to block it from falling through to a binding in the bar
280 return HOTSPOT_IGNORE;
281 }
277 282
278 struct json_object *event_json = json_object_new_object(); 283 struct json_object *event_json = json_object_new_object();
279 json_object_object_add(event_json, "name", 284 json_object_object_add(event_json, "name",