commit 0ad9b7f35c4095dbf660eea549aec2d8f184816d
parent 037729224a42ea5b1133c47c6f860c6c0946e34d
Author: Enno Boland (tox) <tox@s01.de>
Date:   Wed, 23 Sep 2009 10:33:10 +0200
sorting functions alphabetic
Diffstat:
| M | tabbed.c | | | 142 | +++++++++++++++++++++++++++++++++++++++++-------------------------------------- | 
1 file changed, 74 insertions(+), 68 deletions(-)
diff --git a/tabbed.c b/tabbed.c
@@ -97,27 +97,29 @@ static void destroynotify(XEvent *e);
 static void die(const char *errstr, ...);
 static void drawbar();
 static void drawtext(const char *text, unsigned long col[ColLast]);
+static void *emallocz(size_t size);
 static void enternotify(XEvent *e);
 static void expose(XEvent *e);
 static void focus(Client *c);
 static void focusin(XEvent *e);
-static unsigned long getcolor(const char *colstr);
 static Client *getclient(Window w);
+static unsigned long getcolor(const char *colstr);
 static Client *getfirsttab();
 static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
-static Bool isprotodel(Client *c);
 static void initfont(const char *fontstr);
+static Bool isprotodel(Client *c);
 static void keypress(XEvent *e);
 static void killclient(const Arg *arg);
-static void move(const Arg *arg);
-static void spawn(const Arg *arg);
 static void manage(Window win);
+static void move(const Arg *arg);
 static void propertynotify(XEvent *e);
 static void reparentnotify(XEvent *e);
 static void resize(Client *c, int w, int h);
 static void rotate(const Arg *arg);
 static void run(void);
 static void setup(void);
+static void sigchld(int signal);
+static void spawn(const Arg *arg);
 static int textnw(const char *text, unsigned int len);
 static void unmanage(Client *c);
 static void unmapnotify(XEvent *e);
@@ -128,28 +130,27 @@ static int xerror(Display *dpy, XErrorEvent *ee);
 /* variables */
 static int screen;
 static void (*handler[LASTEvent]) (XEvent *) = {
-	[ConfigureNotify] = configurenotify,
-	[DestroyNotify] = destroynotify,
-	[PropertyNotify] = propertynotify,
-	[UnmapNotify] = unmapnotify,
 	[ButtonPress] = buttonpress,
-	[KeyPress] = keypress,
-	[Expose] = expose,
 	[ClientMessage] = clientmessage,
+	[ConfigureNotify] = configurenotify,
 	[CreateNotify] = createnotify,
-	[ReparentNotify] = reparentnotify,
+	[DestroyNotify] = destroynotify,
 	[EnterNotify] = enternotify,
+	[Expose] = expose,
 	[FocusIn] = focusin,
+	[KeyPress] = keypress,
+	[PropertyNotify] = propertynotify,
+	[ReparentNotify] = reparentnotify,
+	[UnmapNotify] = unmapnotify,
 };
+static int bh, wx, wy, ww, wh;
+static unsigned int numlockmask = 0;
+static Bool running = True, badwindow = False;
 static Display *dpy;
 static DC dc;
 static Atom wmatom[WMLast], netatom[NetLast], xembedatom;
 static Window root, win;
-static Bool running = True;
-static unsigned int numlockmask = 0;
-static unsigned bh, wx, wy, ww, wh;
 static Client *clients = NULL, *sel = NULL;
-static Bool badwindow = False;
 static int (*xerrorxlib)(Display *, XErrorEvent *);
 /* configuration, allows nested code to access above variables */
 #include "config.h"
@@ -322,7 +323,8 @@ emallocz(size_t size) {
 	return p;
 }
 
-void enternotify(XEvent *e) {
+void
+enternotify(XEvent *e) {
 	focus(sel);
 }
 
@@ -367,16 +369,6 @@ focusin(XEvent *e) {
 	focus(sel);
 }
 
-unsigned long
-getcolor(const char *colstr) {
-	Colormap cmap = DefaultColormap(dpy, screen);
-	XColor color;
-
-	if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
-		die("error, cannot allocate color '%s'\n", colstr);
-	return color.pixel;
-}
-
 Client *
 getclient(Window w) {
 	Client *c;
@@ -387,6 +379,16 @@ getclient(Window w) {
 	return NULL;
 }
 
+unsigned long
+getcolor(const char *colstr) {
+	Colormap cmap = DefaultColormap(dpy, screen);
+	XColor color;
+
+	if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
+		die("error, cannot allocate color '%s'\n", colstr);
+	return color.pixel;
+}
+
 Client *
 getfirsttab() {
 	unsigned int n, seli;
@@ -519,36 +521,6 @@ killclient(const Arg *arg) {
 }
 
 void
-move(const Arg *arg) {
-	int i;
-	Client *c;
-
-	for(i = 0, c = clients; c; c = c->next, i++) {
-		if(arg->i == i)
-			focus(c);
-	}
-}
-
-void
-sigchld(int signal) {
-	while(0 < waitpid(-1, NULL, WNOHANG));
-}
-
-
-void
-spawn(const Arg *arg) {
-	if(fork() == 0) {
-		if(dpy)
-			close(ConnectionNumber(dpy));
-		setsid();
-		execvp(((char **)arg->v)[0], (char **)arg->v);
-		fprintf(stderr, "tabbed: execvp %s", ((char **)arg->v)[0]);
-		perror(" failed");
-		exit(0);
-	}
-}
-
-void
 manage(Window w) {
 	updatenumlockmask();
 	{
@@ -596,6 +568,17 @@ manage(Window w) {
 }
 
 void
+move(const Arg *arg) {
+	int i;
+	Client *c;
+
+	for(i = 0, c = clients; c; c = c->next, i++) {
+		if(arg->i == i)
+			focus(c);
+	}
+}
+
+void
 propertynotify(XEvent *e) {
 	Client *c;
 	XPropertyEvent *ev = &e->xproperty;
@@ -606,7 +589,8 @@ propertynotify(XEvent *e) {
 	}
 }
 
-void reparentnotify(XEvent *e) {
+void
+reparentnotify(XEvent *e) {
 }
 
 void
@@ -663,6 +647,8 @@ run(void) {
 
 void
 setup(void) {
+	/* clean up any zombies immediately */
+	sigchld(0);
 	/* init screen */
 	screen = DefaultScreen(dpy);
 	root = RootWindow(dpy, screen);
@@ -702,6 +688,26 @@ setup(void) {
 	XSetClassHint(dpy, win, &class_hint);
 }
 
+void
+sigchld(int unused) {
+	if(signal(SIGCHLD, sigchld) == SIG_ERR)
+		die("Can't install SIGCHLD handler");
+	while(0 < waitpid(-1, NULL, WNOHANG));
+}
+
+void
+spawn(const Arg *arg) {
+	if(fork() == 0) {
+		if(dpy)
+			close(ConnectionNumber(dpy));
+		setsid();
+		execvp(((char **)arg->v)[0], (char **)arg->v);
+		fprintf(stderr, "tabbed: execvp %s", ((char **)arg->v)[0]);
+		perror(" failed");
+		exit(0);
+	}
+}
+
 int
 textnw(const char *text, unsigned int len) {
 	XRectangle r;
@@ -714,17 +720,6 @@ textnw(const char *text, unsigned int len) {
 }
 
 void
-unmapnotify(XEvent *e) {
-	Client *c;
-	XUnmapEvent *ev = &e->xunmap;
-
-	if((c = getclient(ev->window)))
-		unmanage(c);
-	else if(ev->window == win)
-		running = False;
-}
-
-void
 unmanage(Client *c) {
 	Client *pc;
 
@@ -742,6 +737,17 @@ unmanage(Client *c) {
 }
 
 void
+unmapnotify(XEvent *e) {
+	Client *c;
+	XUnmapEvent *ev = &e->xunmap;
+
+	if((c = getclient(ev->window)))
+		unmanage(c);
+	else if(ev->window == win)
+		running = False;
+}
+
+void
 updatenumlockmask(void) {
 	unsigned int i, j;
 	XModifierKeymap *modmap;