X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=dwm.c;h=852f7ac946dc1e39bee8489f03d37675d19e6620;hb=146ff227fe0d231bcfc59268364461ab8850c5fe;hp=37e833e3cafa9a1bf59e588061c83825c1c8e8d1;hpb=0c71b16b9282562ee59f73f215c6ba827df25927;p=dwm.git diff --git a/dwm.c b/dwm.c index 37e833e..852f7ac 100644 --- a/dwm.c +++ b/dwm.c @@ -212,6 +212,7 @@ char stext[256], buf[256]; int screen, sx, sy, sw, sh; int (*xerrorxlib)(Display *, XErrorEvent *); int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh; +double mfact; unsigned int numlockmask = 0; void (*handler[LASTEvent]) (XEvent *) = { [ButtonPress] = buttonpress, @@ -260,9 +261,9 @@ applyrules(Client *c) { XGetClassHint(dpy, c->win, &ch); for(i = 0; i < LENGTH(rules); i++) { r = &rules[i]; - if((r->title && strstr(c->name, r->title)) - || (ch.res_class && r->class && strstr(ch.res_class, r->class)) - || (ch.res_name && r->instance && strstr(ch.res_name, r->instance))) + if((!r->title || strstr(c->name, r->title)) + && (!r->class || (ch.res_class && strstr(ch.res_class, r->class))) + && (!r->instance || (ch.res_name && strstr(ch.res_name, r->instance)))) { { c->isfloating = r->isfloating; if(r->tag) { @@ -805,39 +806,20 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) { void grabbuttons(Client *c, Bool focused) { - XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + int i, j; + unsigned int buttons[] = { Button1, Button2, Button3 }; + unsigned int modifiers[] = { MODKEY, MODKEY|LockMask, MODKEY|numlockmask, + MODKEY|numlockmask|LockMask} ; - if(focused) { - XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY|LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY|numlockmask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY|numlockmask|LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - - XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY|LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY|numlockmask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY|numlockmask|LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - - XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY|LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY|numlockmask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY|numlockmask|LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - } + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + if(focused) + for(i = 0; i < LENGTH(buttons); i++) + for(j = 0; j < LENGTH(modifiers); j++) + XGrabButton(dpy, buttons[i], modifiers[j], c->win, False, + BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); else - XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); + XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, + BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); } void @@ -1086,7 +1068,7 @@ monocle(void) { Client *c; for(c = clients; c; c = c->next) - if(isvisible(c)) + if((lt->isfloating || !c->isfloating) && isvisible(c)) resize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw, RESIZEHINTS); } @@ -1196,9 +1178,9 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) { if(sizehints) { /* set minimum possible */ - if (w < 1) + if(w < 1) w = 1; - if (h < 1) + if(h < 1) h = 1; /* temporarily remove base dimensions */ @@ -1206,10 +1188,12 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) { h -= c->baseh; /* adjust for aspect limits */ - if (c->minay > 0 && c->maxay > 0 && c->minax > 0 && c->maxax > 0) { - if (w * c->maxay > h * c->maxax) + if(c->minax != c->maxax && c->minay != c->maxay + && c->minax > 0 && c->maxax > 0 && c->minay > 0 && c->maxay > 0) + { + if(w * c->maxay > h * c->maxax) w = h * c->maxax / c->maxay; - else if (w * c->minay < h * c->minax) + else if(w * c->minay < h * c->minax) h = w * c->minay / c->minax; } @@ -1465,20 +1449,19 @@ setlayout(const char *arg) { void setmfact(const char *arg) { - double delta; + double d; - if(!arg || lt->isfloating) + if(lt->isfloating) return; - delta = strtod(arg, NULL); - if(arg[0] == '-' || arg[0] == '+') { - if(mfact + delta < 0.1 || mfact + delta > 0.9) - return; - mfact += delta; - } + if(!arg) + mfact = MFACT; else { - if(delta < 0.1 || delta > 0.9) + d = strtod(arg, NULL); + if(arg[0] == '-' || arg[0] == '+') + d += mfact; + if(d < 0.1 || d > 0.9) return; - mfact = delta; + mfact = d; } setgeom(geom->symbol); } @@ -1499,6 +1482,7 @@ setup(void) { sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); bh = dc.font.height + 2; + mfact = MFACT; geom = &geoms[0]; geom->apply();