X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=dwm.c;h=ca57f8e8b9e40c638c03c3b780bc663e75677b0a;hb=63725004f57de0ab6b6c49f0a578003834537366;hp=726e7975b7bd1dba93a31401af189631c64dac93;hpb=fe2775a15ba2d4900788c57194da2bad3d19cfaf;p=dwm.git diff --git a/dwm.c b/dwm.c index 726e797..ca57f8e 100644 --- a/dwm.c +++ b/dwm.c @@ -64,7 +64,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; @@ -334,23 +334,23 @@ buttonpress(XEvent *e) { if(CLEANMASK(ev->state) != MODKEY) return; if(ev->button == Button1) { - if(!isarrange(floating) && !c->isfloating) - togglefloating(NULL); - else + if(isarrange(floating) || c->isfloating) restack(); + else + togglefloating(NULL); movemouse(c); } else if(ev->button == Button2) { - if(isarrange(tile) && !c->isfixed && c->isfloating) + if(ISTILE && !c->isfixed && c->isfloating) togglefloating(NULL); else zoom(NULL); } else if(ev->button == Button3 && !c->isfixed) { - if(!isarrange(floating) && !c->isfloating) - togglefloating(NULL); - else + if(isarrange(floating) || c->isfloating) restack(); + else + togglefloating(NULL); resizemouse(c); } } @@ -444,7 +444,7 @@ void configurenotify(XEvent *e) { XConfigureEvent *ev = &e->xconfigure; - if (ev->window == root && (ev->width != sw || ev->height != sh)) { + if(ev->window == root && (ev->width != sw || ev->height != sh)) { sw = ev->width; sh = ev->height; XFreePixmap(dpy, dc.drawable); @@ -883,7 +883,7 @@ initfont(const char *fontstr) { XFreeFont(dpy, dc.font.xfont); dc.font.xfont = NULL; if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr)) - || !(dc.font.xfont = XLoadQueryFont(dpy, "fixed"))) + && !(dc.font.xfont = XLoadQueryFont(dpy, "fixed"))) eprint("error, cannot load font: '%s'\n", fontstr); dc.font.ascent = dc.font.xfont->ascent; dc.font.descent = dc.font.xfont->descent; @@ -1398,16 +1398,16 @@ void setmwfact(const char *arg) { double delta; - if(!isarrange(tile)) + if(!ISTILE) return; /* arg handling, manipulate mwfact */ if(arg == NULL) mwfact = MWFACT; else if(1 == sscanf(arg, "%lf", &delta)) { - if(arg[0] != '+' && arg[0] != '-') - mwfact = delta; - else + if(arg[0] == '+' || arg[0] == '-') mwfact += delta; + else + mwfact = delta; if(mwfact < 0.1) mwfact = 0.1; else if(mwfact > 0.9) @@ -1418,6 +1418,7 @@ setmwfact(const char *arg) { void setup(void) { + int d; unsigned int i, j, mask; Window w; XModifierKeymap *modmap; @@ -1507,7 +1508,7 @@ setup(void) { XSetFont(dpy, dc.gc, dc.font.xfont->fid); /* multihead support */ - selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); + selscreen = XQueryPointer(dpy, root, &w, &w, &d, &d, &d, &d, &mask); } void @@ -1627,17 +1628,26 @@ void togglemax(const char *arg) { XEvent ev; - if(!sel || (!isarrange(floating) && !sel->isfloating) || sel->isfixed) + if(!sel || sel->isfixed) return; if((sel->ismax = !sel->ismax)) { + if(isarrange(floating) || sel->isfloating) + sel->wasfloating = True; + else { + togglefloating(NULL); + sel->wasfloating = False; + } 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); + } drawbar(); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } @@ -1664,7 +1674,7 @@ toggleview(const char *arg) { seltags[i] = !seltags[i]; for(j = 0; j < ntags && !seltags[j]; j++); if(j == ntags) - seltags[i] = True; /* cannot toggle last view */ + seltags[i] = True; /* at least one tag must be viewed */ arrange(); } @@ -1840,7 +1850,7 @@ void zoom(const char *arg) { Client *c; - if(!sel || !isarrange(tile) || sel->isfloating) + if(!sel || !ISTILE || sel->isfloating) return; if((c = sel) == nexttiled(clients)) if(!(c = nexttiled(c->next)))