aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-11-28 11:23:48 -0500
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-11-28 11:24:14 -0500
commit1bd8463481c5272094a084a76ab558a45e18bd15 (patch)
treedcfac10d1996db167aba5e79059c41d1fff3f14f /sway/commands
parentMerge pull request #3212 from martinetd/move_floating (diff)
downloadsway-1bd8463481c5272094a084a76ab558a45e18bd15.tar.gz
sway-1bd8463481c5272094a084a76ab558a45e18bd15.tar.zst
sway-1bd8463481c5272094a084a76ab558a45e18bd15.zip
Implement bar gaps
Adds the bar subcommand `gaps <amount>|<horizontal> <vertical>|<top> <right> <bottom> <left>` to set gaps for swaybar. Due to restrictions on margins for a layer_surface, only the sides that are anchored to an edge of the screen can have gaps. Since there is support for per-side outer gaps for workspaces, those should be able to be used instead for the last side.
Diffstat (limited to 'sway/commands')
-rw-r--r--sway/commands/bar.c1
-rw-r--r--sway/commands/bar/gaps.c60
2 files changed, 61 insertions, 0 deletions
diff --git a/sway/commands/bar.c b/sway/commands/bar.c
index f9ed530e..0cf94907 100644
--- a/sway/commands/bar.c
+++ b/sway/commands/bar.c
@@ -14,6 +14,7 @@ static struct cmd_handler bar_handlers[] = {
14 { "colors", bar_cmd_colors }, 14 { "colors", bar_cmd_colors },
15 { "context_button", bar_cmd_context_button }, 15 { "context_button", bar_cmd_context_button },
16 { "font", bar_cmd_font }, 16 { "font", bar_cmd_font },
17 { "gaps", bar_cmd_gaps },
17 { "height", bar_cmd_height }, 18 { "height", bar_cmd_height },
18 { "hidden_state", bar_cmd_hidden_state }, 19 { "hidden_state", bar_cmd_hidden_state },
19 { "icon_theme", bar_cmd_icon_theme }, 20 { "icon_theme", bar_cmd_icon_theme },
diff --git a/sway/commands/bar/gaps.c b/sway/commands/bar/gaps.c
new file mode 100644
index 00000000..f78f3742
--- /dev/null
+++ b/sway/commands/bar/gaps.c
@@ -0,0 +1,60 @@
1#include <stdlib.h>
2#include <string.h>
3#include <strings.h>
4#include "sway/commands.h"
5#include "sway/ipc-server.h"
6#include "log.h"
7
8struct cmd_results *bar_cmd_gaps(int argc, char **argv) {
9 struct cmd_results *error = NULL;
10 if ((error = checkarg(argc, "gaps", EXPECTED_AT_LEAST, 1))) {
11 return error;
12 }
13 if ((error = checkarg(argc, "gaps", EXPECTED_AT_MOST, 4))) {
14 return error;
15 }
16 if (!config->current_bar) {
17 return cmd_results_new(CMD_FAILURE, "bar gaps", "No bar defined.");
18 }
19
20 int top = 0, right = 0, bottom = 0, left = 0;
21
22 for (int i = 0; i < argc; i++) {
23 char *end;
24 int amount = strtol(argv[i], &end, 10);
25 if (strlen(end) && strcasecmp(end, "px") != 0) {
26 return cmd_results_new(CMD_INVALID, "bar gaps",
27 "Expected 'bar [<bar-id>] gaps <all> | <horizonal> "
28 "<vertical> | <top> <right> <bottom> <left>'");
29 }
30
31 if (i == 0) {
32 top = amount;
33 }
34 if (i == 0 || i == 1) {
35 right = amount;
36 }
37 if (i == 0 || i == 2) {
38 bottom = amount;
39 }
40 if (i == 0 || i == 1 || i == 3) {
41 left = amount;
42 }
43 }
44
45 config->current_bar->gaps.top = top;
46 config->current_bar->gaps.right = right;
47 config->current_bar->gaps.bottom = bottom;
48 config->current_bar->gaps.left = left;
49
50 wlr_log(WLR_DEBUG, "Setting bar gaps to %d %d %d %d on bar: %s",
51 config->current_bar->gaps.top, config->current_bar->gaps.right,
52 config->current_bar->gaps.bottom, config->current_bar->gaps.left,
53 config->current_bar->id);
54
55 if (!config->reading) {
56 ipc_event_barconfig_update(config->current_bar);
57 }
58
59 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
60}