diff --git a/dwm.h b/dwm.h index 999f027..3b10067 100644 --- a/dwm.h +++ b/dwm.h @@ -50,7 +50,7 @@ struct Client { int minax, maxax, minay, maxay; long flags; unsigned int border, oldborder; - Bool isbanned, isfixed, ismax, isfloating; + Bool isbanned, isfixed, ismax, isfloating, wasfloating; Bool *tags; Client *next; Client *prev; diff --git a/layout.c b/layout.c index f8c92ee..2e335e1 100644 --- a/layout.c +++ b/layout.c @@ -224,17 +224,26 @@ void togglemax(const char *arg) { XEvent ev; - if(!sel || (lt->arrange != floating && !sel->isfloating) || sel->isfixed) + if(!sel || sel->isfixed) return; if((sel->ismax = !sel->ismax)) { + if (lt->arrange != floating && !sel->isfloating) { + togglefloating(NULL); + sel->wasfloating = False; + } + else + sel->wasfloating = True; sel->rx = sel->x; sel->ry = sel->y; sel->rw = sel->w; sel->rh = sel->h; resize(sel, wax, way, waw - 2 * sel->border, wah - 2 * sel->border, True); } - else + else { resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True); + if (!sel->wasfloating) + togglefloating(NULL); + } drawstatus(); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); }