dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3
parent 3c2d303c0e8efc9a08f2e70867794b003b886810
Author: Anselm R Garbe <anselm@garbe.us>
Date:   Fri, 15 Apr 2011 08:12:20 +0000

minor fix of the NetActiveWindow multi-monitor flaw, slight rearrangement
Diffstat:
Mdwm.c | 107++++++++++++++++++++++++++++++++++++++++---------------------------------------
1 file changed, 54 insertions(+), 53 deletions(-)
diff --git 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