From ee13255297ecd4cd0a1aa1b5d9f514770d6910b2 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sun, 4 Apr 2010 15:42:51 +0200 Subject: [PATCH] Client/Event/Tag: Fix XUrgencyHint support --- src/client.c | 1 + src/config.c | 2 +- src/event.c | 6 +++--- src/infobar.c | 19 ++++++++++--------- src/structs.h | 1 + 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/client.c b/src/client.c index 796f2fd..50d6ca7 100644 --- a/src/client.c +++ b/src/client.c @@ -271,6 +271,7 @@ client_focus(Client *c) if(c->flags & UrgentFlag) { c->flags &= ~UrgentFlag; + tags[c->screen][c->tag].urgent = False; infobar_draw_taglist(c->screen); } diff --git a/src/config.c b/src/config.c index 784be38..2f713c8 100644 --- a/src/config.c +++ b/src/config.c @@ -396,7 +396,7 @@ conf_tag_section(char *src) * MAXTAG (32) print an error and create only one. */ Tag default_tag = { "WMFS", NULL, 0, 1, - 0.50, 1, False, False, False, IB_Top, + 0.50, 1, False, False, False, False, IB_Top, layout_name_to_struct(conf.layout, "tile_right", conf.nlayout, layout_list) }; cfg_set_sauv(src); diff --git a/src/event.c b/src/event.c index b378c32..5b92f81 100644 --- a/src/event.c +++ b/src/event.c @@ -477,12 +477,12 @@ propertynotify(XPropertyEvent *ev) client_size_hints(c); break; case XA_WM_HINTS: - if((h = XGetWMHints(dpy, c->win)) && (h->flags & XUrgencyHint)) + if((h = XGetWMHints(dpy, c->win)) && (h->flags & XUrgencyHint) && c != sel) { c->flags |= UrgentFlag; - if(ishide(c, selscreen)) - infobar_draw_taglist(c->screen); + tags[c->screen][c->tag].urgent = True; + infobar_draw_taglist(c->screen); XFree(h); } diff --git a/src/infobar.c b/src/infobar.c index 14c5e2f..fcdce88 100644 --- a/src/infobar.c +++ b/src/infobar.c @@ -208,23 +208,24 @@ infobar_draw_taglist(int sc) barwin_refresh_color(infobar[sc].tags[i]); - /* Colorize a tag if there are clients in this or in urgent case */ + /* Colorize a tag if there are clients in this */ for(c = clients; c; c = c->next) { if(c->screen == sc) { - if(c->tag == i && (c->flags & UrgentFlag) && c->tag != seltag[sc]) - { - infobar[sc].tags[i]->bg = conf.colors.tagurbg; - infobar[sc].tags[i]->fg = conf.colors.tagurfg; - } - else - infobar[sc].tags[c->tag]->bg = ((c->tag == seltag[sc]) ? conf.colors.tagselbg : conf.colors.tag_occupied_bg); - + infobar[sc].tags[c->tag]->bg = ((c->tag == seltag[sc]) ? 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); } diff --git a/src/structs.h b/src/structs.h index d91e98e..5498038 100644 --- a/src/structs.h +++ b/src/structs.h @@ -251,6 +251,7 @@ typedef struct int layers; float mwfact; int nmaster; + Bool urgent; Bool resizehint; Bool request_update; Bool abovefc;