JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
before leaning things up
[dwm.git] / wm.c
diff --git a/wm.c b/wm.c
index 837be3c..1c9e1f9 100644 (file)
--- a/wm.c
+++ b/wm.c
 
 #include "wm.h"
 
+/********** CUSTOMIZE **********/
+
+char *tags[TLast] = {
+       [Tscratch] = "scratch",
+       [Tdev] = "dev",
+       [Tirc] = "irc",
+       [Twww] = "www",
+       [Twork] = "work",
+};
+
+/* commands */
+static char *cmdwallpaper[] = {
+       "feh", "--bg-scale", "/home/garbeam/wallpaper/bg.jpg", NULL
+};
+
+static char *cmdstatus[] = {
+       "sh", "-c", "echo -n `date '+%Y-%m-%d %H:%M'`" 
+       " `uptime | sed 's/.*://; s/,//g'`"
+       " `acpi | awk '{print $4}' | sed 's/,//'`", NULL
+};
+
+/********** CUSTOMIZE **********/
+
 /* X structs */
 Display *dpy;
 Window root, barwin;
 Atom wm_atom[WMLast], net_atom[NetLast];
 Cursor cursor[CurLast];
-XRectangle rect, barrect;
 Bool running = True;
-Bool sel_screen;
+Bool issel;
 
-char statustext[1024], tag[256];
-int screen;
+char stext[1024];
+int tsel = Tdev; /* default tag */
+int screen, sx, sy, sw, sh, bx, by, bw, bh;
 
 Brush brush = {0};
 Client *clients = NULL;
 Client *stack = NULL;
 
 static Bool other_wm_running;
-static const 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()
-{
-       fputs("usage: gridwm [-v]\n", stderr);
-       exit(1);
-}
+usage() {      error("usage: gridwm [-v]\n"); }
 
 static void
 scan_wins()
@@ -96,13 +110,12 @@ win_property(Window w, Atom a, Atom t, long l, unsigned char **prop)
 int
 win_proto(Window w)
 {
-       Atom *protocols;
+       unsigned char *protocols;
        long res;
        int protos = 0;
        int i;
 
-       res = win_property(w, wm_atom[WMProtocols], XA_ATOM, 20L,
-                       ((unsigned char **) &protocols));
+       res = win_property(w, wm_atom[WMProtocols], XA_ATOM, 20L, &protocols);
        if(res <= 0) {
                return protos;
        }
@@ -176,6 +189,18 @@ cleanup()
        XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 }
 
+void
+run(void *aux)
+{
+       spawn(dpy, aux);
+}
+
+void
+quit(void *aux)
+{
+       running = False;
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -220,10 +245,11 @@ main(int argc, char *argv[])
        if(other_wm_running)
                error("gridwm: another window manager is already running\n");
 
-       rect.x = rect.y = 0;
-       rect.width = DisplayWidth(dpy, screen);
-       rect.height = DisplayHeight(dpy, screen);
-       sel_screen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
+       spawn(dpy, cmdwallpaper);
+       sx = sy = 0;
+       sw = DisplayWidth(dpy, screen);
+       sh = DisplayHeight(dpy, screen);
+       issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
 
        XSetErrorHandler(0);
        x_error_handler = XSetErrorHandler(error_handler);
@@ -245,10 +271,6 @@ main(int argc, char *argv[])
 
        update_keys();
 
-       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);
@@ -257,16 +279,19 @@ main(int argc, char *argv[])
        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),
+       bx = by = 0;
+       bw = sw;
+       bh = texth(&brush.font);
+       barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
                        CopyFromParent, DefaultVisual(dpy, screen),
                        CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
        XDefineCursor(dpy, barwin, cursor[CurNormal]);
        XMapRaised(dpy, barwin);
-       pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
+
+       brush.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
+       brush.gc = XCreateGC(dpy, root, 0, 0);
+
+       pipe_spawn(stext, sizeof(stext), dpy, cmdstatus);
        draw_bar();
 
        wa.event_mask = SubstructureRedirectMask | EnterWindowMask \
@@ -274,6 +299,7 @@ main(int argc, char *argv[])
        wa.cursor = cursor[CurNormal];
        XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
 
+       arrange = grid;
        scan_wins();
 
        while(running) {
@@ -289,7 +315,7 @@ main(int argc, char *argv[])
                if(select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &t) > 0)
                        continue;
                else if(errno != EINTR) {
-                       pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
+                       pipe_spawn(stext, sizeof(stext), dpy, cmdstatus);
                        draw_bar();
                }
        }