wm.c
changeset 26 e8f627998d6f
parent 21 3ef108a5ca0a
child 27 f96fb3fd8203
equal deleted inserted replaced
25:e238dc4844d7 26:e8f627998d6f
    21 /* X structs */
    21 /* X structs */
    22 Display *dpy;
    22 Display *dpy;
    23 Window root, barwin;
    23 Window root, barwin;
    24 Atom wm_atom[WMLast], net_atom[NetLast];
    24 Atom wm_atom[WMLast], net_atom[NetLast];
    25 Cursor cursor[CurLast];
    25 Cursor cursor[CurLast];
    26 XRectangle rect, barrect;
       
    27 Bool running = True;
    26 Bool running = True;
    28 Bool sel_screen;
    27 Bool sel_screen;
    29 
    28 
    30 char statustext[1024], tag[256];
    29 char statustext[1024], tag[256];
    31 int screen;
    30 int screen, sx, sy, sw, sh, bx, by, bw, bh;
    32 
    31 
    33 Brush brush = {0};
    32 Brush brush = {0};
    34 Client *clients = NULL;
    33 Client *clients = NULL;
    35 Client *stack = NULL;
    34 Client *stack = NULL;
    36 
    35 
    37 static Bool other_wm_running;
    36 static Bool other_wm_running;
    38 static const char version[] = "gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
    37 static const char version[] = "gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
    39 static int (*x_error_handler) (Display *, XErrorEvent *);
    38 static int (*x_error_handler) (Display *, XErrorEvent *);
    40 
    39 
    41 static const char *status[] = {
    40 static const char *status[] = {
    42 	"sh", "-c", "echo -n `date '+%Y/%m/%d %H:%M'`" 
    41 	"sh", "-c", "echo -n `date '+%Y-%m-%d %H:%M'`" 
    43 	" `uptime | sed 's/.*://; s/,//g'`"
    42 	" `uptime | sed 's/.*://; s/,//g'`"
    44 	" `acpi | awk '{print $4}' | sed 's/,//'`", 0
    43 	" `acpi | awk '{print $4}' | sed 's/,//'`", 0
    45 };
    44 };
    46 
    45 
    47 static void
    46 static void
   218 	XFlush(dpy);
   217 	XFlush(dpy);
   219 
   218 
   220 	if(other_wm_running)
   219 	if(other_wm_running)
   221 		error("gridwm: another window manager is already running\n");
   220 		error("gridwm: another window manager is already running\n");
   222 
   221 
   223 	rect.x = rect.y = 0;
   222 	sx = sy = 0;
   224 	rect.width = DisplayWidth(dpy, screen);
   223 	sw = DisplayWidth(dpy, screen);
   225 	rect.height = DisplayHeight(dpy, screen);
   224 	sh = DisplayHeight(dpy, screen);
   226 	sel_screen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
   225 	sel_screen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
   227 
   226 
   228 	XSetErrorHandler(0);
   227 	XSetErrorHandler(0);
   229 	x_error_handler = XSetErrorHandler(error_handler);
   228 	x_error_handler = XSetErrorHandler(error_handler);
   230 
   229 
   251 
   250 
   252 	wa.override_redirect = 1;
   251 	wa.override_redirect = 1;
   253 	wa.background_pixmap = ParentRelative;
   252 	wa.background_pixmap = ParentRelative;
   254 	wa.event_mask = ExposureMask;
   253 	wa.event_mask = ExposureMask;
   255 
   254 
   256 	barrect = rect;
   255 	bx = by = 0;
   257 	barrect.height = labelheight(&brush.font);
   256 	bw = sw;
   258 	barrect.y = rect.height - barrect.height;
   257 	bh = texth(&brush.font);
   259 	barwin = XCreateWindow(dpy, root, barrect.x, barrect.y,
   258 	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
   260 			barrect.width, barrect.height, 0, DefaultDepth(dpy, screen),
       
   261 			CopyFromParent, DefaultVisual(dpy, screen),
   259 			CopyFromParent, DefaultVisual(dpy, screen),
   262 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
   260 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
   263 	XDefineCursor(dpy, barwin, cursor[CurNormal]);
   261 	XDefineCursor(dpy, barwin, cursor[CurNormal]);
   264 	XMapRaised(dpy, barwin);
   262 	XMapRaised(dpy, barwin);
   265 
   263 
   266 	brush.drawable = XCreatePixmap(dpy, root, rect.width, barrect.height,
   264 	brush.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
   267 			DefaultDepth(dpy, screen));
       
   268 	brush.gc = XCreateGC(dpy, root, 0, 0);
   265 	brush.gc = XCreateGC(dpy, root, 0, 0);
   269 
   266 
   270 	pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
   267 	pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
   271 	draw_bar();
   268 	draw_bar();
   272 
   269