about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authoranselm@x200s.config <unknown>2009-07-12 22:49:06 +0100
committeranselm@x200s.config <unknown>2009-07-12 22:49:06 +0100
commit8dc9fcf1b95db927ce50a63c7e571fdb074529e8 (patch)
treea6b6ae0b0289d52e752bf275c1164f57cb83213f
parentfc21dd4b7e65bb511ac10f8bd8f469fe0f00a76e (diff)
downloaddwm-8dc9fcf1b95db927ce50a63c7e571fdb074529e8.tar.gz
mark broken clients as broken
-rw-r--r--dwm.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/dwm.c b/dwm.c
index bfeae15..553194d 100644
--- a/dwm.c
+++ b/dwm.c
@@ -237,6 +237,7 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee);
 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 @@ struct NumTags { char limitexceeded[sizeof(unsigned int) * 8 < LENGTH(tags) ? -1
 /* function implementations */
 void
 applyrules(Client *c) {
+	const char *class, *instance;
 	unsigned int i;
 	const Rule *r;
 	Monitor *m;
@@ -283,11 +285,13 @@ applyrules(Client *c) {
 	/* 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 @@ void
 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