# HG changeset patch # User Anselm R. Garbe # Date 1152636821 -7200 # Node ID 359b6e563b95bcc574f9f2824e7b9643dd739c41 # Parent 00d4d52b231fa90b86881d16d3d61a299e55b44b several changes, new stuff diff -r 00d4d52b231f -r 359b6e563b95 bar.c --- a/bar.c Tue Jul 11 18:19:01 2006 +0200 +++ b/bar.c Tue Jul 11 18:53:41 2006 +0200 @@ -5,22 +5,24 @@ #include "wm.h" -static const char *status[] = { - "sh", "-c", "echo -n `date` `uptime | sed 's/.*://; s/,//g'`" - " `acpi | awk '{print $4}' | sed 's/,//'`", 0 \ -}; - void draw_bar() { - static char buf[1024]; - - buf[0] = 0; - pipe_spawn(buf, sizeof(buf), dpy, (char **)status); - brush.rect = barrect; brush.rect.x = brush.rect.y = 0; - draw(dpy, &brush, False, buf); + draw(dpy, &brush, False, NULL); + + if(stack) { + brush.rect.width = textwidth(&brush.font, stack->name) + labelheight(&brush.font); + swap((void **)&brush.fg, (void **)&brush.bg); + draw(dpy, &brush, False, stack->name); + swap((void **)&brush.fg, (void **)&brush.bg); + brush.rect.x += brush.rect.width; + } + + brush.rect.width = textwidth(&brush.font, statustext) + labelheight(&brush.font); + brush.rect.x = barrect.x + barrect.width - brush.rect.width; + draw(dpy, &brush, False, statustext); XCopyArea(dpy, brush.drawable, barwin, brush.gc, 0, 0, barrect.width, barrect.height, 0, 0); diff -r 00d4d52b231f -r 359b6e563b95 client.c --- a/client.c Tue Jul 11 18:19:01 2006 +0200 +++ b/client.c Tue Jul 11 18:53:41 2006 +0200 @@ -35,6 +35,10 @@ } } XFree(name.value); + if(c == stack) + draw_bar(); + else + draw_client(c); } void @@ -66,6 +70,7 @@ c->r[RFloat].height = wa->height; c->border = wa->border_width; XSetWindowBorderWidth(dpy, c->win, 0); + XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | EnterWindowMask); XGetTransientForHint(dpy, c->win, &c->trans); if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags) c->size.flags = PSize; diff -r 00d4d52b231f -r 359b6e563b95 config.h --- a/config.h Tue Jul 11 18:19:01 2006 +0200 +++ b/config.h Tue Jul 11 18:53:41 2006 +0200 @@ -7,4 +7,4 @@ #define BGCOLOR "#000000" #define FGCOLOR "#ffaa00" #define BORDERCOLOR "#000000" -#define STATUSDELAY 1 /* milliseconds */ +#define STATUSDELAY 10 /* milliseconds */ diff -r 00d4d52b231f -r 359b6e563b95 event.c --- a/event.c Tue Jul 11 18:19:01 2006 +0200 +++ b/event.c Tue Jul 11 18:53:41 2006 +0200 @@ -187,7 +187,6 @@ } if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) { update_name(c); - /*draw_frame(c->sel);*/ } } } diff -r 00d4d52b231f -r 359b6e563b95 util.c --- a/util.c Tue Jul 11 18:19:01 2006 +0200 +++ b/util.c Tue Jul 11 18:53:41 2006 +0200 @@ -134,7 +134,7 @@ n += l; } close(pfd[0]); - buf[n - 1] = 0; + buf[n < len ? n : len - 1] = 0; } wait(0); } diff -r 00d4d52b231f -r 359b6e563b95 wm.c --- a/wm.c Tue Jul 11 18:19:01 2006 +0200 +++ b/wm.c Tue Jul 11 18:53:41 2006 +0200 @@ -27,7 +27,7 @@ Bool running = True; Bool sel_screen; -char *bartext, tag[256]; +char statustext[1024], tag[256]; int screen; Brush brush = {0}; @@ -35,9 +35,15 @@ Client *stack = NULL; static Bool other_wm_running; -static char version[] = "gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; +static const char version[] = "gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; static int (*x_error_handler) (Display *, XErrorEvent *); +static const char *status[] = { + "sh", "-c", "echo -n `date '+%Y/%m/%d %H:%M'`" + " `uptime | sed 's/.*://; s/,//g'`" + " `acpi | awk '{print $4}' | sed 's/,//'`", 0 +}; + static void usage() { @@ -258,9 +264,9 @@ barrect.width, barrect.height, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); - bartext = NULL; XDefineCursor(dpy, barwin, cursor[CurNormal]); XMapRaised(dpy, barwin); + pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status); draw_bar(); wa.event_mask = SubstructureRedirectMask | EnterWindowMask \ @@ -282,8 +288,10 @@ t = timeout; if(select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &t) > 0) continue; - else if(errno != EINTR) + else if(errno != EINTR) { + pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status); draw_bar(); + } } cleanup(); diff -r 00d4d52b231f -r 359b6e563b95 wm.h --- a/wm.h Tue Jul 11 18:19:01 2006 +0200 +++ b/wm.h Tue Jul 11 18:53:41 2006 +0200 @@ -55,7 +55,7 @@ extern void (*handler[LASTEvent]) (XEvent *); extern int screen; -extern char *bartext, tag[256]; +extern char statustext[1024], tag[256]; extern Brush brush; extern Client *clients, *stack; @@ -74,6 +74,7 @@ extern Client *getclient(Window w); extern void focus(Client *c); extern void update_name(Client *c); +extern void draw_client(Client *c); /* event.c */ extern unsigned int flush_events(long even_mask);