X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=main.c;h=6de4f8ac54f6bc8562851a688d10976aa11ace72;hb=c8e57332d1a5167d213af0fc9438ff2b56c74fbb;hp=0727c2ab563afb80ef5d8a07102acf8caa6be189;hpb=b55bd709ee6d0b09c141bf5ffe0647866e0374ef;p=dwm.git diff --git a/main.c b/main.c index 0727c2a..6de4f8a 100644 --- a/main.c +++ b/main.c @@ -19,13 +19,14 @@ char stext[1024]; Bool *seltag; -int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; -unsigned int ntags, numlockmask, modew; +int bx, by, bw, bh, bmw, master, screen, sx, sy, sw, sh; +unsigned int ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; Client *clients = NULL; Client *sel = NULL; +Client *stack = NULL; Cursor cursor[CurLast]; Display *dpy; DC dc = {0}; @@ -37,8 +38,7 @@ static int (*xerrorxlib)(Display *, XErrorEvent *); static Bool otherwm, readin; static void -cleanup() -{ +cleanup(void) { close(STDIN_FILENO); while(sel) { resize(sel, True, TopLeft); @@ -54,11 +54,11 @@ cleanup() XDestroyWindow(dpy, barwin); XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); XSync(dpy, False); + free(seltag); } static void -scan() -{ +scan(void) { unsigned int i, num; Window *wins, d1, d2; XWindowAttributes wa; @@ -79,8 +79,7 @@ scan() } static void -setup() -{ +setup(void) { int i, j; unsigned int mask; Window w; @@ -109,7 +108,8 @@ setup() } XFree(modmap); - wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask; + wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask + | EnterWindowMask | LeaveWindowMask; wa.cursor = cursor[CurNormal]; XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); @@ -128,12 +128,15 @@ setup() dc.status[ColBG] = getcolor(STATUSBGCOLOR); dc.status[ColFG] = getcolor(STATUSFGCOLOR); setfont(FONT); - - modew = 0; + + bmw = textw(VSTACKSYMBOL) > textw(BSTACKSYMBOL) ? + textw(VSTACKSYMBOL) : textw(BSTACKSYMBOL); + bmw = bmw > textw(FLOATSYMBOL) ? + bmw : textw(FLOATSYMBOL); sx = sy = 0; sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); - mw = (sw * MASTERW) / 100; + master = ((stackpos == StackBottom ? sh - bh : sw) * MASTER) / 100; bx = by = 0; bw = sw; @@ -160,8 +163,7 @@ setup() * is already running. */ static int -xerrorstart(Display *dsply, XErrorEvent *ee) -{ +xerrorstart(Display *dsply, XErrorEvent *ee) { otherwm = True; return -1; } @@ -169,8 +171,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee) /* extern */ int -getproto(Window w) -{ +getproto(Window w) { int i, format, protos, status; unsigned long extra, res; Atom *protocols, real; @@ -188,8 +189,7 @@ getproto(Window w) } void -sendevent(Window w, Atom a, long value) -{ +sendevent(Window w, Atom a, long value) { XEvent e; e.type = ClientMessage; @@ -203,35 +203,33 @@ sendevent(Window w, Atom a, long value) } void -quit(Arg *arg) -{ +quit(Arg *arg) { readin = running = False; } /* * There's no way to check accesses to destroyed windows, thus those cases are * ignored (especially on UnmapNotify's). Other types of errors call Xlibs - * default error handler, which calls exit(). + * default error handler, which may call exit. */ int -xerror(Display *dpy, XErrorEvent *ee) -{ +xerror(Display *dpy, XErrorEvent *ee) { if(ee->error_code == BadWindow || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch) || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable) || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable) || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable) || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch) - || (ee->request_code == X_GrabKey && ee->error_code == BadAccess)) + || (ee->request_code == X_GrabKey && ee->error_code == BadAccess) + || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable)) return 0; fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n", ee->request_code, ee->error_code); - return xerrorxlib(dpy, ee); /* may call exit() */ + return xerrorxlib(dpy, ee); /* may call exit */ } int -main(int argc, char *argv[]) -{ +main(int argc, char *argv[]) { int r, xfd; fd_set rd;