JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
apply resize hints in floating layout
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index db0fdfb..d274b50 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -289,31 +289,31 @@ applyrules(Client *c) {
        unsigned int i;
        const Rule *r;
        Monitor *m;
-       XClassHint ch = { 0 };
+       XClassHint ch = { NULL, NULL };
 
        /* rule matching */
        c->isfloating = c->tags = 0;
-       if(XGetClassHint(dpy, c->win, &ch)) {
-               class = ch.res_class ? ch.res_class : broken;
-               instance = ch.res_name ? ch.res_name : broken;
-               for(i = 0; i < LENGTH(rules); i++) {
-                       r = &rules[i];
-                       if((!r->title || strstr(c->name, r->title))
-                       && (!r->class || strstr(class, r->class))
-                       && (!r->instance || strstr(instance, r->instance)))
-                       {
-                               c->isfloating = r->isfloating;
-                               c->tags |= r->tags;
-                               for(m = mons; m && m->num != r->monitor; m = m->next);
-                               if(m)
-                                       c->mon = m;
-                       }
+       XGetClassHint(dpy, c->win, &ch);
+       class    = ch.res_class ? ch.res_class : broken;
+       instance = ch.res_name  ? ch.res_name  : broken;
+
+       for(i = 0; i < LENGTH(rules); i++) {
+               r = &rules[i];
+               if((!r->title || strstr(c->name, r->title))
+               && (!r->class || strstr(class, r->class))
+               && (!r->instance || strstr(instance, r->instance)))
+               {
+                       c->isfloating = r->isfloating;
+                       c->tags |= r->tags;
+                       for(m = mons; m && m->num != r->monitor; m = m->next);
+                       if(m)
+                               c->mon = m;
                }
-               if(ch.res_class)
-                       XFree(ch.res_class);
-               if(ch.res_name)
-                       XFree(ch.res_name);
        }
+       if(ch.res_class)
+               XFree(ch.res_class);
+       if(ch.res_name)
+               XFree(ch.res_name);
        c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
 }
 
@@ -349,7 +349,7 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) {
                *h = bh;
        if(*w < bh)
                *w = bh;
-       if(resizehints || c->isfloating) {
+       if(resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) {
                /* see last two sentences in ICCCM 4.1.2.3 */
                baseismin = c->basew == c->minw && c->baseh == c->minh;
                if(!baseismin) { /* temporarily remove base dimensions */
@@ -1597,7 +1597,7 @@ showhide(Client *c) {
        }
        else { /* hide clients bottom up */
                showhide(c->snext);
-               XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+               XMoveWindow(dpy, c->win, c->w * -2, c->y);
        }
 }
 
@@ -1761,8 +1761,12 @@ unmapnotify(XEvent *e) {
        Client *c;
        XUnmapEvent *ev = &e->xunmap;
 
-       if((c = wintoclient(ev->window)))
-               unmanage(c, False);
+       if((c = wintoclient(ev->window))) {
+               if(ev->send_event)
+                       setclientstate(c, WithdrawnState);
+               else
+                       unmanage(c, False);
+       }
 }
 
 void