JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
setmfact argument was wrong
[dwm.git] / dwm.c
diff --git a/dwm.c b/dwm.c
index 66a2cb4..53f0c12 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -60,6 +60,8 @@ enum { NetSupported, NetWMName, NetLast };              /* EWMH atoms */
 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];
@@ -67,9 +69,9 @@ struct Client {
        int basew, baseh, incw, inch, maxw, maxh, minw, minh;
        int minax, maxax, minay, maxay;
        long flags;
-       unsigned int bw, oldbw;
+       int bw, oldbw;
        Bool isbanned, isfixed, isfloating, isurgent;
-       unsigned int tags;
+       uint tags;
        Client *next;
        Client *prev;
        Client *snext;
@@ -78,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 {
@@ -92,10 +94,10 @@ typedef struct {
 } DC; /* draw context */
 
 typedef struct {
-       unsigned long mod;
+       uint mod;
        KeySym keysym;
-       void (*func)(void *arg);
-       void *arg;
+       void (*func)(const void *arg);
+       const void *arg;
 } Key;
 
 typedef struct {
@@ -108,7 +110,7 @@ typedef struct {
        const char *class;
        const char *instance;
        const char *title;
-       unsigned int tags;
+       uint tags;
        Bool isfloating;
 } Rule;
 
@@ -128,55 +130,55 @@ 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 *emallocz(unsigned int size);
+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, ...);
 void expose(XEvent *e);
 void focus(Client *c);
 void focusin(XEvent *e);
-void focusnext(void *arg);
-void focusprev(void *arg);
+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, unsigned int size);
+Bool gettextprop(Window w, Atom atom, char *text, uint size);
 void grabbuttons(Client *c, Bool focused);
 void grabkeys(void);
 void initfont(const char *fontstr);
-Bool isoccupied(unsigned int t);
+Bool isoccupied(uint t);
 Bool isprotodel(Client *c);
-Bool isurgent(unsigned int t);
+Bool isurgent(uint t);
 Bool isvisible(Client *c);
 void keypress(XEvent *e);
-void killclient(void *arg);
+void killclient(const void *arg);
 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(void *arg);
+void quit(const void *arg);
 void resize(Client *c, int x, int y, int w, int h, Bool sizehints);
 void resizemouse(Client *c);
 void restack(void);
 void run(void);
 void scan(void);
 void setclientstate(Client *c, long state);
-void setmfact(void *arg);
+void setmfact(const void *arg);
 void setup(void);
-void spawn(void *arg);
-void tag(void *arg);
-unsigned int textnw(const char *text, unsigned int len);
-unsigned int textw(const char *text);
+void spawn(const void *arg);
+void tag(const void *arg);
+uint textnw(const char *text, uint len);
+uint textw(const char *text);
 void tile(void);
 void tileresize(Client *c, int x, int y, int w, int h);
-void togglebar(void *arg);
-void togglefloating(void *arg);
-void togglelayout(void *arg);
-void toggletag(void *arg);
-void toggleview(void *arg);
+void togglebar(const void *arg);
+void togglefloating(const void *arg);
+void togglelayout(const void *arg);
+void toggletag(const void *arg);
+void toggleview(const void *arg);
 void unban(Client *c);
 void unmanage(Client *c);
 void unmapnotify(XEvent *e);
@@ -186,21 +188,21 @@ void updatesizehints(Client *c);
 void updatetilegeom(void);
 void updatetitle(Client *c);
 void updatewmhints(Client *c);
-void view(void *arg);
-void viewprevtag(void *arg);
+void view(const void *arg);
+void viewprevtag(const void *arg);
 int xerror(Display *dpy, XErrorEvent *ee);
 int xerrordummy(Display *dpy, XErrorEvent *ee);
 int xerrorstart(Display *dpy, XErrorEvent *ee);
-void zoom(void *arg);
+void zoom(const void *arg);
 
 /* variables */
 char stext[256];
 int screen, sx, sy, sw, sh;
 int bx, by, bw, bh, blw, wx, wy, ww, wh;
 int mx, my, mw, mh, tx, ty, tw, th;
-unsigned int seltags = 0;
+uint seltags = 0;
 int (*xerrorxlib)(Display *, XErrorEvent *);
-unsigned int numlockmask = 0;
+uint numlockmask = 0;
 void (*handler[LASTEvent]) (XEvent *) = {
        [ButtonPress] = buttonpress,
        [ConfigureRequest] = configurerequest,
@@ -218,7 +220,7 @@ void (*handler[LASTEvent]) (XEvent *) = {
 Atom wmatom[WMLast], netatom[NetLast];
 Bool otherwm, readin;
 Bool running = True;
-unsigned int tagset[] = {1, 1}; /* after start, first tag is selected */
+uint tagset[] = {1, 1}; /* after start, first tag is selected */
 Client *clients = NULL;
 Client *sel = NULL;
 Client *stack = NULL;
@@ -232,14 +234,14 @@ Window root, barwin;
 /* configuration, allows nested code to access above variables */
 #include "config.h"
 
-/* check if all tags will fit into a unsigned int bitarray. */
+/* 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];
 
 /* function implementations */
 
 void
 applyrules(Client *c) {
-       unsigned int i;
+       uint i;
        Rule *r;
        XClassHint ch = { 0 };
 
@@ -305,7 +307,7 @@ ban(Client *c) {
 
 void
 buttonpress(XEvent *e) {
-       unsigned int i, x, mask;
+       uint i, x, mask;
        Client *c;
        XButtonPressedEvent *ev = &e->xbutton;
 
@@ -538,7 +540,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 };
@@ -559,9 +561,9 @@ 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;
-       unsigned int len, olen;
+       uint len, olen;
        XRectangle r = { dc.x, dc.y, dc.w, dc.h };
        char buf[256];
 
@@ -596,7 +598,7 @@ drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
 }
 
 void *
-emallocz(unsigned int size) {
+emallocz(uint size) {
        void *res = calloc(1, size);
 
        if(!res)
@@ -667,7 +669,7 @@ focusin(XEvent *e) { /* there are some broken focus acquiring clients */
 }
 
 void
-focusnext(void *arg) {
+focusnext(const void *arg) {
        Client *c;
 
        if(!sel)
@@ -682,7 +684,7 @@ focusnext(void *arg) {
 }
 
 void
-focusprev(void *arg) {
+focusprev(const void *arg) {
        Client *c;
 
        if(!sel)
@@ -706,7 +708,7 @@ getclient(Window w) {
        return c;
 }
 
-unsigned long
+ulong
 getcolor(const char *colstr) {
        Colormap cmap = DefaultColormap(dpy, screen);
        XColor color;
@@ -721,7 +723,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],
@@ -735,7 +737,7 @@ getstate(Window w) {
 }
 
 Bool
-gettextprop(Window w, Atom atom, char *text, unsigned int size) {
+gettextprop(Window w, Atom atom, char *text, uint size) {
        char **list = NULL;
        int n;
        XTextProperty name;
@@ -763,8 +765,8 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) {
 void
 grabbuttons(Client *c, Bool focused) {
        int i, j;
-       unsigned int buttons[]   = { Button1, Button2, Button3 };
-       unsigned int modifiers[] = { MODKEY, MODKEY|LockMask, MODKEY|numlockmask,
+       uint buttons[]   = { Button1, Button2, Button3 };
+       uint modifiers[] = { MODKEY, MODKEY|LockMask, MODKEY|numlockmask,
                                MODKEY|numlockmask|LockMask} ;
 
        XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
@@ -780,7 +782,7 @@ grabbuttons(Client *c, Bool focused) {
 
 void
 grabkeys(void) {
-       unsigned int i, j;
+       uint i, j;
        KeyCode code;
        XModifierKeymap *modmap;
 
@@ -848,7 +850,7 @@ initfont(const char *fontstr) {
 }
 
 Bool
-isoccupied(unsigned int t) {
+isoccupied(uint t) {
        Client *c;
 
        for(c = clients; c; c = c->next)
@@ -873,7 +875,7 @@ isprotodel(Client *c) {
 }
 
 Bool
-isurgent(unsigned int t) {
+isurgent(uint t) {
        Client *c;
 
        for(c = clients; c; c = c->next)
@@ -889,7 +891,7 @@ isvisible(Client *c) {
 
 void
 keypress(XEvent *e) {
-       unsigned int i;
+       uint i;
        KeySym keysym;
        XKeyEvent *ev;
 
@@ -905,7 +907,7 @@ keypress(XEvent *e) {
 }
 
 void
-killclient(void *arg) {
+killclient(const void *arg) {
        XEvent ev;
 
        if(!sel)
@@ -1004,7 +1006,7 @@ maprequest(XEvent *e) {
 void
 movemouse(Client *c) {
        int x1, y1, ocx, ocy, di, nx, ny;
-       unsigned int dui;
+       uint dui;
        Window dummy;
        XEvent ev;
 
@@ -1050,7 +1052,7 @@ movemouse(Client *c) {
 }
 
 Client *
-nextunfloating(Client *c) {
+nexttiled(Client *c) {
        for(; c && (c->isfloating || !isvisible(c)); c = c->next);
        return c;
 }
@@ -1088,7 +1090,7 @@ propertynotify(XEvent *e) {
 }
 
 void
-quit(void *arg) {
+quit(const void *arg) {
        readin = running = False;
 }
 
@@ -1230,7 +1232,7 @@ run(void) {
        char sbuf[sizeof stext];
        fd_set rd;
        int r, xfd;
-       unsigned int len, offset;
+       uint len, offset;
        XEvent ev;
 
        /* main event loop, also reads status text from stdin */
@@ -1286,7 +1288,7 @@ run(void) {
 
 void
 scan(void) {
-       unsigned int i, num;
+       uint i, num;
        Window *wins, d1, d2;
        XWindowAttributes wa;
 
@@ -1321,7 +1323,7 @@ setclientstate(Client *c, long state) {
 
 /* arg > 1.0 will set mfact absolutly */
 void
-setmfact(void *arg) {
+setmfact(const void *arg) {
        double d = *((double*) arg);
 
        if(!d || lt->arrange != tile)
@@ -1336,7 +1338,7 @@ setmfact(void *arg) {
 
 void
 setup(void) {
-       unsigned int i, w;
+       uint i, w;
        XSetWindowAttributes wa;
 
        /* init screen */
@@ -1412,7 +1414,7 @@ setup(void) {
 }
 
 void
-spawn(void *arg) {
+spawn(const void *arg) {
        static char *shell = NULL;
 
        if(!shell && !(shell = getenv("SHELL")))
@@ -1434,15 +1436,15 @@ spawn(void *arg) {
 }
 
 void
-tag(void *arg) {
+tag(const void *arg) {
        if(sel && *(int *)arg & TAGMASK) {
                sel->tags = *(int *)arg & TAGMASK;
                arrange();
        }
 }
 
-unsigned int
-textnw(const char *text, unsigned int len) {
+uint
+textnw(const char *text, uint len) {
        XRectangle r;
 
        if(dc.font.set) {
@@ -1452,7 +1454,7 @@ textnw(const char *text, unsigned int len) {
        return XTextWidth(dc.font.xfont, text, len);
 }
 
-unsigned int
+uint
 textw(const char *text) {
        return textnw(text, strlen(text)) + dc.font.height;
 }
@@ -1460,15 +1462,15 @@ textw(const char *text) {
 void
 tile(void) {
        int x, y, h, w;
-       unsigned int i, n;
+       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);
@@ -1486,7 +1488,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
@@ -1505,7 +1507,7 @@ tileresize(Client *c, int x, int y, int w, int h) {
 }
 
 void
-togglebar(void *arg) {
+togglebar(const void *arg) {
        showbar = !showbar;
        updategeom();
        updatebar();
@@ -1513,7 +1515,7 @@ togglebar(void *arg) {
 }
 
 void
-togglefloating(void *arg) {
+togglefloating(const void *arg) {
        if(!sel)
                return;
        sel->isfloating = !sel->isfloating;
@@ -1523,8 +1525,8 @@ togglefloating(void *arg) {
 }
 
 void
-togglelayout(void *arg) {
-       unsigned int i;
+togglelayout(const void *arg) {
+       uint i;
 
        if(!arg) {
                if(++lt == &layouts[LENGTH(layouts)])
@@ -1545,7 +1547,7 @@ togglelayout(void *arg) {
 }
 
 void
-toggletag(void *arg) {
+toggletag(const void *arg) {
        int i, m = *(int *)arg;
        for(i = 0; i < sizeof(int) * 8; i++)
                fputc(m & 1 << i ? '1' : '0', stdout);
@@ -1561,7 +1563,7 @@ toggletag(void *arg) {
 }
 
 void
-toggleview(void *arg) {
+toggleview(const void *arg) {
        if((tagset[seltags] ^ ((*(int *)arg) & TAGMASK))) {
                tagset[seltags] ^= (*(int *)arg) & TAGMASK;
                arrange();
@@ -1737,7 +1739,7 @@ updatewmhints(Client *c) {
 }
 
 void
-view(void *arg) {
+view(const void *arg) {
        if(*(int *)arg & TAGMASK) {
                seltags ^= 1; /* toggle sel tagset */
                tagset[seltags] = *(int *)arg & TAGMASK;
@@ -1746,7 +1748,7 @@ view(void *arg) {
 }
 
 void
-viewprevtag(void *arg) {
+viewprevtag(const void *arg) {
        seltags ^= 1; /* toggle sel tagset */
        arrange();
 }
@@ -1785,17 +1787,17 @@ xerrorstart(Display *dpy, XErrorEvent *ee) {
 }
 
 void
-zoom(void *arg) {
+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();
 }