all repos — dwm @ d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3

my dwm build

minor fix of the NetActiveWindow multi-monitor flaw, slight rearrangement
Anselm R Garbe anselm@garbe.us
Fri, 15 Apr 2011 08:12:20 +0000
commit

d24837f1adb40b3ecdb6d20e0a5102b1bf3774a3

parent

3c2d303c0e8efc9a08f2e70867794b003b886810

1 files changed, 54 insertions(+), 53 deletions(-)

jump to
M dwm.cdwm.c

@@ -521,6 +521,46 @@ XFree(wmh);

} 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 @@ for(; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);

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 @@ }

} } -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 @@ return;

if(c == nexttiled(selmon->clients)) if(!c || !(c = nexttiled(c->next))) return; - detach(c); - attach(c); - focus(c); - arrange(c->mon); + pop(c); } int