URI: 
       implemented draw_client stuff - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 83d23908d3438d7f1f62533a7c8d96fc1019df55
   DIR parent a05beb6585713aeb661cf30c080e77fbfdb28867
  HTML Author: Anselm R. Garbe <garbeam@wmii.de>
       Date:   Tue, 11 Jul 2006 23:18:30 +0200
       
       implemented draw_client stuff
       
       Diffstat:
         M client.c                            |      64 +++++++++++++++++++++++--------
         M event.c                             |       5 ++++-
         M wm.c                                |       9 +++++----
       
       3 files changed, 58 insertions(+), 20 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       @@ -37,10 +37,6 @@ update_name(Client *c)
                        }
                }
                XFree(name.value);
       -        if(c == stack)
       -                draw_bar();
       -        else
       -                draw_client(c);
        }
        
        void
       @@ -51,27 +47,52 @@ update_size(Client *c)
                if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags)
                        size.flags = PSize;
                c->flags = size.flags;
       -        c->basew = size.base_width;
       -        c->baseh = size.base_height;
       -        c->incw = size.width_inc;
       -        c->inch = size.height_inc;
       -        c->maxw = size.max_width;
       -        c->maxh = size.max_height;
       -        c->minw = size.min_width;
       -        c->minh = size.min_height;
       +        if(c->flags & PBaseSize) {
       +                c->basew = size.base_width;
       +                c->baseh = size.base_height;
       +        }
       +        else
       +                c->basew = c->baseh = 0;
       +        if(c->flags & PResizeInc) {
       +                c->incw = size.width_inc;
       +                c->inch = size.height_inc;
       +        }
       +        else
       +                c->incw = c->inch = 0;
       +        if(c->flags & PMaxSize) {
       +                c->maxw = size.max_width;
       +                c->maxh = size.max_height;
       +        }
       +        else
       +                c->maxw = c->maxh = 0;
       +        if(c->flags & PMinSize) {
       +                c->minw = size.min_width;
       +                c->minh = size.min_height;
       +        }
       +        else
       +                c->minw = c->minh = 0;
        }
        
        void
        focus(Client *c)
        {
       -        Client **l;
       +        Client **l, *old;
       +
       +        old = stack;
                for(l=&stack; *l && *l != c; l=&(*l)->snext);
                eassert(*l == c);
                *l = c->snext;
                c->snext = stack;
                stack = c;
                XRaiseWindow(dpy, c->win);
       +        XRaiseWindow(dpy, c->title);
                XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
       +        if(old && old != c) {
       +                XMapWindow(dpy, old->title);
       +                draw_client(old);
       +        }
       +        XUnmapWindow(dpy, c->title);
       +        draw_bar();
                XFlush(dpy);
        }
        
       @@ -91,7 +112,6 @@ manage(Window w, XWindowAttributes *wa)
                XSetWindowBorderWidth(dpy, c->win, 1);
                XSelectInput(dpy, c->win, CLIENT_MASK);
                XGetTransientForHint(dpy, c->win, &c->trans);
       -        update_name(c);
                twa.override_redirect = 1;
                twa.background_pixmap = ParentRelative;
                twa.event_mask = ExposureMask;
       @@ -100,6 +120,7 @@ manage(Window w, XWindowAttributes *wa)
                                0, DefaultDepth(dpy, screen), CopyFromParent,
                                DefaultVisual(dpy, screen),
                                CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
       +        update_name(c);
        
                for(l=&clients; *l; l=&(*l)->next);
                c->next = *l; /* *l == nil */
       @@ -107,12 +128,14 @@ manage(Window w, XWindowAttributes *wa)
                c->snext = stack;
                stack = c;
                XMapWindow(dpy, c->win);
       +        XMapWindow(dpy, c->title);
                XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
                                GrabModeAsync, GrabModeSync, None, None);
                XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
                                GrabModeAsync, GrabModeSync, None, None);
                XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,
                                GrabModeAsync, GrabModeSync, None, None);
       +        resize(c);
                focus(c);
        }
        
       @@ -122,6 +145,7 @@ resize(Client *c)
                XConfigureEvent e;
        
                XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
       +        XMoveResizeWindow(dpy, c->title, c->x + c->w / 3, c->y, 2 * c->w / 3, barrect.height);
                e.type = ConfigureNotify;
                e.event = c->win;
                e.window = c->win;
       @@ -186,7 +210,17 @@ getclient(Window w)
        void
        draw_client(Client *c)
        {
       -        
       +        if(!c)
       +                return;
       +        if(c == stack)
       +                draw_bar();
        
       +        brush.rect.x = brush.rect.y = 0;
       +        brush.rect.width = 2 * c->w / 3;
       +        brush.rect.height = barrect.height;
        
       +        draw(dpy, &brush, True, c->name);
       +        XCopyArea(dpy, brush.drawable, c->title, brush.gc, 0, 0,
       +                        brush.rect.width, brush.rect.height, 0, 0);
       +        XFlush(dpy);
        }
   DIR diff --git a/event.c b/event.c
       @@ -143,9 +143,12 @@ static void
        expose(XEvent *e)
        {
                XExposeEvent *ev = &e->xexpose;
       +        Client *c;
        
                if(ev->count == 0) {
       -                if(ev->window == barwin)
       +                if((c = getclient(ev->window)))
       +                        draw_client(c);
       +                else if(ev->window == barwin)
                                draw_bar();
                }
        }
   DIR diff --git a/wm.c b/wm.c
       @@ -245,10 +245,6 @@ main(int argc, char *argv[])
        
                update_keys();
        
       -        brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height,
       -                        DefaultDepth(dpy, screen));
       -        brush.gc = XCreateGC(dpy, root, 0, 0);
       -
                /* style */
                loadcolors(dpy, screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR);
                loadfont(dpy, &brush.font, FONT);
       @@ -266,6 +262,11 @@ main(int argc, char *argv[])
                                CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
                XDefineCursor(dpy, barwin, cursor[CurNormal]);
                XMapRaised(dpy, barwin);
       +
       +        brush.drawable = XCreatePixmap(dpy, root, rect.width, barrect.height,
       +                        DefaultDepth(dpy, screen));
       +        brush.gc = XCreateGC(dpy, root, 0, 0);
       +
                pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
                draw_bar();