X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=main.c;h=1e5817698c63242e760acdca20e4ae32df43e573;hp=985635432dda857dca745bf9d23a3d3c82d0c208;hb=6651dd7fd9e8e95cfc6c472f1adfeff41735d798;hpb=26157e6973f240a9b5ee407b9d2d5eca9358844f diff --git a/main.c b/main.c index 9856354..1e58176 100644 --- a/main.c +++ b/main.c @@ -1,5 +1,4 @@ -/* - * (C)opyright MMVI Anselm R. Garbe +/* (C)opyright MMVI Anselm R. Garbe * See LICENSE file for license details. */ @@ -19,14 +18,14 @@ char stext[1024]; Bool *seltag; -int bx, by, bw, bh, bmw, mw, screen, sx, sy, sw, sh; -unsigned int ntags, numlockmask; +int bx, by, bw, bh, bmw, masterd, screen, sx, sy, sw, sh; +unsigned int master, ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; -Bool maximized = False; Client *clients = NULL; Client *sel = NULL; +Client *stack = NULL; Cursor cursor[CurLast]; Display *dpy; DC dc = {0}; @@ -38,8 +37,7 @@ static int (*xerrorxlib)(Display *, XErrorEvent *); static Bool otherwm, readin; static void -cleanup() -{ +cleanup(void) { close(STDIN_FILENO); while(sel) { resize(sel, True, TopLeft); @@ -55,11 +53,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; @@ -80,8 +78,7 @@ scan() } static void -setup() -{ +setup(void) { int i, j; unsigned int mask; Window w; @@ -95,12 +92,11 @@ setup() netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, PropModeReplace, (unsigned char *) netatom, NetLast); - /* init cursors */ cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); - + /* init modifier map */ modmap = XGetModifierMapping(dpy); for (i = 0; i < 8; i++) { for (j = 0; j < modmap->max_keypermod; j++) { @@ -109,18 +105,16 @@ setup() } } XFree(modmap); - - wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask; + /* select for events */ + wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask + | EnterWindowMask | LeaveWindowMask; wa.cursor = cursor[CurNormal]; XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); - grabkeys(); initrregs(); - for(ntags = 0; tags[ntags]; ntags++); seltag = emallocz(sizeof(Bool) * ntags); seltag[0] = True; - /* style */ dc.norm[ColBG] = getcolor(NORMBGCOLOR); dc.norm[ColFG] = getcolor(NORMFGCOLOR); @@ -129,13 +123,13 @@ setup() dc.status[ColBG] = getcolor(STATUSBGCOLOR); dc.status[ColFG] = getcolor(STATUSFGCOLOR); setfont(FONT); - - bmw = textw(FLOATSYMBOL) > textw(TILESYMBOL) ? textw(FLOATSYMBOL) : textw(TILESYMBOL); + /* geometry */ + bmw = textw(TILESYMBOL) > textw(FLOATSYMBOL) ? textw(TILESYMBOL) : textw(FLOATSYMBOL); sx = sy = 0; sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); - mw = (sw * MASTERW) / 100; - + master = MASTER; + /* bar */ bx = by = 0; bw = sw; dc.h = bh = dc.font.height + 2; @@ -147,13 +141,13 @@ setup() CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); XDefineCursor(dpy, barwin, cursor[CurNormal]); XMapRaised(dpy, barwin); - + strcpy(stext, "dwm-"VERSION); + /* pixmap for everything */ dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen)); dc.gc = XCreateGC(dpy, root, 0, 0); XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); - + /* multihead support */ issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); - strcpy(stext, "dwm-"VERSION); } /* @@ -161,8 +155,7 @@ setup() * is already running. */ static int -xerrorstart(Display *dsply, XErrorEvent *ee) -{ +xerrorstart(Display *dsply, XErrorEvent *ee) { otherwm = True; return -1; } @@ -170,8 +163,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; @@ -189,8 +181,7 @@ getproto(Window w) } void -sendevent(Window w, Atom a, long value) -{ +sendevent(Window w, Atom a, long value) { XEvent e; e.type = ClientMessage; @@ -204,35 +195,32 @@ 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 +/* 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; @@ -242,21 +230,17 @@ main(int argc, char *argv[]) } else if(argc != 1) eprint("usage: dwm [-v]\n"); - dpy = XOpenDisplay(0); if(!dpy) eprint("dwm: cannot open display\n"); - xfd = ConnectionNumber(dpy); screen = DefaultScreen(dpy); root = RootWindow(dpy, screen); - otherwm = False; XSetErrorHandler(xerrorstart); /* this causes an error if some other window manager is running */ XSelectInput(dpy, root, SubstructureRedirectMask); XSync(dpy, False); - if(otherwm) eprint("dwm: another window manager is already running\n"); @@ -264,7 +248,6 @@ main(int argc, char *argv[]) XSetErrorHandler(NULL); xerrorxlib = XSetErrorHandler(xerror); XSync(dpy, False); - setup(); drawstatus(); scan(); @@ -297,6 +280,5 @@ main(int argc, char *argv[]) } cleanup(); XCloseDisplay(dpy); - return 0; }