X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=dwm.c;h=ba24d9a6b78ec79a58fa66d460b630bfc8cfd050;hb=258c3380305683de8031871cf95c1cc04ed7ad9e;hp=265ffb9a371ed61ad5f15b419b29152672d46f71;hpb=6d7285fd6e40508c35eadfdcc2b8940953cac06d;p=dwm.git diff --git a/dwm.c b/dwm.c index 265ffb9..ba24d9a 100644 --- a/dwm.c +++ b/dwm.c @@ -568,8 +568,8 @@ drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) { void drawtext(const char *text, unsigned long col[ColLast], Bool invert) { - int i, x, y, h, len, olen; char buf[256]; + int i, x, y, h, len, olen; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]); @@ -581,7 +581,7 @@ drawtext(const char *text, unsigned long col[ColLast], Bool invert) { y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; x = dc.x + (h / 2); /* shorten text if necessary */ - for(len = MIN(olen, sizeof buf); len && (i = textnw(buf, len)) > dc.w - h; len--); + for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--); if(!len) return; memcpy(buf, text, len); @@ -751,25 +751,27 @@ grabbuttons(Client *c, Bool focused) { void grabkeys(void) { unsigned int i, j; - unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; - KeyCode code; XModifierKeymap *modmap; - /* init modifier map */ + /* update modifier map */ modmap = XGetModifierMapping(dpy); for(i = 0; i < 8; i++) - for(j = 0; j < modmap->max_keypermod; j++) { + for(j = 0; j < modmap->max_keypermod; j++) if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) numlockmask = (1 << i); - } XFreeModifiermap(modmap); - XUngrabKey(dpy, AnyKey, AnyModifier, root); - for(i = 0; i < LENGTH(keys); i++) { - code = XKeysymToKeycode(dpy, keys[i].keysym); - for(j = 0; j < LENGTH(modifiers); j++) - XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, True, - GrabModeAsync, GrabModeAsync); + { /* grab keys */ + unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; + KeyCode code; + + XUngrabKey(dpy, AnyKey, AnyModifier, root); + for(i = 0; i < LENGTH(keys); i++) { + code = XKeysymToKeycode(dpy, keys[i].keysym); + for(j = 0; j < LENGTH(modifiers); j++) + XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, True, + GrabModeAsync, GrabModeAsync); + } } } @@ -779,8 +781,6 @@ initfont(const char *fontstr) { 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--) @@ -865,7 +865,7 @@ killclient(const Arg *arg) { void manage(Window w, XWindowAttributes *wa) { Client *c, *t = NULL; - Window trans = 0; + Window trans = None; XWindowChanges wc; if(!(c = calloc(1, sizeof(Client)))) @@ -909,7 +909,7 @@ manage(Window w, XWindowAttributes *wa) { else applyrules(c); if(!c->isfloating) - c->isfloating = trans || c->isfixed; + c->isfloating = trans != None || c->isfixed; if(c->isfloating) XRaiseWindow(dpy, c->win); attach(c); @@ -961,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: @@ -1000,6 +997,8 @@ movemouse(const Arg *arg) { break; } } + while(ev.type != ButtonRelease); + XUngrabPointer(dpy, CurrentTime); } Client * @@ -1128,15 +1127,9 @@ resizemouse(const Arg *arg) { None, cursor[CurResize], CurrentTime) != GrabSuccess) return; XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); - for(;;) { - XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask , &ev); + do { + XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); switch(ev.type) { - case ButtonRelease: - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, - c->w + c->bw - 1, c->h + c->bw - 1); - XUngrabPointer(dpy, CurrentTime); - while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); - return; case ConfigureRequest: case Expose: case MapRequest: @@ -1158,6 +1151,10 @@ resizemouse(const Arg *arg) { break; } } + while(ev.type != ButtonRelease); + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + XUngrabPointer(dpy, CurrentTime); + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } void @@ -1376,8 +1373,6 @@ setup(void) { XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); XSelectInput(dpy, root, wa.event_mask); - - /* grab keys */ grabkeys(); } @@ -1472,8 +1467,12 @@ togglefloating(const Arg *arg) { void toggletag(const Arg *arg) { - unsigned int mask = sel->tags ^ (arg->ui & TAGMASK); + unsigned int mask; + if (!sel) + return; + + mask = sel->tags ^ (arg->ui & TAGMASK); if(sel && mask) { sel->tags = mask; arrange();