#define LENGTH(x) (sizeof x / sizeof x[0])
#define MAXTAGLEN 16
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
+#define DEFGEOM(GEONAME,BX,BY,BW,WX,WY,WW,WH,MX,MY,MW,MH,TX,TY,TW,TH,MOX,MOY,MOW,MOH) \
+void GEONAME(void) { \
+ bx = (BX); by = (BY); bw = (BW); \
+ wx = (WX); wy = (WY); ww = (WW); wh = (WH); \
+ mx = (MX); my = (MY); mw = (MW); mh = (MH); \
+ tx = (TX); ty = (TY); tw = (TW); th = (TH); \
+ mox = (MOX); moy = (MOY); mow = (MOW); moh = (MOH); \
+}
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
} font;
} DC; /* draw context */
+typedef struct {
+ const char *symbol;
+ void (*apply)(void);
+} Geom;
+
typedef struct {
unsigned long mod;
KeySym keysym;
void run(void);
void scan(void);
void setclientstate(Client *c, long state);
-void setdefgeoms(void);
+void setgeom(const char *arg);
void setlayout(const char *arg);
void setup(void);
void spawn(const char *arg);
Cursor cursor[CurLast];
Display *dpy;
DC dc = {0};
+Geom *geom = NULL;
Layout *lt = NULL;
Window root, barwin;
configurenotify(XEvent *e) {
XConfigureEvent *ev = &e->xconfigure;
- if(ev->window == root && (ev->width != sw || ev->height != sh)) {
- setgeoms();
- updatebarpos();
- arrange();
- }
+ if(ev->window == root && (ev->width != sw || ev->height != sh))
+ setgeom(NULL);
}
void
}
void
-setdefgeoms(void) {
-
- /* screen dimensions */
- sx = 0;
- sy = 0;
- sw = DisplayWidth(dpy, screen);
- sh = DisplayHeight(dpy, screen);
-
- /* bar position */
- bx = sx;
- by = sy;
- bw = sw;
- bh = dc.font.height + 2;
-
- /* window area */
- wx = sx;
- wy = sy + bh;
- ww = sw;
- wh = sh - bh;
-
- /* master area */
- mx = wx;
- my = wy;
- mw = ((float)sw) * 0.55;
- mh = wh;
-
- /* tile area */
- tx = mx + mw;
- ty = wy;
- tw = ww - mw;
- th = wh;
+setgeom(const char *arg) {
+ unsigned int i;
- /* monocle area */
- mox = wx;
- moy = wy;
- mow = ww;
- moh = wh;
+ for(i = 0; arg && i < LENGTH(geoms); i++)
+ if(!strcmp(geoms[i].symbol, arg))
+ break;
+ if(i == LENGTH(geoms))
+ return;
+ geom = &geoms[i];
+ geom->apply();
+ updatebarpos();
+ arrange();
}
void
root = RootWindow(dpy, screen);
initfont(FONT);
- /* apply default geometries */
- setgeoms();
+ /* apply default geometry */
+ sx = 0;
+ sy = 0;
+ sw = DisplayWidth(dpy, screen);
+ sh = DisplayHeight(dpy, screen);
+ bh = dc.font.height + 2;
+ geom = &geoms[0];
+ geom->apply();
/* init atoms */
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);