diff options
author | Mikkel Oscar Lyderik <mikkeloscar@gmail.com> | 2016-01-03 17:33:47 +0100 |
---|---|---|
committer | Mikkel Oscar Lyderik <mikkeloscar@gmail.com> | 2016-01-03 17:37:32 +0100 |
commit | ccdcdc339679284887778ec1eff548afdc4c5511 (patch) | |
tree | 937764b35c06f22b4136bf4c10d6ea8c5aab868a /swaybar/main.c | |
parent | Merge pull request #421 from crondog/splittoggle (diff) | |
download | sway-ccdcdc339679284887778ec1eff548afdc4c5511.tar.gz sway-ccdcdc339679284887778ec1eff548afdc4c5511.tar.zst sway-ccdcdc339679284887778ec1eff548afdc4c5511.zip |
swaybar: Implement strip_workspace_numbers
Diffstat (limited to 'swaybar/main.c')
-rw-r--r-- | swaybar/main.c | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/swaybar/main.c b/swaybar/main.c index cbedb200..34c54287 100644 --- a/swaybar/main.c +++ b/swaybar/main.c | |||
@@ -76,6 +76,7 @@ struct registry *registry; | |||
76 | struct window *window; | 76 | struct window *window; |
77 | bool dirty = true; | 77 | bool dirty = true; |
78 | char *separator_symbol = NULL; | 78 | char *separator_symbol = NULL; |
79 | bool strip_workspace_numbers = false; | ||
79 | typedef enum {UNDEF, TEXT, I3BAR} command_protocol; | 80 | typedef enum {UNDEF, TEXT, I3BAR} command_protocol; |
80 | command_protocol protocol = UNDEF; | 81 | command_protocol protocol = UNDEF; |
81 | 82 | ||
@@ -289,7 +290,7 @@ void bar_ipc_init(int outputi, const char *bar_id) { | |||
289 | 290 | ||
290 | json_object *bar_config = json_tokener_parse(res); | 291 | json_object *bar_config = json_tokener_parse(res); |
291 | json_object *tray_output, *mode, *hidden_state, *position, *_status_command; | 292 | json_object *tray_output, *mode, *hidden_state, *position, *_status_command; |
292 | json_object *font, *bar_height, *workspace_buttons, *strip_workspace_numbers; | 293 | json_object *font, *bar_height, *workspace_buttons, *_strip_workspace_numbers; |
293 | json_object *binding_mode_indicator, *verbose, *_colors, *sep_symbol; | 294 | json_object *binding_mode_indicator, *verbose, *_colors, *sep_symbol; |
294 | json_object_object_get_ex(bar_config, "tray_output", &tray_output); | 295 | json_object_object_get_ex(bar_config, "tray_output", &tray_output); |
295 | json_object_object_get_ex(bar_config, "mode", &mode); | 296 | json_object_object_get_ex(bar_config, "mode", &mode); |
@@ -299,7 +300,7 @@ void bar_ipc_init(int outputi, const char *bar_id) { | |||
299 | json_object_object_get_ex(bar_config, "font", &font); | 300 | json_object_object_get_ex(bar_config, "font", &font); |
300 | json_object_object_get_ex(bar_config, "bar_height", &bar_height); | 301 | json_object_object_get_ex(bar_config, "bar_height", &bar_height); |
301 | json_object_object_get_ex(bar_config, "workspace_buttons", &workspace_buttons); | 302 | json_object_object_get_ex(bar_config, "workspace_buttons", &workspace_buttons); |
302 | json_object_object_get_ex(bar_config, "strip_workspace_numbers", &strip_workspace_numbers); | 303 | json_object_object_get_ex(bar_config, "strip_workspace_numbers", &_strip_workspace_numbers); |
303 | json_object_object_get_ex(bar_config, "binding_mode_indicator", &binding_mode_indicator); | 304 | json_object_object_get_ex(bar_config, "binding_mode_indicator", &binding_mode_indicator); |
304 | json_object_object_get_ex(bar_config, "verbose", &verbose); | 305 | json_object_object_get_ex(bar_config, "verbose", &verbose); |
305 | json_object_object_get_ex(bar_config, "separator_symbol", &sep_symbol); | 306 | json_object_object_get_ex(bar_config, "separator_symbol", &sep_symbol); |
@@ -323,6 +324,10 @@ void bar_ipc_init(int outputi, const char *bar_id) { | |||
323 | separator_symbol = strdup(json_object_get_string(sep_symbol)); | 324 | separator_symbol = strdup(json_object_get_string(sep_symbol)); |
324 | } | 325 | } |
325 | 326 | ||
327 | if (_strip_workspace_numbers) { | ||
328 | strip_workspace_numbers = json_object_get_boolean(_strip_workspace_numbers); | ||
329 | } | ||
330 | |||
326 | if (bar_height) { | 331 | if (bar_height) { |
327 | int width, height; | 332 | int width, height; |
328 | get_text_size(window, &width, &height, "Test string for measuring purposes"); | 333 | get_text_size(window, &width, &height, "Test string for measuring purposes"); |
@@ -567,9 +572,36 @@ void render_block(struct status_block *block, double *x, bool edge) { | |||
567 | 572 | ||
568 | } | 573 | } |
569 | 574 | ||
575 | char *handle_workspace_number(bool strip_num, const char *ws_name) { | ||
576 | bool strip = false; | ||
577 | int i; | ||
578 | |||
579 | if (strip_num) { | ||
580 | int len = strlen(ws_name); | ||
581 | for (i = 0; i < len; ++i) { | ||
582 | if (!('0' <= ws_name[i] && ws_name[i] <= '9')) { | ||
583 | if (':' == ws_name[i] && i < len-1) { | ||
584 | strip = true; | ||
585 | ++i; | ||
586 | } | ||
587 | break; | ||
588 | } | ||
589 | } | ||
590 | } | ||
591 | |||
592 | if (strip) { | ||
593 | return strdup(ws_name + i); | ||
594 | } | ||
595 | |||
596 | return strdup(ws_name); | ||
597 | } | ||
598 | |||
570 | void render_workspace_button(struct workspace *ws, double *x) { | 599 | void render_workspace_button(struct workspace *ws, double *x) { |
600 | // strip workspace numbers if required | ||
601 | char *name = handle_workspace_number(strip_workspace_numbers, ws->name); | ||
602 | |||
571 | int width, height; | 603 | int width, height; |
572 | get_text_size(window, &width, &height, "%s", ws->name); | 604 | get_text_size(window, &width, &height, "%s", name); |
573 | struct box_colors box_colors; | 605 | struct box_colors box_colors; |
574 | if (ws->urgent) { | 606 | if (ws->urgent) { |
575 | box_colors = colors.urgent_workspace; | 607 | box_colors = colors.urgent_workspace; |
@@ -596,9 +628,11 @@ void render_workspace_button(struct workspace *ws, double *x) { | |||
596 | // text | 628 | // text |
597 | cairo_set_source_u32(window->cairo, box_colors.text); | 629 | cairo_set_source_u32(window->cairo, box_colors.text); |
598 | cairo_move_to(window->cairo, (int)*x + ws_hor_padding, margin); | 630 | cairo_move_to(window->cairo, (int)*x + ws_hor_padding, margin); |
599 | pango_printf(window, "%s", ws->name); | 631 | pango_printf(window, "%s", name); |
600 | 632 | ||
601 | *x += width + ws_hor_padding * 2 + ws_spacing; | 633 | *x += width + ws_hor_padding * 2 + ws_spacing; |
634 | |||
635 | free(name); | ||
602 | } | 636 | } |
603 | 637 | ||
604 | void render() { | 638 | void render() { |