aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Alex Maese <memaese@hotmail.com>2019-04-12 11:30:36 -0500
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-04-17 23:29:43 -0400
commit35ddd9aab3c386345176d7ea1f5814f152ba16bd (patch)
tree41a5115333712b51f56147df4b8ceaab3c45cff2
parentAdd unbindswitch command (diff)
downloadsway-35ddd9aab3c386345176d7ea1f5814f152ba16bd.tar.gz
sway-35ddd9aab3c386345176d7ea1f5814f152ba16bd.tar.zst
sway-35ddd9aab3c386345176d7ea1f5814f152ba16bd.zip
Add unbindsym/unbindcode command for swaybar
-rw-r--r--include/sway/commands.h2
-rw-r--r--sway/commands/bar.c2
-rw-r--r--sway/commands/bar/bind.c106
-rw-r--r--sway/sway-bar.5.scd6
4 files changed, 87 insertions, 29 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 0347ad5e..cfe2aa07 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -217,6 +217,8 @@ sway_cmd bar_cmd_tray_bindcode;
217sway_cmd bar_cmd_tray_bindsym; 217sway_cmd bar_cmd_tray_bindsym;
218sway_cmd bar_cmd_tray_output; 218sway_cmd bar_cmd_tray_output;
219sway_cmd bar_cmd_tray_padding; 219sway_cmd bar_cmd_tray_padding;
220sway_cmd bar_cmd_unbindcode;
221sway_cmd bar_cmd_unbindsym;
220sway_cmd bar_cmd_wrap_scroll; 222sway_cmd bar_cmd_wrap_scroll;
221sway_cmd bar_cmd_workspace_buttons; 223sway_cmd bar_cmd_workspace_buttons;
222 224
diff --git a/sway/commands/bar.c b/sway/commands/bar.c
index 82441f9e..73be7040 100644
--- a/sway/commands/bar.c
+++ b/sway/commands/bar.c
@@ -32,6 +32,8 @@ static struct cmd_handler bar_handlers[] = {
32 { "tray_bindsym", bar_cmd_tray_bindsym }, 32 { "tray_bindsym", bar_cmd_tray_bindsym },
33 { "tray_output", bar_cmd_tray_output }, 33 { "tray_output", bar_cmd_tray_output },
34 { "tray_padding", bar_cmd_tray_padding }, 34 { "tray_padding", bar_cmd_tray_padding },
35 { "unbindcode", bar_cmd_unbindcode },
36 { "unbindsym", bar_cmd_unbindsym },
35 { "workspace_buttons", bar_cmd_workspace_buttons }, 37 { "workspace_buttons", bar_cmd_workspace_buttons },
36 { "wrap_scroll", bar_cmd_wrap_scroll }, 38 { "wrap_scroll", bar_cmd_wrap_scroll },
37}; 39};
diff --git a/sway/commands/bar/bind.c b/sway/commands/bar/bind.c
index 17030a05..f94b4811 100644
--- a/sway/commands/bar/bind.c
+++ b/sway/commands/bar/bind.c
@@ -9,10 +9,70 @@
9#include "log.h" 9#include "log.h"
10#include "stringop.h" 10#include "stringop.h"
11 11
12static struct cmd_results *bar_cmd_bind(int argc, char **argv, bool code) { 12static struct cmd_results *binding_add(struct bar_binding *binding,
13 const char *command = code ? "bar bindcode" : "bar bindsym"; 13 list_t *mode_bindings) {
14 const char *name = get_mouse_button_name(binding->button);
15 bool overwritten = false;
16 for (int i = 0; i < mode_bindings->length; i++) {
17 struct bar_binding *other = mode_bindings->items[i];
18 if (other->button == binding->button &&
19 other->release == binding->release) {
20 overwritten = true;
21 mode_bindings->items[i] = binding;
22 free_bar_binding(other);
23 sway_log(SWAY_DEBUG, "[bar %s] Updated binding for %u (%s)%s",
24 config->current_bar->id, binding->button, name,
25 binding->release ? " - release" : "");
26 break;
27 }
28 }
29 if (!overwritten) {
30 list_add(mode_bindings, binding);
31 sway_log(SWAY_DEBUG, "[bar %s] Added binding for %u (%s)%s",
32 config->current_bar->id, binding->button, name,
33 binding->release ? " - release" : "");
34 }
35 return cmd_results_new(CMD_SUCCESS, NULL);
36}
37
38static struct cmd_results *binding_remove(struct bar_binding *binding,
39 list_t *mode_bindings) {
40 const char *name = get_mouse_button_name(binding->button);
41 for (int i = 0; i < mode_bindings->length; i++) {
42 struct bar_binding *other = mode_bindings->items[i];
43 if (other->button == binding->button &&
44 other->release == binding->release) {
45 sway_log(SWAY_DEBUG, "[bar %s] Unbound binding for %u (%s)%s",
46 config->current_bar->id, binding->button, name,
47 binding->release ? " - release" : "");
48 free_bar_binding(other);
49 free_bar_binding(binding);
50 list_del(mode_bindings, i);
51 return cmd_results_new(CMD_SUCCESS, NULL);
52 }
53 }
54
55 struct cmd_results *error = cmd_results_new(CMD_FAILURE, "Could not "
56 "find binding for [bar %s]" " Button %u (%s)%s",
57 config->current_bar->id, binding->button, name,
58 binding->release ? " - release" : "");
59 free_bar_binding(binding);
60 return error;
61}
62
63static struct cmd_results *bar_cmd_bind(int argc, char **argv, bool code,
64 bool unbind) {
65 int minargs = 2;
66 const char *command;
67 if (unbind) {
68 minargs--;
69 command = code ? "bar unbindcode" : "bar unbindsym";
70 } else {
71 command = code ? "bar bindcode" : "bar bindsym";
72 }
73
14 struct cmd_results *error = NULL; 74 struct cmd_results *error = NULL;
15 if ((error = checkarg(argc, command, EXPECTED_AT_LEAST, 2))) { 75 if ((error = checkarg(argc, command, EXPECTED_AT_LEAST, minargs))) {
16 return error; 76 return error;
17 } 77 }
18 if (!config->current_bar) { 78 if (!config->current_bar) {
@@ -46,39 +106,27 @@ static struct cmd_results *bar_cmd_bind(int argc, char **argv, bool code) {
46 free_bar_binding(binding); 106 free_bar_binding(binding);
47 return cmd_results_new(CMD_INVALID, "Unknown button %s", argv[0]); 107 return cmd_results_new(CMD_INVALID, "Unknown button %s", argv[0]);
48 } 108 }
49 const char *name = get_mouse_button_name(binding->button);
50
51 binding->command = join_args(argv + 1, argc - 1);
52
53 list_t *bindings = config->current_bar->bindings; 109 list_t *bindings = config->current_bar->bindings;
54 bool overwritten = false; 110 if (unbind) {
55 for (int i = 0; i < bindings->length; i++) { 111 return binding_remove(binding, bindings);
56 struct bar_binding *other = bindings->items[i];
57 if (other->button == binding->button &&
58 other->release == binding->release) {
59 overwritten = true;
60 bindings->items[i] = binding;
61 free_bar_binding(other);
62 sway_log(SWAY_DEBUG, "[bar %s] Updated binding for %u (%s)%s",
63 config->current_bar->id, binding->button, name,
64 binding->release ? " - release" : "");
65 break;
66 }
67 }
68 if (!overwritten) {
69 list_add(bindings, binding);
70 sway_log(SWAY_DEBUG, "[bar %s] Added binding for %u (%s)%s",
71 config->current_bar->id, binding->button, name,
72 binding->release ? " - release" : "");
73 } 112 }
74 113
75 return cmd_results_new(CMD_SUCCESS, NULL); 114 binding->command = join_args(argv + 1, argc - 1);
115 return binding_add(binding, bindings);
76} 116}
77 117
78struct cmd_results *bar_cmd_bindcode(int argc, char **argv) { 118struct cmd_results *bar_cmd_bindcode(int argc, char **argv) {
79 return bar_cmd_bind(argc, argv, true); 119 return bar_cmd_bind(argc, argv, true, false);
80} 120}
81 121
82struct cmd_results *bar_cmd_bindsym(int argc, char **argv) { 122struct cmd_results *bar_cmd_bindsym(int argc, char **argv) {
83 return bar_cmd_bind(argc, argv, false); 123 return bar_cmd_bind(argc, argv, false, false);
124}
125
126struct cmd_results *bar_cmd_unbindcode(int argc, char **argv) {
127 return bar_cmd_bind(argc, argv, true, true);
128}
129
130struct cmd_results *bar_cmd_unbindsym(int argc, char **argv) {
131 return bar_cmd_bind(argc, argv, false, true);
84} 132}
diff --git a/sway/sway-bar.5.scd b/sway/sway-bar.5.scd
index 1f4ceaf2..a3df1160 100644
--- a/sway/sway-bar.5.scd
+++ b/sway/sway-bar.5.scd
@@ -112,6 +112,12 @@ Sway allows configuring swaybar in the sway configuration file.
112 the bar. This value will be multiplied by the output scale. The default is 112 the bar. This value will be multiplied by the output scale. The default is
113 _3_. 113 _3_.
114 114
115*unbindcode* [--release] <event-code>
116 Removes the binding with the given <event-code>.
117
118*unbindsym* [--release] button[1-9]|<event-name>
119 Removes the binding with the given <button> or <event-name>.
120
115## TRAY 121## TRAY
116 122
117Swaybar provides a system tray where third-party applications may place icons. 123Swaybar provides a system tray where third-party applications may place icons.