diff options
author | Anselm R Garbe <anselm@garbe.us> | 2011-04-15 08:12:20 +0000 |
---|---|---|
committer | Anselm R Garbe <anselm@garbe.us> | 2011-04-15 08:12:20 +0000 |
commit | d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3 (patch) | |
tree | 731e99781c1f03926eb09325385d0b4b7697efa5 | |
parent | 3c2d303c0e8efc9a08f2e70867794b003b886810 (diff) | |
download | dwm-d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3.tar.gz dwm-d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3.tar.bz2 dwm-d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3.zip |
minor fix of the NetActiveWindow multi-monitor flaw, slight rearrangement
-rw-r--r-- | dwm.c | 107 |
1 files changed, 54 insertions, 53 deletions
@@ -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 |