From 0bed70e52c3cdba575ddb0c1993cbc25b5b3a26a Mon Sep 17 00:00:00 2001 From: OldMan Date: Sun, 11 Apr 2010 11:40:56 +0600 Subject: [PATCH] InfoBar: taglist optimization --- src/infobar.c | 50 ++++++++++++++++++++------------------------------ 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/src/infobar.c b/src/infobar.c index 0d3f527..e7af54f 100644 --- a/src/infobar.c +++ b/src/infobar.c @@ -196,46 +196,36 @@ infobar_draw_taglist(int sc) { int i; Client *c; + Bool is_occupied[MAXTAG]; if(conf.layout_placement) barwin_move(infobar[sc].tags_board, textw(tags[sc][seltag[sc]].layout.symbol) + PAD * 1.5, 0); + for(i = 0; i < MAXTAG; i++) + is_occupied[i] = False; + + for(c = clients; c; c = c->next) + if(c->screen == sc) + is_occupied[c->tag] = True; + for(i = 1; i < conf.ntag[sc] + 1; ++i) { - infobar[sc].tags[i]->bg = - ((i == seltag[sc] || tags[sc][seltag[sc]].tagad & TagFlag(i)) - ? conf.colors.tagselbg - : conf.colors.bar); + infobar[sc].tags[i]->bg = tags[sc][i].urgent + ? conf.colors.tagurbg + : ((i == seltag[sc] || tags[sc][seltag[sc]].tagad & TagFlag(i)) + ? conf.colors.tagselbg + : (is_occupied[i] + ? conf.colors.tag_occupied_bg + : conf.colors.bar)); - infobar[sc].tags[i]->fg = - ((i == seltag[sc] || tags[sc][seltag[sc]].tagad & TagFlag(i)) - ? conf.colors.tagselfg - : conf.colors.text); + infobar[sc].tags[i]->fg = tags[sc][i].urgent + ? conf.colors.tagurfg + : ((i == seltag[sc] || tags[sc][seltag[sc]].tagad & TagFlag(i)) + ? conf.colors.tagselfg + : conf.colors.text); barwin_refresh_color(infobar[sc].tags[i]); - /* Colorize a tag if there are clients in this */ - for(c = clients; c; c = c->next) - { - if(c->screen == sc) - { - infobar[sc].tags[c->tag]->bg = - ((c->tag == seltag[sc] || tags[sc][seltag[sc]].tagad & TagFlag(c->tag))) - ? conf.colors.tagselbg - : conf.colors.tag_occupied_bg; - - barwin_refresh_color(infobar[sc].tags[i]); - } - } - - if(tags[sc][i].urgent) - { - infobar[sc].tags[i]->bg = conf.colors.tagurbg; - infobar[sc].tags[i]->fg = conf.colors.tagurfg; - - barwin_refresh_color(infobar[sc].tags[i]); - } - if(tags[sc][i].name) barwin_draw_text(infobar[sc].tags[i], PAD / 2, FHINFOBAR, tags[sc][i].name); }