timplemented draw_client stuff - dwm - [fork] customized build of dwm, the dyna… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 83d23908d3438d7f1f62533a7c8d96fc1019df55 | |
parent a05beb6585713aeb661cf30c080e77fbfdb28867 | |
Author: Anselm R. Garbe <[email protected]> | |
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(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -37,10 +37,6 @@ update_name(Client *c) | |
} | |
} | |
XFree(name.value); | |
- if(c == stack) | |
- draw_bar(); | |
- else | |
- draw_client(c); | |
} | |
void | |
t@@ -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); | |
} | |
t@@ -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; | |
t@@ -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 */ | |
t@@ -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); | |
} | |
t@@ -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, … | |
e.type = ConfigureNotify; | |
e.event = c->win; | |
e.window = c->win; | |
t@@ -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); | |
} | |
diff --git a/event.c b/event.c | |
t@@ -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(); | |
} | |
} | |
diff --git a/wm.c b/wm.c | |
t@@ -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); | |
t@@ -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(); | |