X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=dwm.c;h=293f9cfb2f5c8de60ba621450388c7e064324395;hp=d0239f4671604db38291b09211fc2c9fe627681c;hb=02a8ca95cf22d9b1da50dffffefa31fb563c3852;hpb=0ffa6d13939443a84a732f111d483c233b529bbf diff --git a/dwm.c b/dwm.c index d0239f4..293f9cf 100644 --- a/dwm.c +++ b/dwm.c @@ -24,7 +24,6 @@ * To understand everything else, start reading main(). */ #include -#include #include #include #include @@ -202,8 +201,10 @@ static void zoom(const Arg *arg); /* variables */ static char stext[256]; -static int screen, sx, sy, sw, sh; -static int by, bh, blw, wx, wy, ww, wh; +static int screen; +static int sx, sy, sw, sh; /* X display screen geometry x, y, width, height */ +static int by, bh, blw; /* bar geometry y, height and layout symbol width */ +static int wx, wy, ww, wh; /* window area geometry x, y, width, height, bar excluded */ static unsigned int seltags = 0, sellt = 0; static int (*xerrorxlib)(Display *, XErrorEvent *); static unsigned int numlockmask = 0; @@ -567,24 +568,23 @@ drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) { void drawtext(const char *text, unsigned long col[ColLast], Bool invert) { + char buf[256]; int i, x, y, h, len, olen; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; - char buf[256]; XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); if(!text) return; olen = strlen(text); - len = MIN(olen, sizeof buf); - memcpy(buf, text, len); h = dc.font.ascent + dc.font.descent; y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; x = dc.x + (h / 2); /* shorten text if necessary */ - for(; len && (i = textnw(buf, len)) > dc.w - h; len--); + for(len = MIN(olen, sizeof buf); len && textnw(buf, len) > dc.w - h; len--); if(!len) return; + memcpy(buf, text, len); if(len < olen) for(i = len; i && i > len - 3; buf[--i] = '.'); XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]); @@ -865,8 +865,7 @@ killclient(const Arg *arg) { void manage(Window w, XWindowAttributes *wa) { Client *c, *t = NULL; - Status rettrans; - Window trans; + Window trans = None; XWindowChanges wc; if(!(c = calloc(1, sizeof(Client)))) @@ -903,14 +902,14 @@ manage(Window w, XWindowAttributes *wa) { XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); grabbuttons(c, False); updatetitle(c); - if((rettrans = XGetTransientForHint(dpy, w, &trans)) == Success) + if(XGetTransientForHint(dpy, w, &trans)) t = getclient(trans); if(t) c->tags = t->tags; else applyrules(c); if(!c->isfloating) - c->isfloating = (rettrans == Success) || c->isfixed; + c->isfloating = trans != None || c->isfixed; if(c->isfloating) XRaiseWindow(dpy, c->win); attach(c); @@ -962,18 +961,15 @@ movemouse(const Arg *arg) { if(!(c = sel)) return; restack(); - ocx = nx = c->x; - ocy = ny = c->y; + ocx = c->x; + ocy = c->y; if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurMove], CurrentTime) != GrabSuccess) return; XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui); - for(;;) { + do { XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); switch (ev.type) { - case ButtonRelease: - XUngrabPointer(dpy, CurrentTime); - return; case ConfigureRequest: case Expose: case MapRequest: @@ -1001,6 +997,8 @@ movemouse(const Arg *arg) { break; } } + while(ev.type != ButtonRelease); + XUngrabPointer(dpy, CurrentTime); } Client * @@ -1247,10 +1245,9 @@ run(void) { void scan(void) { unsigned int i, num; - Window *wins, d1, d2; + Window d1, d2, *wins = NULL; XWindowAttributes wa; - wins = NULL; if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { for(i = 0; i < num; i++) { if(!XGetWindowAttributes(dpy, wins[i], &wa) @@ -1266,9 +1263,9 @@ scan(void) { && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)) manage(wins[i], &wa); } + if(wins) + XFree(wins); } - if(wins) - XFree(wins); } void @@ -1640,10 +1637,10 @@ updatewmhints(Client *c) { void view(const Arg *arg) { - if(arg && (arg->ui & TAGMASK) == tagset[seltags]) + if((arg->ui & TAGMASK) == tagset[seltags]) return; seltags ^= 1; /* toggle sel tagset */ - if(arg && (arg->ui & TAGMASK)) + if(arg->ui & TAGMASK) tagset[seltags] = arg->ui & TAGMASK; clearurgent(); arrange(); @@ -1704,7 +1701,7 @@ main(int argc, char *argv[]) { else if(argc != 1) die("usage: dwm [-v]\n"); - if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + if(!XSupportsLocale()) fprintf(stderr, "warning: no locale support\n"); if(!(dpy = XOpenDisplay(0)))