several changes, new stuff
authorAnselm R. Garbe <garbeam@wmii.de>
Tue, 11 Jul 2006 18:53:41 +0200
changeset 16 359b6e563b95
parent 15 00d4d52b231f
child 17 aaf520f53110
several changes, new stuff
bar.c
client.c
config.h
event.c
util.c
wm.c
wm.h
--- 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);
--- 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;
--- 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 */
--- 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);*/
 		}
 	}
 }
--- 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);
 }
--- 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();
--- 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);