about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--bar.c24
-rw-r--r--client.c5
-rw-r--r--config.h2
-rw-r--r--event.c1
-rw-r--r--util.c2
-rw-r--r--wm.c16
-rw-r--r--wm.h3
7 files changed, 34 insertions, 19 deletions
diff --git a/bar.c b/bar.c
index 17db8cd..f3a11b8 100644
--- 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);
diff --git a/client.c b/client.c
index f87fb80..9407f0a 100644
--- 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;
diff --git a/config.h b/config.h
index ce9e7ab..a8e3449 100644
--- 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
--- 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
--- 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
--- 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
--- 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);