Adding a urgent color scheme

This commit is contained in:
Zoe Roux
2022-02-16 23:39:01 +01:00
parent 793624a7f3
commit a67453bf8f
4 changed files with 19 additions and 8 deletions

View File

@@ -63,6 +63,7 @@ static char *colors[][3] = {
/* fg bg border */
[SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor },
[SchemeSel] = { selfgcolor, selbgcolor, selbordercolor },
[SchemeUrg] = { selfgcolor, selbgcolor, selbordercolor },
};
typedef struct {

View File

@@ -65,6 +65,7 @@ static char *colors[][3] = {
/* fg bg border */
[SchemeNorm] = { foreground, background, border },
[SchemeSel] = { background, accent, accent },
[SchemeUrg] = { background, secondary, secondary },
};
typedef struct {

12
dwm.c
View File

@@ -102,7 +102,7 @@ if (XrmGetResource(xrdb, R, NULL, &type, &value) == True) { \
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
enum { SchemeNorm, SchemeSel }; /* color schemes */
enum { SchemeNorm, SchemeSel, SchemeUrg }; /* color schemes */
enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
NetWMFullscreen, NetActiveWindow, NetWMWindowType,
NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation,
@@ -1707,7 +1707,7 @@ manage(Window w, XWindowAttributes *wa)
wc.border_width = c->bw;
XConfigureWindow(dpy, w, CWBorderWidth, &wc);
XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
XSetWindowBorder(dpy, w, scheme[c->isurgent ? SchemeUrg : SchemeNorm][ColBorder].pixel);
configure(c); /* propagates border_width, if size doesn't change */
updatewindowtype(c);
updatesizehints(c);
@@ -2588,6 +2588,8 @@ seturgent(Client *c, int urg)
XWMHints *wmh;
c->isurgent = urg;
if (selmon->sel != c)
XSetWindowBorder(dpy, c->win, scheme[c->isurgent ? SchemeUrg : SchemeNorm][ColBorder].pixel);
if (!(wmh = XGetWMHints(dpy, c->win)))
return;
wmh->flags = urg ? (wmh->flags | XUrgencyHint) : (wmh->flags & ~XUrgencyHint);
@@ -2839,7 +2841,7 @@ unfocus(Client *c, int setfocus)
if (!c)
return;
grabbuttons(c, 0);
XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
XSetWindowBorder(dpy, c->win, scheme[c->isurgent ? SchemeUrg : SchemeNorm][ColBorder].pixel);
if (setfocus) {
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
@@ -3223,8 +3225,10 @@ updatewmhints(Client *c)
if (c == selmon->sel && wmh->flags & XUrgencyHint) {
wmh->flags &= ~XUrgencyHint;
XSetWMHints(dpy, c->win, wmh);
} else
} else {
c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0;
XSetWindowBorder(dpy, c->win, scheme[c->isurgent ? SchemeUrg : (c->mon->sel == c ? SchemeSel : SchemeNorm)][ColBorder].pixel);
}
if (wmh->flags & InputHint)
c->neverfocus = !wmh->input;
else

View File

@@ -18,11 +18,11 @@ width_tags(Bar *bar, BarWidthArg *a)
int
draw_tags(Bar *bar, BarDrawArg *a)
{
int invert;
int w, x = a->x;
unsigned int i, occ = 0, urg = 0;
Client *c;
Monitor *m = bar->mon;
int s;
for (c = m->cl->clients; c; c = c->next) {
occ |= c->tags == 255 ? 0 : c->tags;
@@ -33,10 +33,15 @@ draw_tags(Bar *bar, BarDrawArg *a)
for (i = 0; i < LENGTH(tags); i++) {
if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
continue;
invert = urg & 1 << i;
if (m->tagset[m->seltags] & 1 << i)
s = SchemeSel;
else if (urg & 1 << i)
s = SchemeUrg;
else
s = SchemeNorm;
w = TEXTW(tags[i]);
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], invert);
drw_setscheme(drw, scheme[s]);
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], 0);
x += w;
}