swaybar: add status_edge_padding command

This adds the bar subcommand `status_edge_padding <padding>` to set the
padding used when the status line is on the right edge of the bar.
master
Brian Ashworth 6 years ago
parent c0f92cb2fb
commit ca0a75d540

@ -198,6 +198,7 @@ sway_cmd bar_cmd_id;
sway_cmd bar_cmd_position; sway_cmd bar_cmd_position;
sway_cmd bar_cmd_separator_symbol; sway_cmd bar_cmd_separator_symbol;
sway_cmd bar_cmd_status_command; sway_cmd bar_cmd_status_command;
sway_cmd bar_cmd_status_edge_padding;
sway_cmd bar_cmd_status_padding; sway_cmd bar_cmd_status_padding;
sway_cmd bar_cmd_pango_markup; sway_cmd bar_cmd_pango_markup;
sway_cmd bar_cmd_strip_workspace_numbers; sway_cmd bar_cmd_strip_workspace_numbers;

@ -233,6 +233,7 @@ struct bar_config {
struct side_gaps gaps; struct side_gaps gaps;
pid_t pid; pid_t pid;
int status_padding; int status_padding;
int status_edge_padding;
struct { struct {
char *background; char *background;
char *statusline; char *statusline;

@ -44,6 +44,7 @@ struct swaybar_config {
bool all_outputs; bool all_outputs;
int height; int height;
int status_padding; int status_padding;
int status_edge_padding;
struct { struct {
int top; int top;
int right; int right;

@ -23,6 +23,7 @@ static struct cmd_handler bar_handlers[] = {
{ "position", bar_cmd_position }, { "position", bar_cmd_position },
{ "separator_symbol", bar_cmd_separator_symbol }, { "separator_symbol", bar_cmd_separator_symbol },
{ "status_command", bar_cmd_status_command }, { "status_command", bar_cmd_status_command },
{ "status_edge_padding", bar_cmd_status_edge_padding },
{ "status_padding", bar_cmd_status_padding }, { "status_padding", bar_cmd_status_padding },
{ "strip_workspace_name", bar_cmd_strip_workspace_name }, { "strip_workspace_name", bar_cmd_strip_workspace_name },
{ "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers },

@ -0,0 +1,21 @@
#include <stdlib.h>
#include <string.h>
#include "sway/commands.h"
#include "log.h"
struct cmd_results *bar_cmd_status_edge_padding(int argc, char **argv) {
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "status_edge_padding", EXPECTED_EQUAL_TO, 1))) {
return error;
}
char *end;
int padding = strtol(argv[0], &end, 10);
if (strlen(end) || padding < 0) {
return cmd_results_new(CMD_INVALID, "status_edge_padding",
"Padding must be a positive integer");
}
config->current_bar->status_edge_padding = padding;
wlr_log(WLR_DEBUG, "Status edge padding on bar %s: %d",
config->current_bar->id, config->current_bar->status_edge_padding);
return cmd_results_new(CMD_SUCCESS, NULL, NULL);
}

@ -107,6 +107,7 @@ struct bar_config *default_bar_config(void) {
bar->pid = 0; bar->pid = 0;
bar->modifier = get_modifier_mask_by_name("Mod4"); bar->modifier = get_modifier_mask_by_name("Mod4");
bar->status_padding = 1; bar->status_padding = 1;
bar->status_edge_padding = 3;
if (!(bar->mode = strdup("dock"))) { if (!(bar->mode = strdup("dock"))) {
goto cleanup; goto cleanup;
} }

@ -662,6 +662,8 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
json_object_new_int(bar->height)); json_object_new_int(bar->height));
json_object_object_add(json, "status_padding", json_object_object_add(json, "status_padding",
json_object_new_int(bar->status_padding)); json_object_new_int(bar->status_padding));
json_object_object_add(json, "status_edge_padding",
json_object_new_int(bar->status_edge_padding));
json_object_object_add(json, "wrap_scroll", json_object_object_add(json, "wrap_scroll",
json_object_new_boolean(bar->wrap_scroll)); json_object_new_boolean(bar->wrap_scroll));
json_object_object_add(json, "workspace_buttons", json_object_object_add(json, "workspace_buttons",

@ -116,6 +116,7 @@ sway_sources = files(
'commands/bar/position.c', 'commands/bar/position.c',
'commands/bar/separator_symbol.c', 'commands/bar/separator_symbol.c',
'commands/bar/status_command.c', 'commands/bar/status_command.c',
'commands/bar/status_edge_padding.c',
'commands/bar/status_padding.c', 'commands/bar/status_padding.c',
'commands/bar/strip_workspace_numbers.c', 'commands/bar/strip_workspace_numbers.c',
'commands/bar/strip_workspace_name.c', 'commands/bar/strip_workspace_name.c',

@ -97,6 +97,11 @@ Sway allows configuring swaybar in the sway configuration file.
_1_. If _padding_ is _0_, blocks will be able to take up the full height of _1_. If _padding_ is _0_, blocks will be able to take up the full height of
the bar. This value will be multiplied by the output scale. the bar. This value will be multiplied by the output scale.
*status\_edge\_padding* <padding>
Sets the padding that is used when the status line is at the right edge of
the bar. This value will be multiplied by the output scale. The default is
_3_.
## TRAY ## TRAY
Swaybar provides a system tray where third-party applications may place icons. Swaybar provides a system tray where third-party applications may place icons.

@ -38,6 +38,7 @@ struct swaybar_config *init_config(void) {
config->bindings = create_list(); config->bindings = create_list();
wl_list_init(&config->outputs); wl_list_init(&config->outputs);
config->status_padding = 1; config->status_padding = 1;
config->status_edge_padding = 3;
/* height */ /* height */
config->height = 0; config->height = 0;

@ -157,7 +157,7 @@ static bool ipc_parse_config(
json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons; json_object *font, *gaps, *bar_height, *wrap_scroll, *workspace_buttons;
json_object *strip_workspace_numbers, *strip_workspace_name; json_object *strip_workspace_numbers, *strip_workspace_name;
json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol; json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol;
json_object *outputs, *bindings, *status_padding; json_object *outputs, *bindings, *status_padding, *status_edge_padding;
json_object_object_get_ex(bar_config, "mode", &mode); json_object_object_get_ex(bar_config, "mode", &mode);
json_object_object_get_ex(bar_config, "hidden_state", &hidden_state); json_object_object_get_ex(bar_config, "hidden_state", &hidden_state);
json_object_object_get_ex(bar_config, "position", &position); json_object_object_get_ex(bar_config, "position", &position);
@ -177,6 +177,8 @@ static bool ipc_parse_config(
json_object_object_get_ex(bar_config, "pango_markup", &markup); json_object_object_get_ex(bar_config, "pango_markup", &markup);
json_object_object_get_ex(bar_config, "bindings", &bindings); json_object_object_get_ex(bar_config, "bindings", &bindings);
json_object_object_get_ex(bar_config, "status_padding", &status_padding); json_object_object_get_ex(bar_config, "status_padding", &status_padding);
json_object_object_get_ex(bar_config, "status_edge_padding",
&status_edge_padding);
if (status_command) { if (status_command) {
free(config->status_command); free(config->status_command);
config->status_command = strdup(json_object_get_string(status_command)); config->status_command = strdup(json_object_get_string(status_command));
@ -213,6 +215,9 @@ static bool ipc_parse_config(
if (status_padding) { if (status_padding) {
config->status_padding = json_object_get_int(status_padding); config->status_padding = json_object_get_int(status_padding);
} }
if (status_edge_padding) {
config->status_edge_padding = json_object_get_int(status_edge_padding);
}
if (gaps) { if (gaps) {
json_object *top = json_object_object_get(gaps, "top"); json_object *top = json_object_object_get(gaps, "top");
if (top) { if (top) {

@ -194,8 +194,8 @@ static uint32_t render_status_block(cairo_t *cairo,
} }
} }
*x -= sep_block_width; *x -= sep_block_width;
} else { } else if (config->status_edge_padding) {
*x -= margin; *x -= config->status_edge_padding * output->scale;
} }
uint32_t height = output->height * output->scale; uint32_t height = output->height * output->scale;
@ -287,7 +287,7 @@ static uint32_t render_status_block(cairo_t *cairo,
static uint32_t render_status_line_i3bar(cairo_t *cairo, static uint32_t render_status_line_i3bar(cairo_t *cairo,
struct swaybar_output *output, double *x) { struct swaybar_output *output, double *x) {
uint32_t max_height = 0; uint32_t max_height = 0;
bool edge = true; bool edge = *x == output->width * output->scale;
struct i3bar_block *block; struct i3bar_block *block;
wl_list_for_each(block, &output->bar->status->blocks, link) { wl_list_for_each(block, &output->bar->status->blocks, link) {
uint32_t h = render_status_block(cairo, output, block, x, edge); uint32_t h = render_status_block(cairo, output, block, x, edge);

Loading…
Cancel
Save