aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Joan Bruguera <joanbrugueram@gmail.com>2021-09-04 06:44:56 +0200
committerLibravatar Simon Ser <contact@emersion.fr>2022-11-26 10:29:59 +0100
commitb92af7e3cadab5723b50687a56d6da1f9b8605b4 (patch)
tree80671f51c3e727bca0c12a3d2cbaf828c1fa9f30
parentlauncher: export X startup ids and use them for workspace matching (diff)
downloadsway-b92af7e3cadab5723b50687a56d6da1f9b8605b4.tar.gz
sway-b92af7e3cadab5723b50687a56d6da1f9b8605b4.tar.zst
sway-b92af7e3cadab5723b50687a56d6da1f9b8605b4.zip
swaybar: Prioritize hotspot events to bar bindings
This is consistent with i3bar's behaviour, and for example, allows binding a command to button1, while still being able to click on tray icons or other zones on the bar's status line which may have their own bindings. E.g., in Sway, without this commit, this config. makes tray icons unclickable: bar { # ... bindsym button1 exec swaynag -m You_clicked_the_tray._Want_some_help? } But the same configuration in i3 (with i3-nagbar) keeps tray items clickable. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com> (cherry picked from commit 53f9dbd424dc173a85c9f4cd30802259d38b1ef4)
-rw-r--r--swaybar/input.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/swaybar/input.c b/swaybar/input.c
index c8c8f0d4..f12eed79 100644
--- a/swaybar/input.c
+++ b/swaybar/input.c
@@ -166,14 +166,13 @@ static void wl_pointer_button(void *data, struct wl_pointer *wl_pointer,
166 return; 166 return;
167 } 167 }
168 168
169 if (check_bindings(seat->bar, button, state)) { 169 if (state == WL_POINTER_BUTTON_STATE_PRESSED) {
170 return; 170 if (process_hotspots(output, pointer->x, pointer->y, button)) {
171 return;
172 }
171 } 173 }
172 174
173 if (state != WL_POINTER_BUTTON_STATE_PRESSED) { 175 check_bindings(seat->bar, button, state);
174 return;
175 }
176 process_hotspots(output, pointer->x, pointer->y, button);
177} 176}
178 177
179static void workspace_next(struct swaybar *bar, struct swaybar_output *output, 178static void workspace_next(struct swaybar *bar, struct swaybar_output *output,
@@ -222,15 +221,14 @@ static void workspace_next(struct swaybar *bar, struct swaybar_output *output,
222static void process_discrete_scroll(struct swaybar_seat *seat, 221static void process_discrete_scroll(struct swaybar_seat *seat,
223 struct swaybar_output *output, struct swaybar_pointer *pointer, 222 struct swaybar_output *output, struct swaybar_pointer *pointer,
224 uint32_t axis, wl_fixed_t value) { 223 uint32_t axis, wl_fixed_t value) {
225 // If there is a button press binding, execute it, skip default behavior,
226 // and check button release bindings
227 uint32_t button = wl_axis_to_button(axis, value); 224 uint32_t button = wl_axis_to_button(axis, value);
228 if (check_bindings(seat->bar, button, WL_POINTER_BUTTON_STATE_PRESSED)) { 225 if (process_hotspots(output, pointer->x, pointer->y, button)) {
229 check_bindings(seat->bar, button, WL_POINTER_BUTTON_STATE_RELEASED);
230 return; 226 return;
231 } 227 }
232 228
233 if (process_hotspots(output, pointer->x, pointer->y, button)) { 229 // If there is a button press binding, execute it, and check button release bindings
230 if (check_bindings(seat->bar, button, WL_POINTER_BUTTON_STATE_PRESSED)) {
231 check_bindings(seat->bar, button, WL_POINTER_BUTTON_STATE_RELEASED);
234 return; 232 return;
235 } 233 }
236 234