swaybar: refactor workspace button handling logic

Move the workspace pointer/touch button handling logic from render.c
to input.c, and reorganize it so handling more buttons is more natural.
No functional change intended.

Signed-off-by: Joan Bruguera Micó <joanbrugueram@gmail.com>
This commit is contained in:
Joan Bruguera Micó 2024-08-15 11:17:16 +00:00
parent c30c451907
commit 39dc37c243
3 changed files with 20 additions and 10 deletions

View file

@ -78,6 +78,9 @@ uint32_t event_to_x11_button(uint32_t event);
void free_hotspots(struct wl_list *list);
bool handle_workspace_button(struct swaybar_output *output,
uint32_t button, bool released, const char *ws);
void swaybar_seat_free(struct swaybar_seat *seat);
#endif

View file

@ -236,6 +236,21 @@ static void workspace_next(struct swaybar *bar, struct swaybar_output *output,
}
}
bool handle_workspace_button(struct swaybar_output *output,
uint32_t button, bool released, const char *ws) {
if (button == BTN_LEFT) {
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 true;
}
ipc_send_workspace_command(output->bar, ws);
return true;
}
return false;
}
static void process_discrete_scroll(struct swaybar_seat *seat,
struct swaybar_output *output, struct swaybar_pointer *pointer,
uint32_t axis, wl_fixed_t value) {

View file

@ -599,16 +599,8 @@ static uint32_t render_binding_mode_indicator(struct render_context *ctx,
static enum hotspot_event_handling workspace_hotspot_callback(
struct swaybar_output *output, struct swaybar_hotspot *hotspot,
double x, double y, uint32_t button, bool released, void *data) {
if (button != BTN_LEFT) {
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;
}
ipc_send_workspace_command(output->bar, (const char *)data);
return HOTSPOT_IGNORE;
return handle_workspace_button(output, button, released, (const char *)data)
? HOTSPOT_IGNORE : HOTSPOT_PROCESS;
}
static uint32_t render_workspace_button(struct render_context *ctx,