diff options
author | Drew DeVault <sir@cmpwn.com> | 2016-07-17 11:26:38 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2016-07-17 11:26:38 -0400 |
commit | 3bb880bf207b40bc0cddcb9c449a738861e6791b (patch) | |
tree | 66ed13164fef27ebf3c8a6106590f1b7ec432483 /swaybar | |
parent | Allow users to customize the cursor on clients (diff) | |
download | sway-3bb880bf207b40bc0cddcb9c449a738861e6791b.tar.gz sway-3bb880bf207b40bc0cddcb9c449a738861e6791b.tar.zst sway-3bb880bf207b40bc0cddcb9c449a738861e6791b.zip |
Implement configurable wrapping on bar ws scroll
Diffstat (limited to 'swaybar')
-rw-r--r-- | swaybar/bar.c | 31 | ||||
-rw-r--r-- | swaybar/config.c | 1 | ||||
-rw-r--r-- | swaybar/ipc.c | 7 |
3 files changed, 38 insertions, 1 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c index 9009e1ff..41538052 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c | |||
@@ -96,6 +96,37 @@ static void mouse_button_notify(struct window *window, int x, int y, | |||
96 | static void mouse_scroll_notify(struct window *window, enum scroll_direction direction) { | 96 | static void mouse_scroll_notify(struct window *window, enum scroll_direction direction) { |
97 | sway_log(L_DEBUG, "Mouse wheel scrolled %s", direction == SCROLL_UP ? "up" : "down"); | 97 | sway_log(L_DEBUG, "Mouse wheel scrolled %s", direction == SCROLL_UP ? "up" : "down"); |
98 | 98 | ||
99 | if (!swaybar.config->wrap_scroll) { | ||
100 | // Find output this window lives on | ||
101 | int i; | ||
102 | struct output *output; | ||
103 | for (i = 0; i < swaybar.outputs->length; ++i) { | ||
104 | output = swaybar.outputs->items[i]; | ||
105 | if (output->window == window) { | ||
106 | break; | ||
107 | } | ||
108 | } | ||
109 | if (!sway_assert(i != swaybar.outputs->length, "Unknown window in scroll event")) { | ||
110 | return; | ||
111 | } | ||
112 | int focused = -1; | ||
113 | for (i = 0; i < output->workspaces->length; ++i) { | ||
114 | struct workspace *ws = output->workspaces->items[i]; | ||
115 | if (ws->focused) { | ||
116 | focused = i; | ||
117 | break; | ||
118 | } | ||
119 | } | ||
120 | if (!sway_assert(focused != -1, "Scroll wheel event received on inactive output")) { | ||
121 | return; | ||
122 | } | ||
123 | if ((focused == 0 && direction == SCROLL_UP) || | ||
124 | (focused == output->workspaces->length - 1 && direction == SCROLL_DOWN)) { | ||
125 | // Do not wrap | ||
126 | return; | ||
127 | } | ||
128 | } | ||
129 | |||
99 | const char *workspace_name = direction == SCROLL_UP ? "prev_on_output" : "next_on_output"; | 130 | const char *workspace_name = direction == SCROLL_UP ? "prev_on_output" : "next_on_output"; |
100 | ipc_send_workspace_command(workspace_name); | 131 | ipc_send_workspace_command(workspace_name); |
101 | } | 132 | } |
diff --git a/swaybar/config.c b/swaybar/config.c index 7bd22c91..f3a3e716 100644 --- a/swaybar/config.c +++ b/swaybar/config.c | |||
@@ -53,6 +53,7 @@ struct config *init_config() { | |||
53 | config->sep_symbol = NULL; | 53 | config->sep_symbol = NULL; |
54 | config->strip_workspace_numbers = false; | 54 | config->strip_workspace_numbers = false; |
55 | config->binding_mode_indicator = true; | 55 | config->binding_mode_indicator = true; |
56 | config->wrap_scroll = false; | ||
56 | config->workspace_buttons = true; | 57 | config->workspace_buttons = true; |
57 | config->all_outputs = false; | 58 | config->all_outputs = false; |
58 | config->outputs = create_list(); | 59 | config->outputs = create_list(); |
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 15f40508..ad4f9ef8 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -19,7 +19,7 @@ void ipc_send_workspace_command(const char *workspace_name) { | |||
19 | static void ipc_parse_config(struct config *config, const char *payload) { | 19 | static void ipc_parse_config(struct config *config, const char *payload) { |
20 | json_object *bar_config = json_tokener_parse(payload); | 20 | json_object *bar_config = json_tokener_parse(payload); |
21 | json_object *tray_output, *mode, *hidden_bar, *position, *status_command; | 21 | json_object *tray_output, *mode, *hidden_bar, *position, *status_command; |
22 | json_object *font, *bar_height, *workspace_buttons, *strip_workspace_numbers; | 22 | json_object *font, *bar_height, *wrap_scroll, *workspace_buttons, *strip_workspace_numbers; |
23 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol, *outputs; | 23 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol, *outputs; |
24 | json_object *markup; | 24 | json_object *markup; |
25 | json_object_object_get_ex(bar_config, "tray_output", &tray_output); | 25 | json_object_object_get_ex(bar_config, "tray_output", &tray_output); |
@@ -29,6 +29,7 @@ static void ipc_parse_config(struct config *config, const char *payload) { | |||
29 | json_object_object_get_ex(bar_config, "status_command", &status_command); | 29 | json_object_object_get_ex(bar_config, "status_command", &status_command); |
30 | json_object_object_get_ex(bar_config, "font", &font); | 30 | json_object_object_get_ex(bar_config, "font", &font); |
31 | json_object_object_get_ex(bar_config, "bar_height", &bar_height); | 31 | json_object_object_get_ex(bar_config, "bar_height", &bar_height); |
32 | json_object_object_get_ex(bar_config, "wrap_scroll", &wrap_scroll); | ||
32 | json_object_object_get_ex(bar_config, "workspace_buttons", &workspace_buttons); | 33 | json_object_object_get_ex(bar_config, "workspace_buttons", &workspace_buttons); |
33 | json_object_object_get_ex(bar_config, "strip_workspace_numbers", &strip_workspace_numbers); | 34 | json_object_object_get_ex(bar_config, "strip_workspace_numbers", &strip_workspace_numbers); |
34 | json_object_object_get_ex(bar_config, "binding_mode_indicator", &binding_mode_indicator); | 35 | json_object_object_get_ex(bar_config, "binding_mode_indicator", &binding_mode_indicator); |
@@ -65,6 +66,10 @@ static void ipc_parse_config(struct config *config, const char *payload) { | |||
65 | config->binding_mode_indicator = json_object_get_boolean(binding_mode_indicator); | 66 | config->binding_mode_indicator = json_object_get_boolean(binding_mode_indicator); |
66 | } | 67 | } |
67 | 68 | ||
69 | if (wrap_scroll) { | ||
70 | config->wrap_scroll = json_object_get_boolean(wrap_scroll); | ||
71 | } | ||
72 | |||
68 | if (workspace_buttons) { | 73 | if (workspace_buttons) { |
69 | config->workspace_buttons = json_object_get_boolean(workspace_buttons); | 74 | config->workspace_buttons = json_object_get_boolean(workspace_buttons); |
70 | } | 75 | } |