about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--config.arg.h6
-rw-r--r--config.default.h4
-rw-r--r--config.mk2
-rw-r--r--dwm.h8
-rw-r--r--event.c5
-rw-r--r--main.c4
-rw-r--r--view.c58
7 files changed, 52 insertions, 35 deletions
diff --git a/config.arg.h b/config.arg.h
index 21c95e5..def5068 100644
--- a/config.arg.h
+++ b/config.arg.h
@@ -6,9 +6,11 @@
 #define TAGS \
 const char *tags[] = { "dev", "work", "net", "fnord", NULL };
 
-#define DEFMODE			dotile /* dofloat */
+#define DEFMODE			dotile		/* dofloat */
 #define FLOATSYMBOL		"><>"
+#define STACKPOS		StackRight	/* StackLeft, StackBottom */
 #define TILESYMBOL		"[]="
+#define VERTICALSTACK		True		/* False == horizontal stack  */
 
 #define FONT			"-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
 #define NORMBGCOLOR		"#333333"
@@ -18,7 +20,7 @@ const char *tags[] = { "dev", "work", "net", "fnord", NULL };
 #define STATUSBGCOLOR		"#222222"
 #define STATUSFGCOLOR		"#9999cc"
 
-#define MASTERW			60 /* percent */
+#define MASTER			60 /* percent */
 #define MODKEY			Mod1Mask
 
 #define KEYS \
diff --git a/config.default.h b/config.default.h
index 2808ddb..9fd8792 100644
--- a/config.default.h
+++ b/config.default.h
@@ -8,7 +8,9 @@ const char *tags[] = { "1", "2", "3", "4", "5", NULL };
 
 #define DEFMODE			dotile /* dofloat */
 #define FLOATSYMBOL		"><>"
+#define STACKPOS		StackRight	/* StackLeft, StackBottom */
 #define TILESYMBOL		"[]="
+#define VERTICALSTACK		True		/* False == horizontal stack  */
 
 #define FONT			"fixed"
 #define NORMBGCOLOR		"#333366"
@@ -18,7 +20,7 @@ const char *tags[] = { "1", "2", "3", "4", "5", NULL };
 #define STATUSBGCOLOR		"#dddddd"
 #define STATUSFGCOLOR		"#222222"
 
-#define MASTERW			60 /* percent */
+#define MASTER			60 /* percent */
 #define MODKEY			Mod1Mask
 
 #define KEYS \
diff --git a/config.mk b/config.mk
index 3872652..e0a1668 100644
--- a/config.mk
+++ b/config.mk
@@ -1,5 +1,5 @@
 # dwm version
-VERSION = 1.7.1
+VERSION = 1.8
 
 # Customize below to fit your system
 
diff --git a/dwm.h b/dwm.h
index 234a734..0d2ed3f 100644
--- a/dwm.h
+++ b/dwm.h
@@ -48,6 +48,10 @@ enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */
 enum { ColFG, ColBG, ColLast };				/* color */
 
 typedef enum {
+	StackLeft, StackBottom, StackRight
+} StackPos; /* stack position*/
+
+typedef enum {
 	TopLeft, TopRight, BotLeft, BotRight
 } Corner; /* window corners */
 
@@ -97,16 +101,18 @@ struct Client {
 extern const char *tags[];			/* all tags */
 extern char stext[1024];			/* status text */
 extern int bx, by, bw, bh, bmw;			/* bar geometry, bar mode label width */
-extern int mw, screen, sx, sy, sw, sh;		/* screen geometry, master width */
+extern int master, screen, sx, sy, sw, sh;	/* screen geometry, master width */
 extern unsigned int ntags, numlockmask;		/* number of tags, dynamic lock mask */
 extern void (*handler[LASTEvent])(XEvent *);	/* event handler */
 extern void (*arrange)(Arg *);			/* arrange function, indicates mode  */
 extern Atom wmatom[WMLast], netatom[NetLast];
 extern Bool running, issel, *seltag;		/* seltag is array of Bool */
+extern Bool isvertical;				/* stack direction */
 extern Client *clients, *sel, *stack;		/* global client list and stack */
 extern Cursor cursor[CurLast];
 extern DC dc;					/* global draw context */
 extern Display *dpy;
+extern StackPos stackpos;
 extern Window root, barwin;
 
 /* client.c */
diff --git a/event.c b/event.c
index 2df3821..83e1b86 100644
--- a/event.c
+++ b/event.c
@@ -176,8 +176,11 @@ configurerequest(XEvent *e) {
 		else
 			configure(c);
 		XSync(dpy, False);
-		if(c->isfloat)
+		if(c->isfloat) {
 			resize(c, False, TopLeft);
+			if(!isvisible(c))
+				ban(c);
+		}
 		else
 			arrange(NULL);
 	}
diff --git a/main.c b/main.c
index 7cd3a32..a1fdde1 100644
--- a/main.c
+++ b/main.c
@@ -19,7 +19,7 @@
 
 char stext[1024];
 Bool *seltag;
-int bx, by, bw, bh, bmw, mw, screen, sx, sy, sw, sh;
+int bx, by, bw, bh, bmw, master, screen, sx, sy, sw, sh;
 unsigned int ntags, numlockmask;
 Atom wmatom[WMLast], netatom[NetLast];
 Bool running = True;
@@ -133,7 +133,7 @@ setup(void) {
 	sx = sy = 0;
 	sw = DisplayWidth(dpy, screen);
 	sh = DisplayHeight(dpy, screen);
-	mw = (sw * MASTERW) / 100;
+	master = ((stackpos == StackBottom ? sh - bh : sw) * MASTER) / 100;
 
 	bx = by = 0;
 	bw = sw;
diff --git a/view.c b/view.c
index d3378ff..90080fb 100644
--- a/view.c
+++ b/view.c
@@ -65,6 +65,8 @@ togglemax(Client *c)
 /* extern */
 
 void (*arrange)(Arg *) = DEFMODE;
+Bool isvertical = VERTICALSTACK;
+StackPos stackpos = STACKPOS;
 
 void
 detach(Client *c) {
@@ -97,35 +99,37 @@ dofloat(Arg *arg) {
 
 /* This algorithm is based on a (M)aster area and a (S)tacking area.
  * It supports following arrangements:
- *
- * 	MMMS		MMMM
- * 	MMMS		MMMM
- * 	MMMS		SSSS
- *
- * The stacking area can be set to arrange clients vertically or horizontally.
- * Through inverting the algorithm it can be used to achieve following setup in
- * a dual head environment (due to running two dwm instances concurrently on
- * the specific screen):
- *
- * 	SMM MMS		MMM MMM
- * 	SMM MMS		MMM MMM
- * 	SMM MMS		SSS SSS
- *
- * This uses the center of the two screens for master areas.
+ * 	MMMS		MMMM		SMMM
+ * 	MMMS		MMMM		SMMM
+ * 	MMMS		SSSS		SMMM
  */
 void
 dotile(Arg *arg) {
 	int h, i, n, w;
 	Client *c;
 
-	w = sw - mw;
 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
 		n++;
 
-	if(n > 1)
-		h = (sh - bh) / (n - 1);
-	else
-		h = sh - bh;
+	if(isvertical) {
+		if(stackpos == StackBottom) {
+			w = sw;
+			if(n > 1)
+				h = (sh - bh) / (n - 1);
+			else
+				h = sh - bh;
+		}
+		else {
+			w = sw - master;
+			if(n > 1)
+				h = (sh - bh) / (n - 1);
+			else
+				h = sh - bh;
+		}
+	}
+	else { /* horizontal stack */
+
+	}
 
 	for(i = 0, c = clients; c; c = c->next) {
 		if(isvisible(c)) {
@@ -143,11 +147,11 @@ dotile(Arg *arg) {
 			else if(i == 0) {
 				c->x = sx;
 				c->y = sy + bh;
-				c->w = mw - 2 * BORDERPX;
+				c->w = master - 2 * BORDERPX;
 				c->h = sh - 2 * BORDERPX - bh;
 			}
 			else if(h > bh) {
-				c->x = sx + mw;
+				c->x = sx + master;
 				c->y = sy + (i - 1) * h + bh;
 				c->w = w - 2 * BORDERPX;
 				if(i + 1 == n)
@@ -156,7 +160,7 @@ dotile(Arg *arg) {
 					c->h = h - 2 * BORDERPX;
 			}
 			else { /* fallback if h < bh */
-				c->x = sx + mw;
+				c->x = sx + master;
 				c->y = sy + bh;
 				c->w = w - 2 * BORDERPX;
 				c->h = sh - 2 * BORDERPX - bh;
@@ -228,14 +232,14 @@ resizecol(Arg *arg) {
 		return;
 
 	if(sel == getnext(clients)) {
-		if(mw + arg->i > sw - 100 || mw + arg->i < 100)
+		if(master + arg->i > sw - 100 || master + arg->i < 100)
 			return;
-		mw += arg->i;
+		master += arg->i;
 	}
 	else {
-		if(mw - arg->i > sw - 100 || mw - arg->i < 100)
+		if(master - arg->i > sw - 100 || master - arg->i < 100)
 			return;
-		mw -= arg->i;
+		master -= arg->i;
 	}
 	arrange(NULL);
 }
Dickey <dickey@invisible-island.net> 2018-03-09 01:45:26 +0000 committer Thomas E. Dickey <dickey@invisible-island.net> 2018-03-09 01:45:26 +0000 snapshot of project "lynx", label v2-8-9dev_16p' href='/ingrix/lynx-snapshots/commit/src/LYHash.c?id=82107ab8e0468191d32dfc0eb2b9e105c1a6aaff'>82107ab8 ^
f06f1fc3 ^


82107ab8 ^
f9d18278 ^
ac9f8d52 ^










f9d18278 ^

82107ab8 ^
f06f1fc3 ^
ac9f8d52 ^












f06f1fc3 ^

8cffae83 ^




























f06f1fc3 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144