Introduction
Introduction Statistics Contact Development Disclaimer Help
support urgency wm hints - tabbed - tab interface for application supporting Xe…
git clone git://git.suckless.org/tabbed
Log
Files
Refs
README
LICENSE
---
commit 5dd3d19ef9ae5f54c515b14713933a65aa809d7b
parent 030eda81cc622ad0c3efe2ab1f1a657ee82e45cb
Author: Markus Teich <[email protected]>
Date: Wed, 14 May 2014 01:34:44 +0200
support urgency wm hints
Signed-off-by: Christoph Lohmann <[email protected]>
Diffstat:
M config.def.h | 2 ++
M tabbed.c | 35 ++++++++++++++++++++++++++++-…
2 files changed, 34 insertions(+), 3 deletions(-)
---
diff --git a/config.def.h b/config.def.h
@@ -6,6 +6,8 @@ static const char* normbgcolor = "#222222";
static const char* normfgcolor = "#cccccc";
static const char* selbgcolor = "#555555";
static const char* selfgcolor = "#ffffff";
+static const char* urgbgcolor = "#111111";
+static const char* urgfgcolor = "#cc0000";
static const char before[] = "<";
static const char after[] = ">";
static const int tabwidth = 200;
diff --git a/tabbed.c b/tabbed.c
@@ -66,6 +66,7 @@ typedef struct {
int x, y, w, h;
unsigned long norm[ColLast];
unsigned long sel[ColLast];
+ unsigned long urg[ColLast];
Drawable drawable;
GC gc;
struct {
@@ -81,7 +82,7 @@ typedef struct Client {
char name[256];
Window win;
int tabx;
- Bool mapped;
+ Bool urgent;
Bool closed;
} Client;
@@ -351,7 +352,7 @@ drawbar(void) {
dc.w = width - (n - 1) * tabwidth;
}
} else {
- col = dc.norm;
+ col = clients[c]->urgent ? dc.urg : dc.norm;
}
drawtext(clients[c]->name, col);
dc.x += dc.w;
@@ -427,6 +428,7 @@ void
focus(int c) {
char buf[BUFSIZ] = "tabbed-"VERSION" ::";
size_t i, n;
+ XWMHints* wmh;
/* If c, sel and clients are -1, raise tabbed-win itself */
if(nclients == 0) {
@@ -454,6 +456,12 @@ focus(int c) {
if(sel != c) {
lastsel = sel;
sel = c;
+ if(clients[c]->urgent && (wmh = XGetWMHints(dpy, clients[c]->w…
+ wmh->flags &= ~XUrgencyHint;
+ XSetWMHints(dpy, clients[c]->win, wmh);
+ clients[c]->urgent = False;
+ XFree(wmh);
+ }
}
drawbar();
@@ -797,6 +805,7 @@ movetab(const Arg *arg) {
void
propertynotify(const XEvent *e) {
const XPropertyEvent *ev = &e->xproperty;
+ XWMHints *wmh;
int c;
char* selection = NULL;
Arg arg;
@@ -811,6 +820,21 @@ propertynotify(const XEvent *e) {
arg.v = cmd;
spawn(&arg);
}
+ } else if(ev->state == PropertyNewValue && ev->atom == XA_WM_HINTS
+ && (c = getclient(ev->window)) > -1
+ && (wmh = XGetWMHints(dpy, clients[c]->win))) {
+ if(wmh->flags & XUrgencyHint) {
+ if(c != sel) {
+ clients[c]->urgent = True;
+ drawbar();
+ }
+ XFree(wmh);
+ if((wmh = XGetWMHints(dpy, win))) {
+ wmh->flags |= XUrgencyHint;
+ XSetWMHints(dpy, win, wmh);
+ }
+ }
+ XFree(wmh);
} else if(ev->state != PropertyDelete && ev->atom == XA_WM_NAME
&& (c = getclient(ev->window)) > -1) {
updatetitle(c);
@@ -910,6 +934,7 @@ setcmd(int argc, char *argv[], int replace) {
void
setup(void) {
int bitm, tx, ty, tw, th, dh, dw, isfixed;
+ XWMHints *wmh;
XClassHint class_hint;
XSizeHints *size_hint;
@@ -969,6 +994,8 @@ setup(void) {
dc.norm[ColFG] = getcolor(normfgcolor);
dc.sel[ColBG] = getcolor(selbgcolor);
dc.sel[ColFG] = getcolor(selfgcolor);
+ dc.urg[ColBG] = getcolor(urgbgcolor);
+ dc.urg[ColFG] = getcolor(urgfgcolor);
dc.drawable = XCreatePixmap(dpy, root, ww, wh,
DefaultDepth(dpy, screen));
dc.gc = XCreateGC(dpy, root, 0, 0);
@@ -997,8 +1024,10 @@ setup(void) {
size_hint->min_width = size_hint->max_width = ww;
size_hint->min_height = size_hint->max_height = wh;
}
- XSetWMProperties(dpy, win, NULL, NULL, NULL, 0, size_hint, NULL, NULL);
+ wmh = XAllocWMHints();
+ XSetWMProperties(dpy, win, NULL, NULL, NULL, 0, size_hint, wmh, NULL);
XFree(size_hint);
+ XFree(wmh);
XSetWMProtocols(dpy, win, &wmatom[WMDelete], 1);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.