#include "wm.h"
+/* X structs */
Display *dpy;
-Window root;
-XRectangle rect;
-int screen, sel_screen;
-Atom wm_atom[WMLast];
-Atom net_atom[NetLast];
+Window root, barwin;
+Atom wm_atom[WMLast], net_atom[NetLast];
Cursor cursor[CurLast];
-unsigned int kmask, numlock_mask;
-Pixmap pmap;
+XRectangle rect, barrect;
+Bool running = True;
+
+char *bartext, *shell;
+int screen, sel_screen;
+unsigned int lock_mask, numlock_mask;
+
+/* draw structs */
+Brush brush = {0};
enum { WM_PROTOCOL_DELWIN = 1 };
exit(1);
}
-void
-error(char *errstr, ...) {
- va_list ap;
- va_start(ap, errstr);
- vfprintf(stderr, errstr, ap);
- va_end(ap);
- exit(1);
-}
-
static void
scan_wins()
{
}
XFreeModifiermap(modmap);
- kmask = 255 & ~(numlock_mask | LockMask);
+ lock_mask = 255 & ~(numlock_mask | LockMask);
}
static void
XSetWindowAttributes wa;
unsigned int mask;
Window w;
+ XEvent ev;
/* command line args */
for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
XSetErrorHandler(startup_error_handler);
/* this causes an error if some other WM is running */
XSelectInput(dpy, root, SubstructureRedirectMask);
- XSync(dpy, False);
+ XFlush(dpy);
if(other_wm_running)
error("gridwm: another window manager is already running\n");
+ if(!(shell = getenv("SHELL")))
+ shell = "/bin/sh";
+
rect.x = rect.y = 0;
rect.width = DisplayWidth(dpy, screen);
rect.height = DisplayHeight(dpy, screen);
init_lock_keys();
- pmap = XCreatePixmap(dpy, root, rect.width, rect.height,
+ brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height,
DefaultDepth(dpy, screen));
+ brush.gc = XCreateGC(dpy, root, 0, 0);
+
+ /* style */
+ loadcolors(dpy, screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR);
+ loadfont(dpy, &brush.font, FONT);
+
+ wa.override_redirect = 1;
+ wa.background_pixmap = ParentRelative;
+ wa.event_mask = ExposureMask;
+
+ barrect = rect;
+ barrect.height = labelheight(&brush.font);
+ barrect.y = rect.height - barrect.height;
+ barwin = XCreateWindow(dpy, root, barrect.x, barrect.y,
+ barrect.width, barrect.height, 0, DefaultDepth(dpy, screen),
+ CopyFromParent, DefaultVisual(dpy, screen),
+ CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
+ bartext = 0;
+ XDefineCursor(dpy, barwin, cursor[CurNormal]);
+ XMapRaised(dpy, barwin);
+ draw_bar();
wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask;
wa.cursor = cursor[CurNormal];
scan_wins();
+ while(running) {
+ XNextEvent(dpy, &ev);
+ if(handler[ev.type])
+ (handler[ev.type]) (&ev); /* call handler */
+ }
+
cleanup();
XCloseDisplay(dpy);