made fullscreen apps working fine in floating mode (there is no sane way to make them work in tiled mode, thus I switch to floating mode if I run such kind of app), also fixed the xterm issue reported by Sander
authorarg@10ksloc.org
Wed, 02 Aug 2006 16:32:05 +0200
changeset 164 21071ae1fe68
parent 163 e2e1de08341d
child 165 4d828b431b72
made fullscreen apps working fine in floating mode (there is no sane way to make them work in tiled mode, thus I switch to floating mode if I run such kind of app), also fixed the xterm issue reported by Sander
client.c
config.arg.h
config.h
draw.c
dwm.h
event.c
main.c
tag.c
util.c
--- a/client.c	Wed Aug 02 13:05:04 2006 +0200
+++ b/client.c	Wed Aug 02 16:32:05 2006 +0200
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdlib.h>
 #include <string.h>
 #include <X11/Xatom.h>
@@ -219,7 +218,7 @@
 	c->h = wa->height;
 	c->th = bh;
 
-	c->border = 1;
+	c->border = 0;
 	setsize(c);
 
 	if(c->h != sh && c->y < bh)
@@ -254,8 +253,7 @@
 	if(!c->isfloat)
 		c->isfloat = trans
 			|| (c->maxw && c->minw &&
-				c->maxw == c->minw && c->maxh == c->minh)
-			|| (c->w == sw && c->h == sh);
+				c->maxw == c->minw && c->maxh == c->minh);
 	settitle(c);
 	arrange(NULL);
 
@@ -271,7 +269,7 @@
 {
 	int bottom = c->y + c->h;
 	int right = c->x + c->w;
-	XConfigureEvent e;
+	/*XConfigureEvent e;*/
 	XWindowChanges wc;
 
 	if(sizehints) {
@@ -302,21 +300,11 @@
 	wc.y = c->y;
 	wc.width = c->w;
 	wc.height = c->h;
-	wc.border_width = 1;
-	XConfigureWindow(dpy, c->win,
-			CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
-
-	e.type = ConfigureNotify;
-	e.event = c->win;
-	e.window = c->win;
-	e.x = c->x;
-	e.y = c->y;
-	e.width = c->w;
-	e.height = c->h;
-	e.border_width = c->border;
-	e.above = None;
-	e.override_redirect = False;
-	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
+	if(c->w == sw && c->h == sh)
+		wc.border_width = 0;
+	else
+		wc.border_width = 1;
+	XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
 	XSync(dpy, False);
 }
 
@@ -403,8 +391,8 @@
 		oh = sel->h;
 		sel->x = sx;
 		sel->y = sy + bh;
-		sel->w = sw - 2 * sel->border;
-		sel->h = sh - 2 * sel->border - bh;
+		sel->w = sw - 2;
+		sel->h = sh - 2 - bh;
 
 		higher(sel);
 		resize(sel, False, TopLeft);
--- a/config.arg.h	Wed Aug 02 13:05:04 2006 +0200
+++ b/config.arg.h	Wed Aug 02 16:32:05 2006 +0200
@@ -3,15 +3,6 @@
  * See LICENSE file for license details.
  */
 
-#define DEFMODE			dotile /* dofloat */
-#define FONT			"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
-#define BGCOLOR			"#0a2c2d"
-#define FGCOLOR			"#ddeeee"
-#define BORDERCOLOR		"#176164"
-#define MODKEY			Mod1Mask
-#define NUMLOCKMASK		Mod2Mask
-#define MASTERW			52 /* percent */
-
 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 #define TAGS \
 char *tags[TLast] = { \
@@ -21,7 +12,16 @@
 	[Twork] = "work", \
 	[Tmisc] = "misc", \
 };
+
+#define DEFMODE			dotile /* dofloat */
 #define DEFTAG			Tdev
+#define FONT			"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
+#define BGCOLOR			"#0a2c2d"
+#define FGCOLOR			"#ddeeee"
+#define BORDERCOLOR		"#176164"
+#define MODKEY			Mod1Mask
+#define NUMLOCKMASK		Mod2Mask
+#define MASTERW			52 /* percent */
 
 #define KEYS \
 	const char *browse[] = { "firefox", NULL }; \
--- a/config.h	Wed Aug 02 13:05:04 2006 +0200
+++ b/config.h	Wed Aug 02 16:32:05 2006 +0200
@@ -3,15 +3,6 @@
  * See LICENSE file for license details.
  */
 
-#define DEFMODE			dotile /* dofloat */
-#define FONT			"fixed"
-#define BGCOLOR			"#666699"
-#define FGCOLOR			"#eeeeee"
-#define BORDERCOLOR		"#9999CC"
-#define MODKEY			Mod1Mask
-#define NUMLOCKMASK		Mod2Mask
-#define MASTERW			52 /* percent */
-
 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 #define TAGS \
 char *tags[TLast] = { \
@@ -21,7 +12,16 @@
 	[Twork] = "work", \
 	[Tmisc] = "misc", \
 };
+
+#define DEFMODE			dotile /* dofloat */
 #define DEFTAG			Tdev
+#define FONT			"fixed"
+#define BGCOLOR			"#666699"
+#define FGCOLOR			"#eeeeee"
+#define BORDERCOLOR		"#9999CC"
+#define MODKEY			Mod1Mask
+#define NUMLOCKMASK		Mod2Mask
+#define MASTERW			52 /* percent */
 
 #define KEYS \
 	const char *term[] = { "xterm", NULL }; \
--- a/draw.c	Wed Aug 02 13:05:04 2006 +0200
+++ b/draw.c	Wed Aug 02 16:32:05 2006 +0200
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdio.h>
 #include <string.h>
 #include <X11/Xlocale.h>
--- a/dwm.h	Wed Aug 02 13:05:04 2006 +0200
+++ b/dwm.h	Wed Aug 02 16:32:05 2006 +0200
@@ -3,8 +3,8 @@
  * See LICENSE file for license details.
  */
 
+#include CONFIG
 #include <X11/Xlib.h>
-#include CONFIG
 
 /* mask shorthands, used in event.c and client.c */
 #define BUTTONMASK		(ButtonPressMask | ButtonReleaseMask)
@@ -57,8 +57,8 @@
 	int tx, ty, tw, th; /* title */
 	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
 	int grav;
+	long flags; 
 	unsigned int border;
-	long flags; 
 	Bool isfloat;
 	Bool ismax;
 	Client *next;
--- a/event.c	Wed Aug 02 13:05:04 2006 +0200
+++ b/event.c	Wed Aug 02 16:32:05 2006 +0200
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdlib.h>
 #include <X11/keysym.h>
 #include <X11/Xatom.h>
@@ -151,32 +150,60 @@
 {
 	Client *c;
 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
+	XEvent synev;
 	XWindowChanges wc;
+	unsigned long newmask;
 
-	ev->value_mask &= ~CWSibling;
 	if((c = getclient(ev->window))) {
 		gravitate(c, True);
-		if(ev->value_mask & CWX)
-			c->x = ev->x;
-		if(ev->value_mask & CWY)
-			c->y = ev->y;
-		if(ev->value_mask & CWWidth)
-			c->w = ev->width;
-		if(ev->value_mask & CWHeight)
-			c->h = ev->height;
+		if(c->isfloat) {
+			if(ev->value_mask & CWX)
+				c->x = ev->x;
+			if(ev->value_mask & CWY)
+				c->y = ev->y;
+			if(ev->value_mask & CWWidth)
+				c->w = ev->width;
+			if(ev->value_mask & CWHeight)
+				c->h = ev->height;
+		}
 		if(ev->value_mask & CWBorderWidth)
-			c->border = 1;
+			c->border = ev->border_width;
 		gravitate(c, False);
+
 		resize(c, True, TopLeft);
-	}
 
-	wc.x = ev->x;
-	wc.y = ev->y;
-	wc.width = ev->width;
-	wc.height = ev->height;
-	wc.border_width = 1;
-	XConfigureWindow(dpy, ev->window,
-			CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
+		wc.x = c->x;
+		wc.y = c->y;
+		wc.width = c->w;
+		wc.height = c->h;
+		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
+		if(newmask)
+			XConfigureWindow(dpy, c->win, newmask, &wc);
+		else {
+			synev.type = ConfigureNotify;
+			synev.xconfigure.display = dpy;
+			synev.xconfigure.event = c->win;
+			synev.xconfigure.window = c->win;
+			synev.xconfigure.x = c->x;
+			synev.xconfigure.y = c->y;
+			synev.xconfigure.width = c->w;
+			synev.xconfigure.height = c->h;
+			synev.xconfigure.border_width = c->border;
+			synev.xconfigure.above = None;
+			/* Send synthetic ConfigureNotify */
+			XSendEvent(dpy, c->win, True, NoEventMask, &synev);
+		}
+	}
+	else {
+		wc.x = ev->x;
+		wc.y = ev->y;
+		wc.width = ev->width;
+		wc.height = ev->height;
+		wc.border_width = ev->border_width;
+		wc.sibling = ev->above;
+		wc.stack_mode = ev->detail;
+		XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
+	}
 	XSync(dpy, False);
 }
 
--- a/main.c	Wed Aug 02 13:05:04 2006 +0200
+++ b/main.c	Wed Aug 02 16:32:05 2006 +0200
@@ -4,7 +4,6 @@
  */
 
 #include "dwm.h"
-
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -15,7 +14,6 @@
 #include <X11/Xatom.h>
 #include <X11/Xproto.h>
 
-
 /* static */
 
 static int (*xerrorxlib)(Display *, XErrorEvent *);
@@ -165,6 +163,7 @@
 	int i;
 	unsigned int mask;
 	fd_set rd;
+	Bool readin = True;
 	Window w;
 	XEvent ev;
 	XSetWindowAttributes wa;
@@ -251,7 +250,8 @@
 	/* main event loop, reads status text from stdin as well */
 	while(running) {
 		FD_ZERO(&rd);
-		FD_SET(STDIN_FILENO, &rd);
+		if(readin)
+			FD_SET(STDIN_FILENO, &rd);
 		FD_SET(ConnectionNumber(dpy), &rd);
 
 		i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
@@ -267,11 +267,12 @@
 						(handler[ev.type])(&ev); /* call handler */
 				}
 			}
-			if(FD_ISSET(STDIN_FILENO, &rd)) {
-				if(!fgets(stext, sizeof(stext), stdin))
-					break;
+			if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
+				readin = NULL != fgets(stext, sizeof(stext), stdin);
+				if(readin)
+					stext[strlen(stext) - 1] = 0;
 				else 
-					stext[strlen(stext) - 1] = 0;
+					strcpy(stext, "broken pipe");
 				drawstatus();
 			}
 		}
--- a/tag.c	Wed Aug 02 13:05:04 2006 +0200
+++ b/tag.c	Wed Aug 02 16:32:05 2006 +0200
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <regex.h>
 #include <stdio.h>
 #include <string.h>
@@ -86,26 +85,26 @@
 			if(n == 1) {
 				c->x = sx;
 				c->y = sy + bh;
-				c->w = sw - 2 * c->border;
-				c->h = sh - 2 * c->border - bh;
+				c->w = sw - 2;
+				c->h = sh - 2 - bh;
 			}
 			else if(i == 0) {
 				c->x = sx;
 				c->y = sy + bh;
-				c->w = mw - 2 * c->border;
-				c->h = sh - 2 * c->border - bh;
+				c->w = mw - 2;
+				c->h = sh - 2 - bh;
 			}
 			else if(h > bh) {
 				c->x = sx + mw;
 				c->y = sy + (i - 1) * h + bh;
-				c->w = w - 2 * c->border;
-				c->h = h - 2 * c->border;
+				c->w = w - 2;
+				c->h = h - 2;
 			}
 			else { /* fallback if h < bh */
 				c->x = sx + mw;
 				c->y = sy + bh;
-				c->w = w - 2 * c->border;
-				c->h = sh - 2 * c->border - bh;
+				c->w = w - 2;
+				c->h = sh - 2 - bh;
 			}
 			resize(c, False, TopLeft);
 			i++;
--- a/util.c	Wed Aug 02 13:05:04 2006 +0200
+++ b/util.c	Wed Aug 02 16:32:05 2006 +0200
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>