summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sway/commands.h2
-rw-r--r--include/sway/config.h2
-rw-r--r--include/swaybar/config.h2
-rw-r--r--sway/commands/bar.c2
-rw-r--r--sway/commands/bar/status_edge_padding.c21
-rw-r--r--sway/commands/bar/status_padding.c21
-rw-r--r--sway/config/bar.c2
-rw-r--r--sway/ipc-json.c4
-rw-r--r--sway/meson.build2
-rw-r--r--sway/sway-bar.5.scd10
-rw-r--r--swaybar/config.c2
-rw-r--r--swaybar/ipc.c11
-rw-r--r--swaybar/render.c17
13 files changed, 89 insertions, 9 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 7d0ff838..04f93ba9 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -198,6 +198,8 @@ 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;
202sway_cmd bar_cmd_status_padding;
201sway_cmd bar_cmd_pango_markup; 203sway_cmd bar_cmd_pango_markup;
202sway_cmd bar_cmd_strip_workspace_numbers; 204sway_cmd bar_cmd_strip_workspace_numbers;
203sway_cmd bar_cmd_strip_workspace_name; 205sway_cmd bar_cmd_strip_workspace_name;
diff --git a/include/sway/config.h b/include/sway/config.h
index 29c21afe..a667984d 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -232,6 +232,8 @@ struct bar_config {
232 bool verbose; 232 bool verbose;
233 struct side_gaps gaps; 233 struct side_gaps gaps;
234 pid_t pid; 234 pid_t pid;
235 int status_padding;
236 int status_edge_padding;
235 struct { 237 struct {
236 char *background; 238 char *background;
237 char *statusline; 239 char *statusline;
diff --git a/include/swaybar/config.h b/include/swaybar/config.h
index 1f6577bd..add0a1cf 100644
--- a/include/swaybar/config.h
+++ b/include/swaybar/config.h
@@ -43,6 +43,8 @@ struct swaybar_config {
43 struct wl_list outputs; // config_output::link 43 struct wl_list outputs; // config_output::link
44 bool all_outputs; 44 bool all_outputs;
45 int height; 45 int height;
46 int status_padding;
47 int status_edge_padding;
46 struct { 48 struct {
47 int top; 49 int top;
48 int right; 50 int right;
diff --git a/sway/commands/bar.c b/sway/commands/bar.c
index 507ee10a..3e7c1b0f 100644
--- a/sway/commands/bar.c
+++ b/sway/commands/bar.c
@@ -23,6 +23,8 @@ 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 },
27 { "status_padding", bar_cmd_status_padding },
26 { "strip_workspace_name", bar_cmd_strip_workspace_name }, 28 { "strip_workspace_name", bar_cmd_strip_workspace_name },
27 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, 29 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers },
28 { "tray_bindsym", bar_cmd_tray_bindsym }, 30 { "tray_bindsym", bar_cmd_tray_bindsym },
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/commands/bar/status_padding.c b/sway/commands/bar/status_padding.c
new file mode 100644
index 00000000..13b8eb6b
--- /dev/null
+++ b/sway/commands/bar/status_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_padding(int argc, char **argv) {
7 struct cmd_results *error = NULL;
8 if ((error = checkarg(argc, "status_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_padding",
15 "Padding must be a positive integer");
16 }
17 config->current_bar->status_padding = padding;
18 wlr_log(WLR_DEBUG, "Status padding on bar %s: %d",
19 config->current_bar->id, config->current_bar->status_padding);
20 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
21}
diff --git a/sway/config/bar.c b/sway/config/bar.c
index 670219f1..101562d1 100644
--- a/sway/config/bar.c
+++ b/sway/config/bar.c
@@ -106,6 +106,8 @@ struct bar_config *default_bar_config(void) {
106 bar->verbose = false; 106 bar->verbose = false;
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;
110 bar->status_edge_padding = 3;
109 if (!(bar->mode = strdup("dock"))) { 111 if (!(bar->mode = strdup("dock"))) {
110 goto cleanup; 112 goto cleanup;
111 } 113 }
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 53e0e335..09b65e8d 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -660,6 +660,10 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
660 } 660 }
661 json_object_object_add(json, "bar_height", 661 json_object_object_add(json, "bar_height",
662 json_object_new_int(bar->height)); 662 json_object_new_int(bar->height));
663 json_object_object_add(json, "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));
663 json_object_object_add(json, "wrap_scroll", 667 json_object_object_add(json, "wrap_scroll",
664 json_object_new_boolean(bar->wrap_scroll)); 668 json_object_new_boolean(bar->wrap_scroll));
665 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 98676ce0..ab5862c5 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -116,6 +116,8 @@ 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',
120 'commands/bar/status_padding.c',
119 'commands/bar/strip_workspace_numbers.c', 121 'commands/bar/strip_workspace_numbers.c',
120 'commands/bar/strip_workspace_name.c', 122 'commands/bar/strip_workspace_name.c',
121 'commands/bar/swaybar_command.c', 123 'commands/bar/swaybar_command.c',
diff --git a/sway/sway-bar.5.scd b/sway/sway-bar.5.scd
index 2357591d..b345b392 100644
--- a/sway/sway-bar.5.scd
+++ b/sway/sway-bar.5.scd
@@ -92,6 +92,16 @@ Sway allows configuring swaybar in the sway configuration file.
92*modifier* <Modifier>|none 92*modifier* <Modifier>|none
93 Specifies the modifier key that shows a hidden bar. Default is _Mod4_. 93 Specifies the modifier key that shows a hidden bar. Default is _Mod4_.
94 94
95*status\_padding* <padding>
96 Sets the vertical padding that is used for the status line. The default is
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.
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
95## TRAY 105## TRAY
96 106
97Swaybar 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 9cafe061..d4cc9b1a 100644
--- a/swaybar/config.c
+++ b/swaybar/config.c
@@ -37,6 +37,8 @@ struct swaybar_config *init_config(void) {
37 config->workspace_buttons = true; 37 config->workspace_buttons = true;
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;
41 config->status_edge_padding = 3;
40 42
41 /* height */ 43 /* height */
42 config->height = 0; 44 config->height = 0;
diff --git a/swaybar/ipc.c b/swaybar/ipc.c
index 8e7a542e..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; 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);
@@ -176,6 +176,9 @@ static bool ipc_parse_config(
176 json_object_object_get_ex(bar_config, "outputs", &outputs); 176 json_object_object_get_ex(bar_config, "outputs", &outputs);
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);
180 json_object_object_get_ex(bar_config, "status_edge_padding",
181 &status_edge_padding);
179 if (status_command) { 182 if (status_command) {
180 free(config->status_command); 183 free(config->status_command);
181 config->status_command = strdup(json_object_get_string(status_command)); 184 config->status_command = strdup(json_object_get_string(status_command));
@@ -209,6 +212,12 @@ static bool ipc_parse_config(
209 if (bar_height) { 212 if (bar_height) {
210 config->height = json_object_get_int(bar_height); 213 config->height = json_object_get_int(bar_height);
211 } 214 }
215 if (status_padding) {
216 config->status_padding = json_object_get_int(status_padding);
217 }
218 if (status_edge_padding) {
219 config->status_edge_padding = json_object_get_int(status_edge_padding);
220 }
212 if (gaps) { 221 if (gaps) {
213 json_object *top = json_object_object_get(gaps, "top"); 222 json_object *top = json_object_object_get(gaps, "top");
214 if (top) { 223 if (top) {
diff --git a/swaybar/render.c b/swaybar/render.c
index 7cbcea07..993c8228 100644
--- a/swaybar/render.c
+++ b/swaybar/render.c
@@ -35,7 +35,8 @@ static uint32_t render_status_line_error(cairo_t *cairo,
35 cairo_set_source_u32(cairo, 0xFF0000FF); 35 cairo_set_source_u32(cairo, 0xFF0000FF);
36 36
37 int margin = 3 * output->scale; 37 int margin = 3 * output->scale;
38 int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; 38 double ws_vertical_padding =
39 output->bar->config->status_padding * output->scale;
39 40
40 char *font = output->bar->config->font; 41 char *font = output->bar->config->font;
41 int text_width, text_height; 42 int text_width, text_height;
@@ -71,7 +72,7 @@ static uint32_t render_status_line_text(cairo_t *cairo,
71 get_text_size(cairo, config->font, &text_width, &text_height, NULL, 72 get_text_size(cairo, config->font, &text_width, &text_height, NULL,
72 output->scale, config->pango_markup, "%s", text); 73 output->scale, config->pango_markup, "%s", text);
73 74
74 int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; 75 double ws_vertical_padding = config->status_padding * output->scale;
75 int margin = 3 * output->scale; 76 int margin = 3 * output->scale;
76 77
77 uint32_t ideal_height = text_height + ws_vertical_padding * 2; 78 uint32_t ideal_height = text_height + ws_vertical_padding * 2;
@@ -153,7 +154,7 @@ static uint32_t render_status_block(cairo_t *cairo,
153 output->scale, block->markup, "%s", block->full_text); 154 output->scale, block->markup, "%s", block->full_text);
154 155
155 int margin = 3 * output->scale; 156 int margin = 3 * output->scale;
156 double ws_vertical_padding = WS_VERTICAL_PADDING * 2 * output->scale; 157 double ws_vertical_padding = config->status_padding * output->scale;
157 158
158 int width = text_width; 159 int width = text_width;
159 if (width < block->min_width) { 160 if (width < block->min_width) {
@@ -193,8 +194,8 @@ static uint32_t render_status_block(cairo_t *cairo,
193 } 194 }
194 } 195 }
195 *x -= sep_block_width; 196 *x -= sep_block_width;
196 } else { 197 } else if (config->status_edge_padding) {
197 *x -= margin; 198 *x -= config->status_edge_padding * output->scale;
198 } 199 }
199 200
200 uint32_t height = output->height * output->scale; 201 uint32_t height = output->height * output->scale;
@@ -212,8 +213,8 @@ static uint32_t render_status_block(cairo_t *cairo,
212 } 213 }
213 214
214 double x_pos = *x; 215 double x_pos = *x;
215 double y_pos = WS_VERTICAL_PADDING * output->scale; 216 double y_pos = ws_vertical_padding;
216 double render_height = height - ws_vertical_padding + output->scale; 217 double render_height = height - ws_vertical_padding * 2;
217 218
218 uint32_t bg_color = block->urgent 219 uint32_t bg_color = block->urgent
219 ? config->colors.urgent_workspace.background : block->background; 220 ? config->colors.urgent_workspace.background : block->background;
@@ -286,7 +287,7 @@ static uint32_t render_status_block(cairo_t *cairo,
286static uint32_t render_status_line_i3bar(cairo_t *cairo, 287static uint32_t render_status_line_i3bar(cairo_t *cairo,
287 struct swaybar_output *output, double *x) { 288 struct swaybar_output *output, double *x) {
288 uint32_t max_height = 0; 289 uint32_t max_height = 0;
289 bool edge = true; 290 bool edge = *x == output->width * output->scale;
290 struct i3bar_block *block; 291 struct i3bar_block *block;
291 wl_list_for_each(block, &output->bar->status->blocks, link) { 292 wl_list_for_each(block, &output->bar->status->blocks, link) {
292 uint32_t h = render_status_block(cairo, output, block, x, edge); 293 uint32_t h = render_status_block(cairo, output, block, x, edge);