X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=dwm.c;h=7b5fa4e318e9eca013b138725cc4ea7f5905dd44;hp=0a23e5a8b4b6804e9b7ba388ee0e529cef4724a9;hb=3c48858ffada0825b62e52ac14b1feba4b7654a4;hpb=a644baf674e80bebfe92ac4bde8f187d1cf949a8 diff --git a/dwm.c b/dwm.c index 0a23e5a..7b5fa4e 100644 --- a/dwm.c +++ b/dwm.c @@ -267,7 +267,6 @@ static void (*handler[LASTEvent]) (XEvent *) = { [UnmapNotify] = unmapnotify }; static Atom wmatom[WMLast], netatom[NetLast]; -static Bool otherwm; static Bool running = True; static Cursor cursor[CurLast]; static Display *dpy; @@ -458,13 +457,10 @@ buttonpress(XEvent *e) { void checkotherwm(void) { - otherwm = False; xerrorxlib = XSetErrorHandler(xerrorstart); /* this causes an error if some other window manager is running */ XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask); XSync(dpy, False); - if(otherwm) - die("dwm: another window manager is already running\n"); XSetErrorHandler(xerror); XSync(dpy, False); } @@ -984,7 +980,7 @@ grabkeys(void) { void initfont(const char *fontstr) { char *def, **missing; - int i, n; + int n; missing = NULL; dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def); @@ -994,14 +990,13 @@ initfont(const char *fontstr) { 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); + 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++) { + while(n--) { dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent); dc.font.descent = MAX(dc.font.descent,(*xfonts)->descent); xfonts++; @@ -1019,14 +1014,13 @@ initfont(const char *fontstr) { Bool isprotodel(Client *c) { - int i, n; + int n; Atom *protocols; Bool ret = False; if(XGetWMProtocols(dpy, c->win, &protocols, &n)) { - for(i = 0; !ret && i < n; i++) - if(protocols[i] == wmatom[WMDelete]) - ret = True; + while(!ret && n--) + ret = protocols[n] == wmatom[WMDelete]; XFree(protocols); } return ret; @@ -1034,12 +1028,10 @@ isprotodel(Client *c) { #ifdef XINERAMA static Bool -isuniquegeom(XineramaScreenInfo *unique, size_t len, XineramaScreenInfo *info) { - unsigned int i; - - for(i = 0; i < len; i++) - if(unique[i].x_org == info->x_org && unique[i].y_org == info->y_org - && unique[i].width == info->width && unique[i].height == info->height) +isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) { + while(n--) + if(unique[n].x_org == info->x_org && unique[n].y_org == info->y_org + && unique[n].width == info->width && unique[n].height == info->height) return False; return True; } @@ -1088,14 +1080,12 @@ killclient(const Arg *arg) { void manage(Window w, XWindowAttributes *wa) { - static Client cz; Client *c, *t = NULL; Window trans = None; XWindowChanges wc; - if(!(c = malloc(sizeof(Client)))) + if(!(c = calloc(1, sizeof(Client)))) die("fatal: could not malloc() %u bytes\n", sizeof(Client)); - *c = cz; c->win = w; updatetitle(c); if(XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { @@ -1212,7 +1202,7 @@ movemouse(const Arg *arg) { case MotionNotify: nx = ocx + (ev.xmotion.x - x); ny = ocy + (ev.xmotion.y - y); - if(snap && nx >= selmon->wx && nx <= selmon->wx + selmon->ww + if(nx >= selmon->wx && nx <= selmon->wx + selmon->ww && ny >= selmon->wy && ny <= selmon->wy + selmon->wh) { if(abs(selmon->wx - nx) < snap) nx = selmon->wx; @@ -1375,8 +1365,8 @@ resizemouse(const Arg *arg) { case MotionNotify: nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); - if(snap && nw >= selmon->wx && nw <= selmon->wx + selmon->ww - && nh >= selmon->wy && nh <= selmon->wy + selmon->wh) + if(snap && c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww + && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) { if(!c->isfloating && selmon->lt[selmon->sellt]->arrange && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) @@ -1579,7 +1569,6 @@ showhide(Client *c) { } } - void sigchld(int unused) { if(signal(SIGCHLD, sigchld) == SIG_ERR) @@ -2015,7 +2004,7 @@ xerrordummy(Display *dpy, XErrorEvent *ee) { * is already running. */ int xerrorstart(Display *dpy, XErrorEvent *ee) { - otherwm = True; + die("dwm: another window manager is already running\n"); return -1; }