aboutsummaryrefslogtreecommitdiff
path: root/swaybar
diff options
context:
space:
mode:
authorminus <minus@mnus.de>2018-07-19 21:15:01 +0200
committerminus <minus@mnus.de>2018-07-19 21:15:01 +0200
commitbfcfabee2b7e6bd820929a3cb86c4981a6385ac7 (patch)
treee529edd478b8ebfbf19daa7072535d0e181592d2 /swaybar
parentda9c86c608b33d78e25ced5858be579f502efd63 (diff)
downloadsway-bfcfabee2b7e6bd820929a3cb86c4981a6385ac7.tar.xz
swaybar: Fix scroll handling on workspace buttons
As well as ignoring scroll events on status elements when click_events is enabled. Previously, using the scroll wheel on a workspace button would switch to that workspace instead of scrolling through them. Clicks and scrolling on status elements would always be processed by swaybar, too. So in case you were using scrolling as volume control on a status item, swaybar would additionally scroll through your workspaces.
Diffstat (limited to 'swaybar')
-rw-r--r--swaybar/bar.c14
-rw-r--r--swaybar/i3bar.c5
-rw-r--r--swaybar/render.c10
3 files changed, 19 insertions, 10 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c
index 94bc48bc..62a7727e 100644
--- a/swaybar/bar.c
+++ b/swaybar/bar.c
@@ -146,8 +146,10 @@ static void wl_pointer_button(void *data, struct wl_pointer *wl_pointer,
&& y >= hotspot->y
&& x < hotspot->x + hotspot->width
&& y < hotspot->y + hotspot->height) {
- hotspot->callback(output, pointer->x, pointer->y,
- wl_button_to_x11_button(button), hotspot->data);
+ if (HOTSPOT_IGNORE == hotspot->callback(output, pointer->x, pointer->y,
+ wl_button_to_x11_button(button), hotspot->data)) {
+ return;
+ }
}
}
}
@@ -169,9 +171,11 @@ static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer,
&& y >= hotspot->y
&& x < hotspot->x + hotspot->width
&& y < hotspot->y + hotspot->height) {
- hotspot->callback(output, pointer->x, pointer->y,
- wl_axis_to_x11_button(axis, value), hotspot->data);
- return;
+ if (HOTSPOT_IGNORE == hotspot->callback(
+ output, pointer->x, pointer->y,
+ wl_axis_to_x11_button(axis, value), hotspot->data)) {
+ return;
+ }
}
}
diff --git a/swaybar/i3bar.c b/swaybar/i3bar.c
index 78b183ad..ae37eeb9 100644
--- a/swaybar/i3bar.c
+++ b/swaybar/i3bar.c
@@ -192,11 +192,11 @@ bool i3bar_handle_readable(struct status_line *status) {
return redraw;
}
-void i3bar_block_send_click(struct status_line *status,
+enum hotspot_event_handling i3bar_block_send_click(struct status_line *status,
struct i3bar_block *block, int x, int y, enum x11_button button) {
wlr_log(WLR_DEBUG, "block %s clicked", block->name ? block->name : "(nil)");
if (!block->name || !status->i3bar_state.click_events) {
- return;
+ return HOTSPOT_PROCESS;
}
struct json_object *event_json = json_object_new_object();
@@ -215,6 +215,7 @@ void i3bar_block_send_click(struct status_line *status,
status_error(status, "[failed to write click event]");
}
json_object_put(event_json);
+ return HOTSPOT_IGNORE;
}
enum x11_button wl_button_to_x11_button(uint32_t button) {
diff --git a/swaybar/render.c b/swaybar/render.c
index d210e25a..6f370077 100644
--- a/swaybar/render.c
+++ b/swaybar/render.c
@@ -108,11 +108,11 @@ static void render_sharp_line(cairo_t *cairo, uint32_t color,
}
}
-static void block_hotspot_callback(struct swaybar_output *output,
+static enum hotspot_event_handling block_hotspot_callback(struct swaybar_output *output,
int x, int y, enum x11_button button, void *data) {
struct i3bar_block *block = data;
struct status_line *status = output->bar->status;
- i3bar_block_send_click(status, block, x, y, button);
+ return i3bar_block_send_click(status, block, x, y, button);
}
static uint32_t render_status_block(cairo_t *cairo,
@@ -348,9 +348,13 @@ static const char *strip_workspace_number(const char *ws_name) {
return ws_name;
}
-static void workspace_hotspot_callback(struct swaybar_output *output,
+static enum hotspot_event_handling workspace_hotspot_callback(struct swaybar_output *output,
int x, int y, enum x11_button button, void *data) {
+ if (button != LEFT) {
+ return HOTSPOT_PROCESS;
+ }
ipc_send_workspace_command(output->bar, (const char *)data);
+ return HOTSPOT_IGNORE;
}
static uint32_t render_workspace_button(cairo_t *cairo,