aboutsummaryrefslogtreecommitdiffstats
path: root/sway
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
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')
-rw-r--r--sway/commands/bar.c1
-rw-r--r--sway/commands/bar/gaps.c60
-rw-r--r--sway/ipc-json.c12
-rw-r--r--sway/meson.build1
-rw-r--r--sway/sway-bar.5.scd7
5 files changed, 81 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}
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 40fbd3e7..fc631373 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -638,6 +638,18 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
638 json_object_new_string(bar->status_command) : NULL); 638 json_object_new_string(bar->status_command) : NULL);
639 json_object_object_add(json, "font", 639 json_object_object_add(json, "font",
640 json_object_new_string((bar->font) ? bar->font : config->font)); 640 json_object_new_string((bar->font) ? bar->font : config->font));
641
642 json_object *gaps = json_object_new_object();
643 json_object_object_add(gaps, "top",
644 json_object_new_int(bar->gaps.top));
645 json_object_object_add(gaps, "right",
646 json_object_new_int(bar->gaps.right));
647 json_object_object_add(gaps, "bottom",
648 json_object_new_int(bar->gaps.bottom));
649 json_object_object_add(gaps, "left",
650 json_object_new_int(bar->gaps.left));
651 json_object_object_add(json, "gaps", gaps);
652
641 if (bar->separator_symbol) { 653 if (bar->separator_symbol) {
642 json_object_object_add(json, "separator_symbol", 654 json_object_object_add(json, "separator_symbol",
643 json_object_new_string(bar->separator_symbol)); 655 json_object_new_string(bar->separator_symbol));
diff --git a/sway/meson.build b/sway/meson.build
index 75131891..51b40020 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -104,6 +104,7 @@ sway_sources = files(
104 'commands/bar/colors.c', 104 'commands/bar/colors.c',
105 'commands/bar/context_button.c', 105 'commands/bar/context_button.c',
106 'commands/bar/font.c', 106 'commands/bar/font.c',
107 'commands/bar/gaps.c',
107 'commands/bar/height.c', 108 'commands/bar/height.c',
108 'commands/bar/hidden_state.c', 109 'commands/bar/hidden_state.c',
109 'commands/bar/icon_theme.c', 110 'commands/bar/icon_theme.c',
diff --git a/sway/sway-bar.5.scd b/sway/sway-bar.5.scd
index 60ee9999..a3c6af2e 100644
--- a/sway/sway-bar.5.scd
+++ b/sway/sway-bar.5.scd
@@ -61,6 +61,13 @@ Sway allows configuring swaybar in the sway configuration file.
61*binding\_mode\_indicator* yes|no 61*binding\_mode\_indicator* yes|no
62 Enable or disable binding mode indicator. Default is _yes_. 62 Enable or disable binding mode indicator. Default is _yes_.
63 63
64*gaps* <all> | <horizontal> <vertical> | <top> <right> <bottom> <left>
65 Sets the gaps from the edge of the screen for the bar. Gaps can either be
66 set all at once, per direction, or per side. Note that only sides that
67 touch an edge of the screen can have gaps. For the side that does not
68 touch an edge of the screen, per-side outer gaps for workspaces may be of
69 use.
70
64*height* <height> 71*height* <height>
65 Sets the height of the bar. Default height will match the font size. 72 Sets the height of the bar. Default height will match the font size.
66 73