diff options
Diffstat (limited to 'swaybar')
-rw-r--r-- | swaybar/bar.c | 29 | ||||
-rw-r--r-- | swaybar/ipc.c | 4 |
2 files changed, 32 insertions, 1 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c index ed18b5e6..4f8063ac 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c | |||
@@ -58,8 +58,35 @@ struct output *new_output(const char *name) { | |||
58 | return output; | 58 | return output; |
59 | } | 59 | } |
60 | 60 | ||
61 | static void mouse_button_notify(struct window *window, wl_fixed_t x, wl_fixed_t y, uint32_t button) { | 61 | static void mouse_button_notify(struct window *window, int x, int y, uint32_t button) { |
62 | sway_log(L_DEBUG, "Mouse button %d clicked at %d %d\n", button, x, y); | 62 | sway_log(L_DEBUG, "Mouse button %d clicked at %d %d\n", button, x, y); |
63 | |||
64 | struct output *clicked_output = NULL; | ||
65 | for (int i = 0; i < swaybar.outputs->length; i++) { | ||
66 | struct output *output = swaybar.outputs->items[i]; | ||
67 | if (window == output->window) { | ||
68 | clicked_output = output; | ||
69 | break; | ||
70 | } | ||
71 | } | ||
72 | |||
73 | if (!sway_assert(clicked_output != NULL, "Got pointer event for non-existing output")) { | ||
74 | return; | ||
75 | } | ||
76 | |||
77 | double button_x = 0.5; | ||
78 | for (int i = 0; i < clicked_output->workspaces->length; i++) { | ||
79 | struct workspace *workspace = clicked_output->workspaces->items[i]; | ||
80 | int button_width, button_height; | ||
81 | |||
82 | workspace_button_size(window, workspace->name, &button_width, &button_height); | ||
83 | |||
84 | button_x += button_width; | ||
85 | if (x <= button_x) { | ||
86 | ipc_send_workspace_command(workspace->name); | ||
87 | break; | ||
88 | } | ||
89 | } | ||
63 | } | 90 | } |
64 | 91 | ||
65 | void bar_setup(struct bar *bar, const char *socket_path, const char *bar_id) { | 92 | void bar_setup(struct bar *bar, const char *socket_path, const char *bar_id) { |
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index dacee4c2..6697742e 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -7,6 +7,10 @@ | |||
7 | #include "bar/config.h" | 7 | #include "bar/config.h" |
8 | #include "bar/ipc.h" | 8 | #include "bar/ipc.h" |
9 | 9 | ||
10 | void ipc_send_workspace_command(const char *workspace_name) { | ||
11 | sway_log(L_DEBUG, "Clicked on window %s", workspace_name); | ||
12 | } | ||
13 | |||
10 | static void ipc_parse_config(struct config *config, const char *payload) { | 14 | static void ipc_parse_config(struct config *config, const char *payload) { |
11 | json_object *bar_config = json_tokener_parse(payload); | 15 | json_object *bar_config = json_tokener_parse(payload); |
12 | json_object *tray_output, *mode, *hidden_bar, *position, *status_command; | 16 | json_object *tray_output, *mode, *hidden_bar, *position, *status_command; |