diff options
| author | Anselm R. Garbe <garbeam@wmii.de> | 2006-07-11 18:53:41 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@wmii.de> | 2006-07-11 18:53:41 +0200 | 
| commit | d6e0e6e9879c144f5d374fca0c015fd6208fc27e (patch) | |
| tree | 997db1276dc89c44361a56d80a66fb3722f8f2fe | |
| parent | b1669b5c48f71c9a7a919dbf09a1af527c62f69a (diff) | |
several changes, new stuff
| -rw-r--r-- | bar.c | 24 | ||||
| -rw-r--r-- | client.c | 5 | ||||
| -rw-r--r-- | config.h | 2 | ||||
| -rw-r--r-- | event.c | 1 | ||||
| -rw-r--r-- | util.c | 2 | ||||
| -rw-r--r-- | wm.c | 16 | ||||
| -rw-r--r-- | wm.h | 3 | 
7 files changed, 34 insertions, 19 deletions
| @@ -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); @@ -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; @@ -7,4 +7,4 @@  #define BGCOLOR		"#000000"  #define FGCOLOR		"#ffaa00"  #define BORDERCOLOR	"#000000" -#define STATUSDELAY 1 /* milliseconds */ +#define STATUSDELAY	10 /* milliseconds */ @@ -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);*/  		}  	}  } @@ -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);  } @@ -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(); @@ -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); | 
