aboutsummaryrefslogtreecommitdiff
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);