summaryrefslogtreecommitdiffstats
path: root/swaybar
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2016-07-17 11:26:38 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2016-07-17 11:26:38 -0400
commit3bb880bf207b40bc0cddcb9c449a738861e6791b (patch)
tree66ed13164fef27ebf3c8a6106590f1b7ec432483 /swaybar
parentAllow users to customize the cursor on clients (diff)
downloadsway-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.c31
-rw-r--r--swaybar/config.c1
-rw-r--r--swaybar/ipc.c7
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,
96static void mouse_scroll_notify(struct window *window, enum scroll_direction direction) { 96static 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) {
19static void ipc_parse_config(struct config *config, const char *payload) { 19static 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 }