aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/swaybar/i3bar.h2
-rw-r--r--swaybar/i3bar.c3
-rw-r--r--swaybar/render.c6
3 files changed, 9 insertions, 2 deletions
diff --git a/include/swaybar/i3bar.h b/include/swaybar/i3bar.h
index aa4415ff..5b6001ce 100644
--- a/include/swaybar/i3bar.h
+++ b/include/swaybar/i3bar.h
@@ -7,7 +7,7 @@
struct i3bar_block {
struct wl_list link; // status_link::blocks
int ref_count;
- char *full_text, *short_text, *align;
+ char *full_text, *short_text, *align, *min_width_str;
bool urgent;
uint32_t *color;
int min_width;
diff --git a/swaybar/i3bar.c b/swaybar/i3bar.c
index da93a132..43e2fe2d 100644
--- a/swaybar/i3bar.c
+++ b/swaybar/i3bar.c
@@ -21,6 +21,7 @@ void i3bar_block_unref(struct i3bar_block *block) {
free(block->full_text);
free(block->short_text);
free(block->align);
+ free(block->min_width_str);
free(block->name);
free(block->instance);
free(block->color);
@@ -78,7 +79,7 @@ static void i3bar_parse_json(struct status_line *status,
block->min_width = json_object_get_int(min_width);
} else if (type == json_type_string) {
/* the width will be calculated when rendering */
- block->min_width = 0;
+ block->min_width_str = strdup(json_object_get_string(min_width));
}
}
block->align = strdup(align ? json_object_get_string(align) : "left");
diff --git a/swaybar/render.c b/swaybar/render.c
index e27f7d4c..116cc595 100644
--- a/swaybar/render.c
+++ b/swaybar/render.c
@@ -159,6 +159,12 @@ static uint32_t render_status_block(cairo_t *cairo,
double ws_vertical_padding = config->status_padding * output->scale;
int width = text_width;
+ if (block->min_width_str) {
+ int w;
+ get_text_size(cairo, config->font, &w, NULL, NULL,
+ output->scale, block->markup, "%s", block->min_width_str);
+ block->min_width = w;
+ }
if (width < block->min_width) {
width = block->min_width;
}