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_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.c6
-rw-r--r--swaybar/render.c11
12 files changed, 46 insertions, 6 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 7d0ff838..95f34140 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_padding;
201sway_cmd bar_cmd_pango_markup; 202sway_cmd bar_cmd_pango_markup;
202sway_cmd bar_cmd_strip_workspace_numbers; 203sway_cmd bar_cmd_strip_workspace_numbers;
203sway_cmd bar_cmd_strip_workspace_name; 204sway_cmd bar_cmd_strip_workspace_name;
diff --git a/include/sway/config.h b/include/sway/config.h
index 29c21afe..c49d4ccf 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -232,6 +232,7 @@ 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;
235 struct { 236 struct {
236 char *background; 237 char *background;
237 char *statusline; 238 char *statusline;
diff --git a/include/swaybar/config.h b/include/swaybar/config.h
index 1f6577bd..ce0dd4c9 100644
--- a/include/swaybar/config.h
+++ b/include/swaybar/config.h
@@ -43,6 +43,7 @@ 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;
46 struct { 47 struct {
47 int top; 48 int top;
48 int right; 49 int right;
diff --git a/sway/commands/bar.c b/sway/commands/bar.c
index 507ee10a..81d84331 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_padding", bar_cmd_status_padding },
26 { "strip_workspace_name", bar_cmd_strip_workspace_name }, 27 { "strip_workspace_name", bar_cmd_strip_workspace_name },
27 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, 28 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers },
28 { "tray_bindsym", bar_cmd_tray_bindsym }, 29 { "tray_bindsym", bar_cmd_tray_bindsym },
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..ebe81cab 100644
--- a/sway/config/bar.c
+++ b/sway/config/bar.c
@@ -106,6 +106,7 @@ 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;
109 if (!(bar->mode = strdup("dock"))) { 110 if (!(bar->mode = strdup("dock"))) {
110 goto cleanup; 111 goto cleanup;
111 } 112 }
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 53e0e335..a21fb4f6 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -660,6 +660,8 @@ 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));
663 json_object_object_add(json, "wrap_scroll", 665 json_object_object_add(json, "wrap_scroll",
664 json_object_new_boolean(bar->wrap_scroll)); 666 json_object_new_boolean(bar->wrap_scroll));
665 json_object_object_add(json, "workspace_buttons", 667 json_object_object_add(json, "workspace_buttons",
diff --git a/sway/meson.build b/sway/meson.build
index 98676ce0..1f7ae060 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_padding.c',
119 'commands/bar/strip_workspace_numbers.c', 120 'commands/bar/strip_workspace_numbers.c',
120 'commands/bar/strip_workspace_name.c', 121 'commands/bar/strip_workspace_name.c',
121 'commands/bar/swaybar_command.c', 122 'commands/bar/swaybar_command.c',
diff --git a/sway/sway-bar.5.scd b/sway/sway-bar.5.scd
index 2357591d..4448e3e8 100644
--- a/sway/sway-bar.5.scd
+++ b/sway/sway-bar.5.scd
@@ -92,6 +92,11 @@ 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
95## TRAY 100## TRAY
96 101
97Swaybar provides a system tray where third-party applications may place icons. 102Swaybar provides a system tray where third-party applications may place icons.
diff --git a/swaybar/config.c b/swaybar/config.c
index 9cafe061..86a76a7f 100644
--- a/swaybar/config.c
+++ b/swaybar/config.c
@@ -37,6 +37,7 @@ 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;
40 41
41 /* height */ 42 /* height */
42 config->height = 0; 43 config->height = 0;
diff --git a/swaybar/ipc.c b/swaybar/ipc.c
index 8e7a542e..77e1b94e 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;
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,7 @@ 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);
179 if (status_command) { 180 if (status_command) {
180 free(config->status_command); 181 free(config->status_command);
181 config->status_command = strdup(json_object_get_string(status_command)); 182 config->status_command = strdup(json_object_get_string(status_command));
@@ -209,6 +210,9 @@ static bool ipc_parse_config(
209 if (bar_height) { 210 if (bar_height) {
210 config->height = json_object_get_int(bar_height); 211 config->height = json_object_get_int(bar_height);
211 } 212 }
213 if (status_padding) {
214 config->status_padding = json_object_get_int(status_padding);
215 }
212 if (gaps) { 216 if (gaps) {
213 json_object *top = json_object_object_get(gaps, "top"); 217 json_object *top = json_object_object_get(gaps, "top");
214 if (top) { 218 if (top) {
diff --git a/swaybar/render.c b/swaybar/render.c
index 7cbcea07..edc97e77 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) {
@@ -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;