mark broken clients as broken
authoranselm@x200s.config
Sun, 12 Jul 2009 22:49:06 +0100
changeset 1460 606761ddf6d6
parent 1459 a5eecc6d674f
child 1461 33f714d7d789
mark broken clients as broken
dwm.c
--- a/dwm.c	Sun Jul 12 22:34:29 2009 +0100
+++ b/dwm.c	Sun Jul 12 22:49:06 2009 +0100
@@ -237,6 +237,7 @@
 static void zoom(const Arg *arg);
 
 /* variables */
+static const char broken[] = "broken";
 static char stext[256], ntext[8];
 static int screen;
 static int sw, sh;           /* X display screen geometry width, height */
@@ -275,6 +276,7 @@
 /* function implementations */
 void
 applyrules(Client *c) {
+	const char *class, *instance;
 	unsigned int i;
 	const Rule *r;
 	Monitor *m;
@@ -283,11 +285,13 @@
 	/* rule matching */
 	c->isfloating = c->tags = 0;
 	if(XGetClassHint(dpy, c->win, &ch)) {
+		class = ch.res_class ? ch.res_class : broken;
+		instance = ch.res_name ? ch.res_name : broken;
 		for(i = 0; i < LENGTH(rules); i++) {
 			r = &rules[i];
 			if((!r->title || strstr(c->name, r->title))
-			&& (!r->class || (ch.res_class && strstr(ch.res_class, r->class)))
-			&& (!r->instance || (ch.res_name && strstr(ch.res_name, r->instance))))
+			&& (!r->class || strstr(class, r->class))
+			&& (!r->instance || strstr(instance, r->instance)))
 			{
 				c->isfloating = r->isfloating;
 				c->tags |= r->tags;
@@ -1819,6 +1823,8 @@
 updatetitle(Client *c) {
 	if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
 		gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
+	if(c->name[0] == '\0') /* hack to mark broken clients */
+		strcpy(c->name, broken);
 }
 
 void