JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
yet another fix of copyright compactisition
[dwm.git] / client.c
index 1844713..b7fde1a 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1,6 +1,6 @@
-/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com>
- * See LICENSE file for license details.
- */
+/* © 2006-2007 Anselm R. Garbe <garbeam at gmail dot com>
+ * © 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>
+ * See LICENSE file for license details. */
 #include "dwm.h"
 #include <stdlib.h>
 #include <string.h>
@@ -173,8 +173,9 @@ killclient(const char *arg) {
 
 void
 manage(Window w, XWindowAttributes *wa) {
-       Client *c, *t;
+       Client *c, *t = NULL;
        Window trans;
+       Status rettrans;
        XWindowChanges wc;
 
        c = emallocz(sizeof(Client));
@@ -203,17 +204,17 @@ manage(Window w, XWindowAttributes *wa) {
        updatesizehints(c);
        XSelectInput(dpy, w,
                StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
-       XGetTransientForHint(dpy, w, &trans);
        grabbuttons(c, False);
        wc.border_width = c->border;
        XConfigureWindow(dpy, w, CWBorderWidth, &wc);
        XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
        configure(c); /* propagates border_width, if size doesn't change */
        updatetitle(c);
-       for(t = clients; t && t->win != trans; t = t->next);
+       if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
+               for(t = clients; t && t->win != trans; t = t->next);
        settags(c, t);
        if(!c->isfloating)
-               c->isfloating = (t != NULL) || c->isfixed;
+               c->isfloating = (rettrans == Success) || c->isfixed;
        attach(c);
        attachstack(c);
        c->isbanned = True;
@@ -233,7 +234,7 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {
        if(w <= 0 || h <= 0)
                return;
        if(sizehints) {
-               if(c->minay > 0 && c->maxay && (h - c->baseh) > 0) {
+               if(c->minay > 0 && c->maxay > 0 && (h - c->baseh) > 0) {
                        dx = (float)(w - c->basew);
                        dy = (float)(h - c->baseh);
                        min = (float)(c->minax) / (float)(c->minay);
@@ -267,6 +268,8 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {
                if(c->inch)
                        h -= (h - c->baseh) % c->inch;
        }
+       if(w <= 0 || h <= 0)
+               return;
        if(w == sw && h == sh)
                c->border = 0;
        else