|
|
@ -520,6 +520,46 @@ clearurgent(Client *c) { |
|
|
|
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 @@ 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 |
|
|
|