about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAnselm R. Garbe <arg@suckless.org>2007-02-20 10:49:53 +0100
committerAnselm R. Garbe <arg@suckless.org>2007-02-20 10:49:53 +0100
commit8012fcf3334148d2b39646fd372a7514cc74c250 (patch)
tree157855dd25044e50f7696eb57655c88c6069ac2e
parent6bc4556ebd7f48f52f9a446e53d1705d8fd79b27 (diff)
downloaddwm-8012fcf3334148d2b39646fd372a7514cc74c250.tar.gz
split screen.c into layout.c and tag.c (because the view is an implicit mixture of both)
-rw-r--r--Makefile2
-rw-r--r--dwm.h18
-rw-r--r--layout.c (renamed from screen.c)143
-rw-r--r--tag.c149
4 files changed, 160 insertions, 152 deletions
diff --git a/Makefile b/Makefile
index 221efa4..4af6a3d 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
 
 include config.mk
 
-SRC = client.c event.c main.c screen.c util.c
+SRC = client.c event.c layout.c main.c tag.c util.c
 OBJ = ${SRC:.c=.o}
 
 all: options dwm
diff --git a/dwm.h b/dwm.h
index d4cc1fa..822f959 100644
--- a/dwm.h
+++ b/dwm.h
@@ -120,6 +120,15 @@ extern void zoom(Arg *arg);			/* zooms the focused client to master area, arg is
 /* event.c */
 extern void grabkeys(void);			/* grab all keys defined in config.h */
 
+/* layout.c */
+extern void incnmaster(Arg *arg);		/* increments nmaster with arg's index value */
+extern void initlayouts(void);			/* initialize layout array */
+extern void resizemaster(Arg *arg);		/* resizes the master percent with arg's index value */
+extern void restack(void);			/* restores z layers of all clients */
+extern void setlayout(Arg *arg);		/* sets layout, -1 toggles */
+extern void toggleversatile(Arg *arg);		/* toggles focusesd client between versatile/and non-versatile state */
+extern void versatile(void);			/* arranges all windows versatile */
+
 /* main.c */
 extern void drawstatus(void);			/* draw the bar */
 extern unsigned int textw(const char *text);	/* return the width of text in px*/
@@ -127,20 +136,13 @@ extern void quit(Arg *arg);			/* quit dwm nicely */
 extern void sendevent(Window w, Atom a, long value);	/* send synthetic event to w */
 extern int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */
 
-/* screen.c */
+/* tag.c */
 extern void compileregs(void);			/* initialize regexps of rules defined in config.h */
-extern void incnmaster(Arg *arg);		/* increments nmaster with arg's index value */
-extern void initlayouts(void);			/* initialize layout array */
 extern Bool isvisible(Client *c);		/* returns True if client is visible */
-extern void resizemaster(Arg *arg);		/* resizes the master percent with arg's index value */
-extern void restack(void);			/* restores z layers of all clients */
-extern void setlayout(Arg *arg);		/* sets layout, -1 toggles */
 extern void settags(Client *c, Client *trans);	/* sets tags of c */
 extern void tag(Arg *arg);			/* tags c with arg's index */
-extern void toggleversatile(Arg *arg);		/* toggles focusesd client between versatile/and non-versatile state */
 extern void toggletag(Arg *arg);		/* toggles c tags with arg's index */
 extern void toggleview(Arg *arg);		/* toggles the tag with arg's index (in)visible */
-extern void versatile(void);			/* arranges all windows versatile */
 extern void view(Arg *arg);			/* views the tag with arg's index */
 
 /* util.c */
diff --git a/screen.c b/layout.c
index 8abe3d7..d754afb 100644
--- a/screen.c
+++ b/layout.c
@@ -2,12 +2,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-#include <regex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <X11/Xutil.h>
 
 unsigned int master = MASTER;
 unsigned int nmaster = NMASTER;
@@ -16,22 +10,6 @@ Layout *lt = NULL;
 
 /* static */
 
-typedef struct {
-	const char *prop;
-	const char *tags;
-	Bool isversatile;
-} Rule;
-
-typedef struct {
-	regex_t *propregex;
-	regex_t *tagregex;
-} Regs;
-
-TAGS
-RULES
-
-static Regs *regs = NULL;
-static unsigned int nrules = 0;
 static unsigned int nlayouts = 0;
 
 static void
@@ -91,33 +69,6 @@ LAYOUTS
 /* extern */
 
 void
-compileregs(void) {
-	unsigned int i;
-	regex_t *reg;
-
-	if(regs)
-		return;
-	nrules = sizeof rule / sizeof rule[0];
-	regs = emallocz(nrules * sizeof(Regs));
-	for(i = 0; i < nrules; i++) {
-		if(rule[i].prop) {
-			reg = emallocz(sizeof(regex_t));
-			if(regcomp(reg, rule[i].prop, REG_EXTENDED))
-				free(reg);
-			else
-				regs[i].propregex = reg;
-		}
-		if(rule[i].tags) {
-			reg = emallocz(sizeof(regex_t));
-			if(regcomp(reg, rule[i].tags, REG_EXTENDED))
-				free(reg);
-			else
-				regs[i].tagregex = reg;
-		}
-	}
-}
-
-void
 incnmaster(Arg *arg) {
 	if((lt->arrange != tile) || (nmaster + arg->i < 1)
 	|| (wah / (nmaster + arg->i) <= 2 * BORDERPX))
@@ -142,16 +93,6 @@ initlayouts(void) {
 	}
 }
 
-Bool
-isvisible(Client *c) {
-	unsigned int i;
-
-	for(i = 0; i < ntags; i++)
-		if(c->tags[i] && seltag[i])
-			return True;
-	return False;
-}
-
 void
 resizemaster(Arg *arg) {
 	if(lt->arrange != tile)
@@ -213,68 +154,6 @@ setlayout(Arg *arg) {
 }
 
 void
-settags(Client *c, Client *trans) {
-	char prop[512];
-	unsigned int i, j;
-	regmatch_t tmp;
-	Bool matched = trans != NULL;
-	XClassHint ch = { 0 };
-
-	if(matched)
-		for(i = 0; i < ntags; i++)
-			c->tags[i] = trans->tags[i];
-	else {
-		XGetClassHint(dpy, c->win, &ch);
-		snprintf(prop, sizeof prop, "%s:%s:%s",
-				ch.res_class ? ch.res_class : "",
-				ch.res_name ? ch.res_name : "", c->name);
-		for(i = 0; i < nrules; i++)
-			if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) {
-				c->isversatile = rule[i].isversatile;
-				for(j = 0; regs[i].tagregex && j < ntags; j++) {
-					if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
-						matched = True;
-						c->tags[j] = True;
-					}
-				}
-			}
-		if(ch.res_class)
-			XFree(ch.res_class);
-		if(ch.res_name)
-			XFree(ch.res_name);
-	}
-	if(!matched)
-		for(i = 0; i < ntags; i++)
-			c->tags[i] = seltag[i];
-}
-
-void
-tag(Arg *arg) {
-	unsigned int i;
-
-	if(!sel)
-		return;
-	for(i = 0; i < ntags; i++)
-		sel->tags[i] = (arg->i == -1) ? True : False;
-	if(arg->i >= 0 && arg->i < ntags)
-		sel->tags[arg->i] = True;
-	lt->arrange();
-}
-
-void
-toggletag(Arg *arg) {
-	unsigned int i;
-
-	if(!sel)
-		return;
-	sel->tags[arg->i] = !sel->tags[arg->i];
-	for(i = 0; i < ntags && !sel->tags[i]; i++);
-	if(i == ntags)
-		sel->tags[arg->i] = True;
-	lt->arrange();
-}
-
-void
 toggleversatile(Arg *arg) {
 	if(!sel || lt->arrange == versatile)
 		return;
@@ -283,17 +162,6 @@ toggleversatile(Arg *arg) {
 }
 
 void
-toggleview(Arg *arg) {
-	unsigned int i;
-
-	seltag[arg->i] = !seltag[arg->i];
-	for(i = 0; i < ntags && !seltag[i]; i++);
-	if(i == ntags)
-		seltag[arg->i] = True; /* cannot toggle last view */
-	lt->arrange();
-}
-
-void
 versatile(void) {
 	Client *c;
 
@@ -315,14 +183,3 @@ versatile(void) {
 	}
 	restack();
 }
-
-void
-view(Arg *arg) {
-	unsigned int i;
-
-	for(i = 0; i < ntags; i++)
-		seltag[i] = (arg->i == -1) ? True : False;
-	if(arg->i >= 0 && arg->i < ntags)
-		seltag[arg->i] = True;
-	lt->arrange();
-}
diff --git a/tag.c b/tag.c
new file mode 100644
index 0000000..f54ac3f
--- /dev/null
+++ b/tag.c
@@ -0,0 +1,149 @@
+/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+#include "dwm.h"
+#include <regex.h>
+#include <stdio.h>
+#include <X11/Xutil.h>
+
+/* static */
+
+typedef struct {
+	const char *prop;
+	const char *tags;
+	Bool isversatile;
+} Rule;
+
+typedef struct {
+	regex_t *propregex;
+	regex_t *tagregex;
+} Regs;
+
+TAGS
+RULES
+
+static Regs *regs = NULL;
+static unsigned int nrules = 0;
+
+/* extern */
+
+void
+compileregs(void) {
+	unsigned int i;
+	regex_t *reg;
+
+	if(regs)
+		return;
+	nrules = sizeof rule / sizeof rule[0];
+	regs = emallocz(nrules * sizeof(Regs));
+	for(i = 0; i < nrules; i++) {
+		if(rule[i].prop) {
+			reg = emallocz(sizeof(regex_t));
+			if(regcomp(reg, rule[i].prop, REG_EXTENDED))
+				free(reg);
+			else
+				regs[i].propregex = reg;
+		}
+		if(rule[i].tags) {
+			reg = emallocz(sizeof(regex_t));
+			if(regcomp(reg, rule[i].tags, REG_EXTENDED))
+				free(reg);
+			else
+				regs[i].tagregex = reg;
+		}
+	}
+}
+
+Bool
+isvisible(Client *c) {
+	unsigned int i;
+
+	for(i = 0; i < ntags; i++)
+		if(c->tags[i] && seltag[i])
+			return True;
+	return False;
+}
+
+void
+settags(Client *c, Client *trans) {
+	char prop[512];
+	unsigned int i, j;
+	regmatch_t tmp;
+	Bool matched = trans != NULL;
+	XClassHint ch = { 0 };
+
+	if(matched)
+		for(i = 0; i < ntags; i++)
+			c->tags[i] = trans->tags[i];
+	else {
+		XGetClassHint(dpy, c->win, &ch);
+		snprintf(prop, sizeof prop, "%s:%s:%s",
+				ch.res_class ? ch.res_class : "",
+				ch.res_name ? ch.res_name : "", c->name);
+		for(i = 0; i < nrules; i++)
+			if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) {
+				c->isversatile = rule[i].isversatile;
+				for(j = 0; regs[i].tagregex && j < ntags; j++) {
+					if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
+						matched = True;
+						c->tags[j] = True;
+					}
+				}
+			}
+		if(ch.res_class)
+			XFree(ch.res_class);
+		if(ch.res_name)
+			XFree(ch.res_name);
+	}
+	if(!matched)
+		for(i = 0; i < ntags; i++)
+			c->tags[i] = seltag[i];
+}
+
+void
+tag(Arg *arg) {
+	unsigned int i;
+
+	if(!sel)
+		return;
+	for(i = 0; i < ntags; i++)
+		sel->tags[i] = (arg->i == -1) ? True : False;
+	if(arg->i >= 0 && arg->i < ntags)
+		sel->tags[arg->i] = True;
+	lt->arrange();
+}
+
+void
+toggletag(Arg *arg) {
+	unsigned int i;
+
+	if(!sel)
+		return;
+	sel->tags[arg->i] = !sel->tags[arg->i];
+	for(i = 0; i < ntags && !sel->tags[i]; i++);
+	if(i == ntags)
+		sel->tags[arg->i] = True;
+	lt->arrange();
+}
+
+void
+toggleview(Arg *arg) {
+	unsigned int i;
+
+	seltag[arg->i] = !seltag[arg->i];
+	for(i = 0; i < ntags && !seltag[i]; i++);
+	if(i == ntags)
+		seltag[arg->i] = True; /* cannot toggle last view */
+	lt->arrange();
+}
+
+void
+view(Arg *arg) {
+	unsigned int i;
+
+	for(i = 0; i < ntags; i++)
+		seltag[i] = (arg->i == -1) ? True : False;
+	if(arg->i >= 0 && arg->i < ntags)
+		seltag[arg->i] = True;
+	lt->arrange();
+}