aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/main.c
diff options
context:
space:
mode:
authorLibravatar Mikkel Oscar Lyderik <mikkeloscar@gmail.com>2016-01-03 17:33:47 +0100
committerLibravatar Mikkel Oscar Lyderik <mikkeloscar@gmail.com>2016-01-03 17:37:32 +0100
commitccdcdc339679284887778ec1eff548afdc4c5511 (patch)
tree937764b35c06f22b4136bf4c10d6ea8c5aab868a /swaybar/main.c
parentMerge pull request #421 from crondog/splittoggle (diff)
downloadsway-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.c42
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;
76struct window *window; 76struct window *window;
77bool dirty = true; 77bool dirty = true;
78char *separator_symbol = NULL; 78char *separator_symbol = NULL;
79bool strip_workspace_numbers = false;
79typedef enum {UNDEF, TEXT, I3BAR} command_protocol; 80typedef enum {UNDEF, TEXT, I3BAR} command_protocol;
80command_protocol protocol = UNDEF; 81command_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
575char *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
570void render_workspace_button(struct workspace *ws, double *x) { 599void 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
604void render() { 638void render() {