several changes, new stuff

master
Anselm R. Garbe 2006-07-11 18:53:41 +02:00
parent b1669b5c48
commit d6e0e6e987
7 changed files with 34 additions and 19 deletions

24
bar.c
View File

@ -5,22 +5,24 @@
#include "wm.h" #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 void
draw_bar() draw_bar()
{ {
static char buf[1024];
buf[0] = 0;
pipe_spawn(buf, sizeof(buf), dpy, (char **)status);
brush.rect = barrect; brush.rect = barrect;
brush.rect.x = brush.rect.y = 0; 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, XCopyArea(dpy, brush.drawable, barwin, brush.gc, 0, 0, barrect.width,
barrect.height, 0, 0); barrect.height, 0, 0);

View File

@ -35,6 +35,10 @@ update_name(Client *c)
} }
} }
XFree(name.value); XFree(name.value);
if(c == stack)
draw_bar();
else
draw_client(c);
} }
void void
@ -66,6 +70,7 @@ manage(Window w, XWindowAttributes *wa)
c->r[RFloat].height = wa->height; c->r[RFloat].height = wa->height;
c->border = wa->border_width; c->border = wa->border_width;
XSetWindowBorderWidth(dpy, c->win, 0); XSetWindowBorderWidth(dpy, c->win, 0);
XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
XGetTransientForHint(dpy, c->win, &c->trans); XGetTransientForHint(dpy, c->win, &c->trans);
if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags) if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
c->size.flags = PSize; c->size.flags = PSize;

View File

@ -7,4 +7,4 @@
#define BGCOLOR "#000000" #define BGCOLOR "#000000"
#define FGCOLOR "#ffaa00" #define FGCOLOR "#ffaa00"
#define BORDERCOLOR "#000000" #define BORDERCOLOR "#000000"
#define STATUSDELAY 1 /* milliseconds */ #define STATUSDELAY 10 /* milliseconds */

View File

@ -187,7 +187,6 @@ propertynotify(XEvent *e)
} }
if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) { if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {
update_name(c); update_name(c);
/*draw_frame(c->sel);*/
} }
} }
} }

2
util.c
View File

@ -134,7 +134,7 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[])
n += l; n += l;
} }
close(pfd[0]); close(pfd[0]);
buf[n - 1] = 0; buf[n < len ? n : len - 1] = 0;
} }
wait(0); wait(0);
} }

16
wm.c
View File

@ -27,7 +27,7 @@ XRectangle rect, barrect;
Bool running = True; Bool running = True;
Bool sel_screen; Bool sel_screen;
char *bartext, tag[256]; char statustext[1024], tag[256];
int screen; int screen;
Brush brush = {0}; Brush brush = {0};
@ -35,9 +35,15 @@ Client *clients = NULL;
Client *stack = NULL; Client *stack = NULL;
static Bool other_wm_running; 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 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 static void
usage() usage()
{ {
@ -258,9 +264,9 @@ main(int argc, char *argv[])
barrect.width, barrect.height, 0, DefaultDepth(dpy, screen), barrect.width, barrect.height, 0, DefaultDepth(dpy, screen),
CopyFromParent, DefaultVisual(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
bartext = NULL;
XDefineCursor(dpy, barwin, cursor[CurNormal]); XDefineCursor(dpy, barwin, cursor[CurNormal]);
XMapRaised(dpy, barwin); XMapRaised(dpy, barwin);
pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
draw_bar(); draw_bar();
wa.event_mask = SubstructureRedirectMask | EnterWindowMask \ wa.event_mask = SubstructureRedirectMask | EnterWindowMask \
@ -282,8 +288,10 @@ main(int argc, char *argv[])
t = timeout; t = timeout;
if(select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &t) > 0) if(select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &t) > 0)
continue; continue;
else if(errno != EINTR) else if(errno != EINTR) {
pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
draw_bar(); draw_bar();
}
} }
cleanup(); cleanup();

3
wm.h
View File

@ -55,7 +55,7 @@ extern Bool running, sel_screen, grid;
extern void (*handler[LASTEvent]) (XEvent *); extern void (*handler[LASTEvent]) (XEvent *);
extern int screen; extern int screen;
extern char *bartext, tag[256]; extern char statustext[1024], tag[256];
extern Brush brush; extern Brush brush;
extern Client *clients, *stack; extern Client *clients, *stack;
@ -74,6 +74,7 @@ extern void unmanage(Client *c);
extern Client *getclient(Window w); extern Client *getclient(Window w);
extern void focus(Client *c); extern void focus(Client *c);
extern void update_name(Client *c); extern void update_name(Client *c);
extern void draw_client(Client *c);
/* event.c */ /* event.c */
extern unsigned int flush_events(long even_mask); extern unsigned int flush_events(long even_mask);