make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
authorAnselm R Garbe <garbeam@gmail.com>
Mon, 19 May 2008 15:05:46 +0100
changeset 1215 840fd59e3141
parent 1214 941bd7c15a32
child 1216 b24cafa2cdf9
make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients
config.mk
dwm.1
dwm.c
--- a/config.mk	Mon May 19 14:44:53 2008 +0100
+++ b/config.mk	Mon May 19 15:05:46 2008 +0100
@@ -10,14 +10,19 @@
 X11INC = /usr/X11R6/include
 X11LIB = /usr/X11R6/lib
 
+# Xinerama, uncomment if you don't want it
+XINERAMALIBS = -L${X11LIB} -lXinerama
+XINERAMAFLAGS = -DXINERAMA
+
 # includes and libs
 INCS = -I. -I/usr/include -I${X11INC}
-LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
+LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 ${XINERAMALIBS}
 
 # flags
-CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
+CPPFLAGS = -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
+CFLAGS = -Os ${INCS} ${CPPFLAGS}
 LDFLAGS = -s ${LIBS}
-#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
+#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} ${CPPFLAGS}
 #LDFLAGS = -g ${LIBS}
 
 # Solaris
--- a/dwm.1	Mon May 19 14:44:53 2008 +0100
+++ b/dwm.1	Mon May 19 15:05:46 2008 +0100
@@ -57,6 +57,9 @@
 Start
 .BR xterm.
 .TP
+.B Mod1\-b
+Toggles bar on and off.
+.TP
 .B Mod1\-space
 Toggles between layouts.
 .TP
--- a/dwm.c	Mon May 19 14:44:53 2008 +0100
+++ b/dwm.c	Mon May 19 15:05:46 2008 +0100
@@ -39,6 +39,9 @@
 #include <X11/Xlib.h>
 #include <X11/Xproto.h>
 #include <X11/Xutil.h>
+#ifdef XINERAMA
+#include <X11/extensions/Xinerama.h>
+#endif
 
 /* macros */
 #define MAX(a, b)       ((a) > (b) ? (a) : (b))
@@ -1579,22 +1582,32 @@
 
 void
 updategeom(void) {
-	unsigned int i;
-
-#ifdef CUSTOMGEOM /* define your own if you are Xinerama user */
-	CUSTOMGEOM
-#else
-	/* bar geometry*/
-	bx = 0;
-	by = showbar ? (topbar ? 0 : sh - bh) : -bh;
-	bw = sw;
+	int i;
+#ifdef XINERAMA
+	XineramaScreenInfo *info = NULL;
 
 	/* window area geometry */
-	wx = sx;
-	wy = showbar && topbar ? sy + bh : sy;
-	ww = sw;
-	wh = showbar ? sh - bh : sh;
+	if(XineramaIsActive(dpy)) {
+		info = XineramaQueryScreens(dpy, &i);
+		wx = info[0].x_org;
+		wy = showbar && topbar ? info[0].y_org + info[0].height + bh : info[0].y_org;
+		ww = info[0].width;
+		wh = showbar ? info[0].height - bh : info[0].height;
+		XFree(info);
+	}
+	else
 #endif
+	{
+		wx = sx;
+		wy = showbar && topbar ? sy + bh : sy;
+		ww = sw;
+		wh = showbar ? sh - bh : sh;
+	}
+
+	/* bar geometry*/
+	bx = wx;
+	by = showbar ? (topbar ? 0 : wy + wh) : -bh;
+	bw = ww;
 
 	/* update layout geometries */
 	for(i = 0; i < LENGTH(layouts); i++)