aboutsummaryrefslogtreecommitdiff
path: root/swaybar/i3bar.c
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2021-09-18 22:21:22 +0200
committerFurkan Sahin <furkan-dev@proton.me>2021-09-18 22:21:22 +0200
commit8d8b20544c2ad70a33b1ac09852096e11b870078 (patch)
tree1b26242344968929fc2698b49b12478eb9fe4fae /swaybar/i3bar.c
parentb847d9e6df7efcef6a87f5ccccb34c322214c100 (diff)
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) {
enum hotspot_event_handling i3bar_block_send_click(struct status_line *status,
struct i3bar_block *block, double x, double y, double rx, double ry,
- double w, double h, int scale, uint32_t button) {
+ double w, double h, int scale, uint32_t button, bool released) {
sway_log(SWAY_DEBUG, "block %s clicked", block->name);
if (!block->name || !status->click_events) {
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;
+ }
struct json_object *event_json = json_object_new_object();
json_object_object_add(event_json, "name",