Rebase #1636 against current master

This commit is contained in:
v44r 2019-01-31 10:45:12 +01:00 committed by emersion
parent 1049f360e1
commit 204e1f4712
3 changed files with 9 additions and 2 deletions

View file

@ -7,7 +7,7 @@
struct i3bar_block { struct i3bar_block {
struct wl_list link; // status_link::blocks struct wl_list link; // status_link::blocks
int ref_count; int ref_count;
char *full_text, *short_text, *align; char *full_text, *short_text, *align, *min_width_str;
bool urgent; bool urgent;
uint32_t *color; uint32_t *color;
int min_width; int min_width;

View file

@ -21,6 +21,7 @@ void i3bar_block_unref(struct i3bar_block *block) {
free(block->full_text); free(block->full_text);
free(block->short_text); free(block->short_text);
free(block->align); free(block->align);
free(block->min_width_str);
free(block->name); free(block->name);
free(block->instance); free(block->instance);
free(block->color); 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); block->min_width = json_object_get_int(min_width);
} else if (type == json_type_string) { } else if (type == json_type_string) {
/* the width will be calculated when rendering */ /* 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"); block->align = strdup(align ? json_object_get_string(align) : "left");

View file

@ -159,6 +159,12 @@ static uint32_t render_status_block(cairo_t *cairo,
double ws_vertical_padding = config->status_padding * output->scale; double ws_vertical_padding = config->status_padding * output->scale;
int width = text_width; 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) { if (width < block->min_width) {
width = block->min_width; width = block->min_width;
} }