applied Brandon MacDone's static initialization patch for seltags and Client->tags
authorAnselm R. Garbe <garbeam@gmail.com>
Sat, 6 Oct 2007 17:43:15 +0000 (19:43 +0200)
committerAnselm R. Garbe <garbeam@gmail.com>
Sat, 6 Oct 2007 17:43:15 +0000 (19:43 +0200)
dwm.c

diff --git a/dwm.c b/dwm.c
index c9495ec..9e9e748 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -57,21 +57,6 @@ enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */
 
 /* typedefs */
 typedef struct Client Client;
-struct Client {
-       char name[256];
-       int x, y, w, h;
-       int rx, ry, rw, rh; /* revert geometry */
-       int basew, baseh, incw, inch, maxw, maxh, minw, minh;
-       int minax, maxax, minay, maxay;
-       long flags;
-       unsigned int border, oldborder;
-       Bool isbanned, isfixed, ismax, isfloating, wasfloating;
-       Bool *tags;
-       Client *next;
-       Client *prev;
-       Client *snext;
-       Window win;
-};
 
 typedef struct {
        int x, y, w, h;
@@ -195,7 +180,7 @@ char stext[256];
 double mwfact;
 int screen, sx, sy, sw, sh, wax, way, waw, wah;
 int (*xerrorxlib)(Display *, XErrorEvent *);
-unsigned int bh, bpos, ntags;
+unsigned int bh, bpos;
 unsigned int blw = 0;
 unsigned int ltidx = 0; /* default */
 unsigned int nlayouts = 0;
@@ -218,7 +203,6 @@ void (*handler[LASTEvent]) (XEvent *) = {
 Atom wmatom[WMLast], netatom[NetLast];
 Bool otherwm, readin;
 Bool running = True;
-Bool *seltags;
 Bool selscreen = True;
 Client *clients = NULL;
 Client *sel = NULL;
@@ -232,6 +216,26 @@ Regs *regs = NULL;
 /* configuration, allows nested code to access above variables */
 #include "config.h"
 
+/* Statically define the number of tags. */
+unsigned int ntags = sizeof tags / sizeof tags[0];
+Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
+
+struct Client {
+       char name[256];
+       int x, y, w, h;
+       int rx, ry, rw, rh; /* revert geometry */
+       int basew, baseh, incw, inch, maxw, maxh, minw, minh;
+       int minax, maxax, minay, maxay;
+       long flags;
+       unsigned int border, oldborder;
+       Bool isbanned, isfixed, ismax, isfloating, wasfloating;
+       Bool tags[sizeof tags / sizeof tags[0]];
+       Client *next;
+       Client *prev;
+       Client *snext;
+       Window win;
+};
+
 /* functions*/
 void
 applyrules(Client *c) {
@@ -393,7 +397,6 @@ cleanup(void) {
        XFreeCursor(dpy, cursor[CurMove]);
        XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
        XSync(dpy, False);
-       free(seltags);
 }
 
 void
@@ -1006,7 +1009,6 @@ manage(Window w, XWindowAttributes *wa) {
        XWindowChanges wc;
 
        c = emallocz(sizeof(Client));
-       c->tags = emallocz(ntags * sizeof(Bool));
        c->win = w;
        c->x = wa->x;
        c->y = wa->y;
@@ -1467,9 +1469,6 @@ setup(void) {
 
        /* init tags */
        compileregs();
-       ntags = sizeof tags / sizeof tags[0];
-       seltags = emallocz(sizeof(Bool) * ntags);
-       seltags[0] = True;
 
        /* init appearance */
        dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR);
@@ -1703,7 +1702,6 @@ unmanage(Client *c) {
                focus(NULL);
        XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
        setclientstate(c, WithdrawnState);
-       free(c->tags);
        free(c);
        XSync(dpy, False);
        XSetErrorHandler(xerror);