JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
separated layout-specific stuff into separate .h and .c files which are included...
[dwm.git] / client.c
index 06bc9d8..d4dfe6e 100644 (file)
--- a/client.c
+++ b/client.c
@@ -97,6 +97,16 @@ attach(Client *c) {
 }
 
 void
+ban(Client *c) {
+       if(c->isbanned)
+               return;
+       XUnmapWindow(dpy, c->win);
+       setclientstate(c, IconicState);
+       c->isbanned = True;
+       c->unmapped++;
+}
+
+void
 configure(Client *c) {
        XConfigureEvent ce;
 
@@ -127,7 +137,7 @@ detach(Client *c) {
 
 void
 focus(Client *c) {
-       if((!c && selscreen)|| (c && !isvisible(c)))
+       if((!c && selscreen) || (c && !isvisible(c)))
                for(c = stack; c && !isvisible(c); c = c->snext);
        if(sel && sel != c) {
                grabbuttons(sel, False);
@@ -216,9 +226,9 @@ manage(Window w, XWindowAttributes *wa) {
                c->isfloating = (rettrans == Success) || c->isfixed;
        attach(c);
        attachstack(c);
-       ban(c);
-       XMapWindow(dpy, w);
-       setclientstate(c, NormalState);
+       XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); /* some windows require this */
+       setclientstate(c, IconicState);
+       c->isbanned = True;
        focus(c);
        lt->arrange();
 }
@@ -299,6 +309,38 @@ togglefloating(const char *arg) {
 }
 
 void
+unban(Client *c) {
+       if(!c->isbanned)
+               return;
+       XMapWindow(dpy, c->win);
+       setclientstate(c, NormalState);
+       c->isbanned = False;
+}
+
+void
+unmanage(Client *c) {
+       XWindowChanges wc;
+
+       wc.border_width = c->oldborder;
+       /* The server grab construct avoids race conditions. */
+       XGrabServer(dpy);
+       XSetErrorHandler(xerrordummy);
+       XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
+       detach(c);
+       detachstack(c);
+       if(sel == c)
+               focus(NULL);
+       XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
+       setclientstate(c, WithdrawnState);
+       free(c->tags);
+       free(c);
+       XSync(dpy, False);
+       XSetErrorHandler(xerror);
+       XUngrabServer(dpy);
+       lt->arrange();
+}
+
+void
 updatesizehints(Client *c) {
        long msize;
        XSizeHints size;
@@ -376,26 +418,3 @@ updatetitle(Client *c) {
        c->name[sizeof c->name - 1] = '\0';
        XFree(name.value);
 }
-
-void
-unmanage(Client *c) {
-       XWindowChanges wc;
-
-       wc.border_width = c->oldborder;
-       /* The server grab construct avoids race conditions. */
-       XGrabServer(dpy);
-       XSetErrorHandler(xerrordummy);
-       XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
-       detach(c);
-       detachstack(c);
-       if(sel == c)
-               focus(NULL);
-       XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
-       setclientstate(c, WithdrawnState);
-       free(c->tags);
-       free(c);
-       XSync(dpy, False);
-       XSetErrorHandler(xerror);
-       XUngrabServer(dpy);
-       lt->arrange();
-}