X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;ds=inline;f=dwm.c;h=f46f069a5ee5ecdff35fba985e769ceea3919d75;hb=0528a37c791aa8d7b6a5fb8e712a9ce4dfb1cd12;hp=5138752940ffd9b7473d35d12eff6eb8a0e36c2b;hpb=c3fa9e879f5beb5d3c37f4bbcae2306942929f13;p=dwm.git diff --git a/dwm.c b/dwm.c index 5138752..f46f069 100644 --- a/dwm.c +++ b/dwm.c @@ -61,6 +61,7 @@ enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */ /* typedefs */ typedef unsigned int uint; +typedef unsigned long ulong; typedef struct Client Client; struct Client { char name[256]; @@ -68,7 +69,7 @@ struct Client { int basew, baseh, incw, inch, maxw, maxh, minw, minh; int minax, maxax, minay, maxay; long flags; - uint bw, oldbw; + int bw, oldbw; Bool isbanned, isfixed, isfloating, isurgent; uint tags; Client *next; @@ -79,8 +80,8 @@ struct Client { typedef struct { int x, y, w, h; - unsigned long norm[ColLast]; - unsigned long sel[ColLast]; + ulong norm[ColLast]; + ulong sel[ColLast]; Drawable drawable; GC gc; struct { @@ -93,7 +94,7 @@ typedef struct { } DC; /* draw context */ typedef struct { - unsigned long mod; + uint mod; KeySym keysym; void (*func)(const void *arg); const void *arg; @@ -129,8 +130,8 @@ void destroynotify(XEvent *e); void detach(Client *c); void detachstack(Client *c); void drawbar(void); -void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]); -void drawtext(const char *text, unsigned long col[ColLast], Bool invert); +void drawsquare(Bool filled, Bool empty, Bool invert, ulong col[ColLast]); +void drawtext(const char *text, ulong col[ColLast], Bool invert); void *emallocz(uint size); void enternotify(XEvent *e); void eprint(const char *errstr, ...); @@ -140,7 +141,7 @@ void focusin(XEvent *e); void focusnext(const void *arg); void focusprev(const void *arg); Client *getclient(Window w); -unsigned long getcolor(const char *colstr); +ulong getcolor(const char *colstr); long getstate(Window w); Bool gettextprop(Window w, Atom atom, char *text, uint size); void grabbuttons(Client *c, Bool focused); @@ -156,7 +157,7 @@ void manage(Window w, XWindowAttributes *wa); void mappingnotify(XEvent *e); void maprequest(XEvent *e); void movemouse(Client *c); -Client *nextunfloating(Client *c); +Client *nexttiled(Client *c); void propertynotify(XEvent *e); void quit(const void *arg); void resize(Client *c, int x, int y, int w, int h, Bool sizehints); @@ -233,11 +234,10 @@ Window root, barwin; /* configuration, allows nested code to access above variables */ #include "config.h" -/* check if all tags will fit into a uint bitarray. */ -static char tags_is_a_sign_that_your_IQ[sizeof(int) * 8 < LENGTH(tags) ? -1 : 1]; +/* compile-time check if all tags fit into an uint bit array. */ +struct NumTags { char limitexceeded[sizeof(uint) * 8 < LENGTH(tags) ? -1 : 1]; }; /* function implementations */ - void applyrules(Client *c) { uint i; @@ -539,7 +539,7 @@ drawbar(void) { } void -drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) { +drawsquare(Bool filled, Bool empty, Bool invert, ulong col[ColLast]) { int x; XGCValues gcv; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; @@ -560,7 +560,7 @@ drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) { } void -drawtext(const char *text, unsigned long col[ColLast], Bool invert) { +drawtext(const char *text, ulong col[ColLast], Bool invert) { int x, y, w, h; uint len, olen; XRectangle r = { dc.x, dc.y, dc.w, dc.h }; @@ -707,7 +707,7 @@ getclient(Window w) { return c; } -unsigned long +ulong getcolor(const char *colstr) { Colormap cmap = DefaultColormap(dpy, screen); XColor color; @@ -722,7 +722,7 @@ getstate(Window w) { int format, status; long result = -1; unsigned char *p = NULL; - unsigned long n, extra; + ulong n, extra; Atom real; status = XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], @@ -1051,7 +1051,7 @@ movemouse(Client *c) { } Client * -nextunfloating(Client *c) { +nexttiled(Client *c) { for(; c && (c->isfloating || !isvisible(c)); c = c->next); return c; } @@ -1464,12 +1464,12 @@ tile(void) { uint i, n; Client *c; - for(n = 0, c = nextunfloating(clients); c; c = nextunfloating(c->next), n++); + for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next), n++); if(n == 0) return; /* master */ - c = nextunfloating(clients); + c = nexttiled(clients); if(n == 1) tileresize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw); @@ -1487,7 +1487,7 @@ tile(void) { if(h < bh) h = th; - for(i = 0, c = nextunfloating(c->next); c; c = nextunfloating(c->next), i++) { + for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) { if(i + 1 == n) /* remainder */ tileresize(c, x, y, w - 2 * c->bw, (ty + th) - y - 2 * c->bw); else @@ -1547,14 +1547,6 @@ togglelayout(const void *arg) { void toggletag(const void *arg) { - int i, m = *(int *)arg; - for(i = 0; i < sizeof(int) * 8; i++) - fputc(m & 1 << i ? '1' : '0', stdout); - puts(""); - for(i = 0; i < sizeof(int) * 8; i++) - fputc(TAGMASK & 1 << i ? '1' : '0', stdout); - puts("aaa"); - if(sel && (sel->tags ^ ((*(int *)arg) & TAGMASK))) { sel->tags ^= (*(int *)arg) & TAGMASK; arrange(); @@ -1789,14 +1781,14 @@ void zoom(const void *arg) { Client *c = sel; - if(c == nextunfloating(clients)) - if(!c || !(c = nextunfloating(c->next))) + if(!lt->arrange || sel->isfloating) + return; + if(c == nexttiled(clients)) + if(!c || !(c = nexttiled(c->next))) return; - if(lt->arrange == tile && !sel->isfloating) { - detach(c); - attach(c); - focus(c); - } + detach(c); + attach(c); + focus(c); arrange(); }