about summary refs log tree commit diff stats
path: root/dwm.c
diff options
context:
space:
mode:
authorAnselm R Garbe <anselm@garbe.us>2011-04-15 08:12:20 +0000
committerAnselm R Garbe <anselm@garbe.us>2011-04-15 08:12:20 +0000
commitd24837f1adb40b3ecdb6d20e0a5102b1bf3774a3 (patch)
tree731e99781c1f03926eb09325385d0b4b7697efa5 /dwm.c
parent3c2d303c0e8efc9a08f2e70867794b003b886810 (diff)
downloaddwm-d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3.tar.gz
minor fix of the NetActiveWindow multi-monitor flaw, slight rearrangement
Diffstat (limited to 'dwm.c')
-rw-r--r--dwm.c107
1 files changed, 54 insertions, 53 deletions
diff --git a/dwm.c b/dwm.c
index a3d83fb..5cafe12 100644
--- a/dwm.c
+++ b/dwm.c
@@ -521,6 +521,46 @@ clearurgent(Client *c) {
 }
 
 void
+clientmessage(XEvent *e) {
+	XClientMessageEvent *cme = &e->xclient;
+	Client *c = wintoclient(cme->window);
+
+	if(!c)
+		return;
+	if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) {
+		if(cme->data.l[0]) {
+			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
+			                PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
+			c->oldstate = c->isfloating;
+			c->oldbw = c->bw;
+			c->bw = 0;
+			c->isfloating = True;
+			resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
+			XRaiseWindow(dpy, c->win);
+		}
+		else {
+			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
+			                PropModeReplace, (unsigned char*)0, 0);
+			c->isfloating = c->oldstate;
+			c->bw = c->oldbw;
+			c->x = c->oldx;
+			c->y = c->oldy;
+			c->w = c->oldw;
+			c->h = c->oldh;
+			resizeclient(c, c->x, c->y, c->w, c->h);
+			arrange(c->mon);
+		}
+	}
+	else if(cme->message_type == netatom[NetActiveWindow]) {
+		if(!ISVISIBLE(c)) {
+			c->mon->seltags ^= 1;                                   
+			c->mon->tagset[c->mon->seltags] = c->tags;   
+		}
+		pop(c);
+	}
+}
+
+void
 configure(Client *c) {
 	XConfigureEvent ce;
 
@@ -1212,14 +1252,12 @@ nexttiled(Client *c) {
 	return c;
 }
 
-Monitor *
-ptrtomon(int x, int y) {
-	Monitor *m;
-
-	for(m = mons; m; m = m->next)
-		if(INRECT(x, y, m->wx, m->wy, m->ww, m->wh))
-			return m;
-	return selmon;
+void
+pop(Client *c) {
+	detach(c);
+	attach(c);
+	focus(c);
+	arrange(c->mon);
 }
 
 void
@@ -1256,49 +1294,15 @@ propertynotify(XEvent *e) {
 	}
 }
 
-void
-clientmessage(XEvent *e) {
-	XClientMessageEvent *cme = &e->xclient;
-	Client *c = wintoclient(cme->window);
+Monitor *
+ptrtomon(int x, int y) {
+	Monitor *m;
 
-	if(!c)
-		return;
-	if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) {
-		if(cme->data.l[0]) {
-			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
-			                PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
-			c->oldstate = c->isfloating;
-			c->oldbw = c->bw;
-			c->bw = 0;
-			c->isfloating = True;
-			resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
-			XRaiseWindow(dpy, c->win);
-		}
-		else {
-			XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
-			                PropModeReplace, (unsigned char*)0, 0);
-			c->isfloating = c->oldstate;
-			c->bw = c->oldbw;
-			c->x = c->oldx;
-			c->y = c->oldy;
-			c->w = c->oldw;
-			c->h = c->oldh;
-			resizeclient(c, c->x, c->y, c->w, c->h);
-			arrange(c->mon);
-		}
-	}
-	else if(cme->message_type == netatom[NetActiveWindow]) {
-		if(!ISVISIBLE(c)) {
-			Arg a = { .ui = c->tags };
-			view(&a); 
-		}
-		detach(c);
-		attach(c);
-		focus(c);
-		arrange(c->mon);
-	}
+	for(m = mons; m; m = m->next)
+		if(INRECT(x, y, m->wx, m->wy, m->ww, m->wh))
+			return m;
+	return selmon;
 }
-
 void
 quit(const Arg *arg) {
 	running = False;
@@ -2043,10 +2047,7 @@ zoom(const Arg *arg) {
 	if(c == nexttiled(selmon->clients))
 		if(!c || !(c = nexttiled(c->next)))
 			return;
-	detach(c);
-	attach(c);
-	focus(c);
-	arrange(c->mon);
+	pop(c);
 }
 
 int