implemented draw_client stuff
Anselm R. Garbe garbeam@wmii.de
Tue, 11 Jul 2006 23:18:30 +0200
M
client.c
→
client.c
@@ -37,10 +37,6 @@ XFreeStringList(list);
} } XFree(name.value); - if(c == stack) - draw_bar(); - else - draw_client(c); } void@@ -51,27 +47,52 @@ long msize;
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 @@ update_size(c);
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 @@ c->title = XCreateWindow(dpy, root, c->x, c->y, c->w, barrect.height,
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 @@ *l = c;
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 @@ {
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 @@
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); }
M
wm.c
→
wm.c
@@ -245,10 +245,6 @@ cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
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 @@ CopyFromParent, DefaultVisual(dpy, screen),
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();