JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
several changes, new stuff
authorAnselm R. Garbe <garbeam@wmii.de>
Tue, 11 Jul 2006 16:53:41 +0000 (18:53 +0200)
committerAnselm R. Garbe <garbeam@wmii.de>
Tue, 11 Jul 2006 16:53:41 +0000 (18:53 +0200)
bar.c
client.c
config.h
event.c
util.c
wm.c
wm.h

diff --git a/bar.c b/bar.c
index 17db8cd..f3a11b8 100644 (file)
--- a/bar.c
+++ b/bar.c
@@ -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);
index f87fb80..9407f0a 100644 (file)
--- a/client.c
+++ b/client.c
@@ -35,6 +35,10 @@ update_name(Client *c)
                }
        }
        XFree(name.value);
+       if(c == stack)
+               draw_bar();
+       else
+               draw_client(c);
 }
 
 void
@@ -66,6 +70,7 @@ manage(Window w, XWindowAttributes *wa)
        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;
index ce9e7ab..a8e3449 100644 (file)
--- a/config.h
+++ b/config.h
@@ -7,4 +7,4 @@
 #define BGCOLOR                "#000000"
 #define FGCOLOR                "#ffaa00"
 #define BORDERCOLOR    "#000000"
-#define STATUSDELAY 1 /* milliseconds */
+#define STATUSDELAY    10 /* milliseconds */
diff --git a/event.c b/event.c
index ccab9d1..344a0cc 100644 (file)
--- a/event.c
+++ b/event.c
@@ -187,7 +187,6 @@ propertynotify(XEvent *e)
                }
                if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {
                        update_name(c);
-                       /*draw_frame(c->sel);*/
                }
        }
 }
diff --git a/util.c b/util.c
index 76ba5ab..9da8f52 100644 (file)
--- a/util.c
+++ b/util.c
@@ -134,7 +134,7 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[])
                        n += l;
                }
                close(pfd[0]);
-               buf[n - 1] = 0;
+               buf[n < len ? n : len - 1] = 0;
        }
        wait(0);
 }
diff --git a/wm.c b/wm.c
index f247372..837be3c 100644 (file)
--- a/wm.c
+++ b/wm.c
@@ -27,7 +27,7 @@ XRectangle rect, barrect;
 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 *clients = NULL;
 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 @@ main(int argc, char *argv[])
                        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 @@ main(int argc, char *argv[])
                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 --git a/wm.h b/wm.h
index 24662fa..055ef62 100644 (file)
--- a/wm.h
+++ b/wm.h
@@ -55,7 +55,7 @@ extern Bool running, sel_screen, grid;
 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 void unmanage(Client *c);
 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);