aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sway/commands.h1
-rw-r--r--include/sway/config.h1
-rw-r--r--include/swaybar/config.h1
-rw-r--r--sway/commands/bar.c1
-rw-r--r--sway/commands/bar/status_edge_padding.c21
-rw-r--r--sway/config/bar.c1
-rw-r--r--sway/ipc-json.c2
-rw-r--r--sway/meson.build1
-rw-r--r--sway/sway-bar.5.scd5
-rw-r--r--swaybar/config.c1
-rw-r--r--swaybar/ipc.c7
-rw-r--r--swaybar/render.c6
12 files changed, 44 insertions, 4 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 95f34140..04f93ba9 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -198,6 +198,7 @@ sway_cmd bar_cmd_id;
198sway_cmd bar_cmd_position; 198sway_cmd bar_cmd_position;
199sway_cmd bar_cmd_separator_symbol; 199sway_cmd bar_cmd_separator_symbol;
200sway_cmd bar_cmd_status_command; 200sway_cmd bar_cmd_status_command;
201sway_cmd bar_cmd_status_edge_padding;
201sway_cmd bar_cmd_status_padding; 202sway_cmd bar_cmd_status_padding;
202sway_cmd bar_cmd_pango_markup; 203sway_cmd bar_cmd_pango_markup;
203sway_cmd bar_cmd_strip_workspace_numbers; 204sway_cmd bar_cmd_strip_workspace_numbers;
diff --git a/include/sway/config.h b/include/sway/config.h
index c49d4ccf..a667984d 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -233,6 +233,7 @@ struct bar_config {
233 struct side_gaps gaps; 233 struct side_gaps gaps;
234 pid_t pid; 234 pid_t pid;
235 int status_padding; 235 int status_padding;
236 int status_edge_padding;
236 struct { 237 struct {
237 char *background; 238 char *background;
238 char *statusline; 239 char *statusline;
diff --git a/include/swaybar/config.h b/include/swaybar/config.h
index ce0dd4c9..add0a1cf 100644
--- a/include/swaybar/config.h
+++ b/include/swaybar/config.h
@@ -44,6 +44,7 @@ struct swaybar_config {
44 bool all_outputs; 44 bool all_outputs;
45 int height; 45 int height;
46 int status_padding; 46 int status_padding;
47 int status_edge_padding;
47 struct { 48 struct {
48 int top; 49 int top;
49 int right; 50 int right;
diff --git a/sway/commands/bar.c b/sway/commands/bar.c
index 81d84331..3e7c1b0f 100644
--- a/sway/commands/bar.c
+++ b/sway/commands/bar.c
@@ -23,6 +23,7 @@ static struct cmd_handler bar_handlers[] = {
23 { "position", bar_cmd_position }, 23 { "position", bar_cmd_position },
24 { "separator_symbol", bar_cmd_separator_symbol }, 24 { "separator_symbol", bar_cmd_separator_symbol },
25 { "status_command", bar_cmd_status_command }, 25 { "status_command", bar_cmd_status_command },
26 { "status_edge_padding", bar_cmd_status_edge_padding },
26 { "status_padding", bar_cmd_status_padding }, 27 { "status_padding", bar_cmd_status_padding },
27 { "strip_workspace_name", bar_cmd_strip_workspace_name }, 28 { "strip_workspace_name", bar_cmd_strip_workspace_name },
28 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, 29 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers },
diff --git a/sway/commands/bar/status_edge_padding.c b/sway/commands/bar/status_edge_padding.c
new file mode 100644
index 00000000..f3b10631
--- /dev/null
+++ b/sway/commands/bar/status_edge_padding.c
@@ -0,0 +1,21 @@
1#include <stdlib.h>
2#include <string.h>
3#include "sway/commands.h"
4#include "log.h"
5
6struct cmd_results *bar_cmd_status_edge_padding(int argc, char **argv) {
7 struct cmd_results *error = NULL;
8 if ((error = checkarg(argc, "status_edge_padding", EXPECTED_EQUAL_TO, 1))) {
9 return error;
10 }
11 char *end;
12 int padding = strtol(argv[0], &end, 10);
13 if (strlen(end) || padding < 0) {
14 return cmd_results_new(CMD_INVALID, "status_edge_padding",
15 "Padding must be a positive integer");
16 }
17 config->current_bar->status_edge_padding = padding;
18 wlr_log(WLR_DEBUG, "Status edge padding on bar %s: %d",
19 config->current_bar->id, config->current_bar->status_edge_padding);
20 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
21}
diff --git a/sway/config/bar.c b/sway/config/bar.c
index ebe81cab..101562d1 100644
--- a/sway/config/bar.c
+++ b/sway/config/bar.c
@@ -107,6 +107,7 @@ struct bar_config *default_bar_config(void) {
107 bar->pid = 0; 107 bar->pid = 0;
108 bar->modifier = get_modifier_mask_by_name("Mod4"); 108 bar->modifier = get_modifier_mask_by_name("Mod4");
109 bar->status_padding = 1; 109 bar->status_padding = 1;
110 bar->status_edge_padding = 3;
110 if (!(bar->mode = strdup("dock"))) { 111 if (!(bar->mode = strdup("dock"))) {
111 goto cleanup; 112 goto cleanup;
112 } 113 }
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index a21fb4f6..09b65e8d 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -662,6 +662,8 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
662 json_object_new_int(bar->height)); 662 json_object_new_int(bar->height));
663 json_object_object_add(json, "status_padding", 663 json_object_object_add(json, "status_padding",
664 json_object_new_int(bar->status_padding)); 664 json_object_new_int(bar->status_padding));
665 json_object_object_add(json, "status_edge_padding",
666 json_object_new_int(bar->status_edge_padding));
665 json_object_object_add(json, "wrap_scroll", 667 json_object_object_add(json, "wrap_scroll",
666 json_object_new_boolean(bar->wrap_scroll)); 668 json_object_new_boolean(bar->wrap_scroll));
667 json_object_object_add(json, "workspace_buttons", 669 json_object_object_add(json, "workspace_buttons",
diff --git a/sway/meson.build b/sway/meson.build
index 1f7ae060..ab5862c5 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -116,6 +116,7 @@ sway_sources = files(
116 'commands/bar/position.c', 116 'commands/bar/position.c',
117 'commands/bar/separator_symbol.c', 117 'commands/bar/separator_symbol.c',
118 'commands/bar/status_command.c', 118 'commands/bar/status_command.c',
119 'commands/bar/status_edge_padding.c',
119 'commands/bar/status_padding.c', 120 'commands/bar/status_padding.c',
120 'commands/bar/strip_workspace_numbers.c', 121 'commands/bar/strip_workspace_numbers.c',
121 'commands/bar/strip_workspace_name.c', 122 'commands/bar/strip_workspace_name.c',
diff --git a/sway/sway-bar.5.scd b/sway/sway-bar.5.scd
index 4448e3e8..b345b392 100644
--- a/sway/sway-bar.5.scd
+++ b/sway/sway-bar.5.scd
@@ -97,6 +97,11 @@ Sway allows configuring swaybar in the sway configuration file.
97 _1_. If _padding_ is _0_, blocks will be able to take up the full height of 97 _1_. If _padding_ is _0_, blocks will be able to take up the full height of
98 the bar. This value will be multiplied by the output scale. 98 the bar. This value will be multiplied by the output scale.
99 99
100*status\_edge\_padding* <padding>
101 Sets the padding that is used when the status line is at the right edge of
102 the bar. This value will be multiplied by the output scale. The default is
103 _3_.
104
100## TRAY 105## TRAY
101 106
102Swaybar provides a system tray where third-party applications may place icons. 107Swaybar provides a system tray where third-party applications may place icons.
diff --git a/swaybar/config.c b/swaybar/config.c
index 86a76a7f..d4cc9b1a 100644
--- a/swaybar/config.c
+++ b/swaybar/config.c
@@ -38,6 +38,7 @@ struct swaybar_config *init_config(void) {
38 config->bindings = create_list(); 38 config->bindings = create_list();
39 wl_list_init(&config->outputs); 39 wl_list_init(&config->outputs);
40 config->status_padding = 1; 40 config->status_padding = 1;
41 config->status_edge_padding = 3;
41 42
42 /* height */ 43 /* height */
43 config->height = 0; 44 config->height = 0;
diff --git a/swaybar/ipc.c b/swaybar/ipc.c
index 77e1b94e..bc5c28b4 100644
--- a/swaybar/ipc.c
+++ b/swaybar/ipc.c
@@ -157,7 +157,7 @@ static bool ipc_parse_config(
157 json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons; 157 json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons;
158 json_object *strip_workspace_numbers, *strip_workspace_name; 158 json_object *strip_workspace_numbers, *strip_workspace_name;
159 json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol; 159 json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol;
160 json_object *outputs, *bindings, *status_padding; 160 json_object *outputs, *bindings, *status_padding, *status_edge_padding;
161 json_object_object_get_ex(bar_config, "mode", &mode); 161 json_object_object_get_ex(bar_config, "mode", &mode);
162 json_object_object_get_ex(bar_config, "hidden_state", &hidden_state); 162 json_object_object_get_ex(bar_config, "hidden_state", &hidden_state);
163 json_object_object_get_ex(bar_config, "position", &position); 163 json_object_object_get_ex(bar_config, "position", &position);
@@ -177,6 +177,8 @@ static bool ipc_parse_config(
177 json_object_object_get_ex(bar_config, "pango_markup", &markup); 177 json_object_object_get_ex(bar_config, "pango_markup", &markup);
178 json_object_object_get_ex(bar_config, "bindings", &bindings); 178 json_object_object_get_ex(bar_config, "bindings", &bindings);
179 json_object_object_get_ex(bar_config, "status_padding", &status_padding); 179 json_object_object_get_ex(bar_config, "status_padding", &status_padding);
180 json_object_object_get_ex(bar_config, "status_edge_padding",
181 &status_edge_padding);
180 if (status_command) { 182 if (status_command) {
181 free(config->status_command); 183 free(config->status_command);
182 config->status_command = strdup(json_object_get_string(status_command)); 184 config->status_command = strdup(json_object_get_string(status_command));
@@ -213,6 +215,9 @@ static bool ipc_parse_config(
213 if (status_padding) { 215 if (status_padding) {
214 config->status_padding = json_object_get_int(status_padding); 216 config->status_padding = json_object_get_int(status_padding);
215 } 217 }
218 if (status_edge_padding) {
219 config->status_edge_padding = json_object_get_int(status_edge_padding);
220 }
216 if (gaps) { 221 if (gaps) {
217 json_object *top = json_object_object_get(gaps, "top"); 222 json_object *top = json_object_object_get(gaps, "top");
218 if (top) { 223 if (top) {
diff --git a/swaybar/render.c b/swaybar/render.c
index edc97e77..993c8228 100644
--- a/swaybar/render.c
+++ b/swaybar/render.c
@@ -194,8 +194,8 @@ static uint32_t render_status_block(cairo_t *cairo,
194 } 194 }
195 } 195 }
196 *x -= sep_block_width; 196 *x -= sep_block_width;
197 } else { 197 } else if (config->status_edge_padding) {
198 *x -= margin; 198 *x -= config->status_edge_padding * output->scale;
199 } 199 }
200 200
201 uint32_t height = output->height * output->scale; 201 uint32_t height = output->height * output->scale;
@@ -287,7 +287,7 @@ static uint32_t render_status_block(cairo_t *cairo,
287static uint32_t render_status_line_i3bar(cairo_t *cairo, 287static uint32_t render_status_line_i3bar(cairo_t *cairo,
288 struct swaybar_output *output, double *x) { 288 struct swaybar_output *output, double *x) {
289 uint32_t max_height = 0; 289 uint32_t max_height = 0;
290 bool edge = true; 290 bool edge = *x == output->width * output->scale;
291 struct i3bar_block *block; 291 struct i3bar_block *block;
292 wl_list_for_each(block, &output->bar->status->blocks, link) { 292 wl_list_for_each(block, &output->bar->status->blocks, link) {
293 uint32_t h = render_status_block(cairo, output, block, x, edge); 293 uint32_t h = render_status_block(cairo, output, block, x, edge);