X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=main.c;h=1e1ad4c191a696a3e90ea4097e8c256e940797b2;hp=79b301d06c3648dc2e242c40279392ffc2c6f89c;hb=2091200c957783deed032380d56c4199a23c6b81;hpb=fc109ea8f72e662ed58ef45329b6ca9e91d61d3b diff --git a/main.c b/main.c index 79b301d..1e1ad4c 100644 --- a/main.c +++ b/main.c @@ -17,10 +17,9 @@ char stext[256]; int screen, sx, sy, sw, sh, wax, way, waw, wah; -unsigned int bh, ntags; -unsigned int bpos = BARPOS; +unsigned int ntags; unsigned int numlockmask = 0; -Atom dwmprops, wmatom[WMLast], netatom[NetLast]; +Atom wmatom[WMLast], netatom[NetLast]; Bool *seltags; Bool selscreen = True; Client *clients = NULL; @@ -28,8 +27,7 @@ Client *sel = NULL; Client *stack = NULL; Cursor cursor[CurLast]; Display *dpy; -DC dc = {0}; -Window root, barwin; +Window root; /* static */ @@ -42,7 +40,7 @@ cleanup(void) { close(STDIN_FILENO); while(stack) { unban(stack); - unmanage(stack, NormalState); + unmanage(stack); } if(dc.font.set) XFreeFontSet(dpy, dc.font.set); @@ -60,57 +58,6 @@ cleanup(void) { free(seltags); } -static unsigned long -initcolor(const char *colstr) { - Colormap cmap = DefaultColormap(dpy, screen); - XColor color; - - if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color)) - eprint("error, cannot allocate color '%s'\n", colstr); - return color.pixel; -} - -static void -initfont(const char *fontstr) { - char *def, **missing; - int i, n; - - missing = NULL; - if(dc.font.set) - XFreeFontSet(dpy, dc.font.set); - dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def); - if(missing) { - while(n--) - fprintf(stderr, "dwm: missing fontset: %s\n", missing[n]); - XFreeStringList(missing); - } - if(dc.font.set) { - XFontSetExtents *font_extents; - XFontStruct **xfonts; - char **font_names; - dc.font.ascent = dc.font.descent = 0; - font_extents = XExtentsOfFontSet(dc.font.set); - n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); - for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) { - if(dc.font.ascent < (*xfonts)->ascent) - dc.font.ascent = (*xfonts)->ascent; - if(dc.font.descent < (*xfonts)->descent) - dc.font.descent = (*xfonts)->descent; - xfonts++; - } - } - else { - if(dc.font.xfont) - XFreeFont(dpy, dc.font.xfont); - dc.font.xfont = NULL; - if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))) - eprint("error, cannot load font: '%s'\n", fontstr); - dc.font.ascent = dc.font.xfont->ascent; - dc.font.descent = dc.font.xfont->descent; - } - dc.font.height = dc.font.ascent + dc.font.descent; -} - static long getstate(Window w) { int format, status; @@ -165,7 +112,6 @@ setup(void) { XSetWindowAttributes wa; /* init atoms */ - dwmprops = XInternAtom(dpy, "_DWM_PROPERTIES", False); wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); wmatom[WMName] = XInternAtom(dpy, "WM_NAME", False); @@ -198,40 +144,15 @@ setup(void) { for(ntags = 0; tags[ntags]; ntags++); seltags = emallocz(sizeof(Bool) * ntags); seltags[0] = True; - /* style */ - dc.norm[ColBorder] = initcolor(NORMBORDERCOLOR); - dc.norm[ColBG] = initcolor(NORMBGCOLOR); - dc.norm[ColFG] = initcolor(NORMFGCOLOR); - dc.sel[ColBorder] = initcolor(SELBORDERCOLOR); - dc.sel[ColBG] = initcolor(SELBGCOLOR); - dc.sel[ColFG] = initcolor(SELFGCOLOR); - initfont(FONT); /* geometry */ sx = sy = 0; sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); + initstyle(); initlayouts(); - /* bar */ - dc.h = bh = dc.font.height + 2; - wa.override_redirect = 1; - wa.background_pixmap = ParentRelative; - wa.event_mask = ButtonPressMask | ExposureMask; - barwin = XCreateWindow(dpy, root, sx, sy, sw, bh, 0, - DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), - CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); - XDefineCursor(dpy, barwin, cursor[CurNormal]); - updatebarpos(); - 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); - if(!dc.font.set) - XSetFont(dpy, dc.gc, dc.font.xfont->fid); + initbar(); /* multihead support */ selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); - getdwmprops(); } /* @@ -328,7 +249,7 @@ main(int argc, char *argv[]) { xerrorxlib = XSetErrorHandler(xerror); XSync(dpy, False); setup(); - drawstatus(); + drawbar(); scan(); /* main event loop, also reads status text from stdin */ @@ -361,7 +282,7 @@ main(int argc, char *argv[]) { if(p > stext) strncpy(stext, p + 1, sizeof stext); } - drawstatus(); + drawbar(); } while(XPending(dpy)) { XNextEvent(dpy, &ev);