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 f22d047d
Anselm R Garbe · 2008-05-19 15:05 3 file(s) · +37 −16
config.mk +8 −3
10 10
X11INC = /usr/X11R6/include
11 11
X11LIB = /usr/X11R6/lib
12 12
13 +
# Xinerama, uncomment if you don't want it
14 +
XINERAMALIBS = -L${X11LIB} -lXinerama
15 +
XINERAMAFLAGS = -DXINERAMA
16 +
13 17
# includes and libs
14 18
INCS = -I. -I/usr/include -I${X11INC}
15 -
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
19 +
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 ${XINERAMALIBS}
16 20
17 21
# flags
18 -
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
22 +
CPPFLAGS = -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
23 +
CFLAGS = -Os ${INCS} ${CPPFLAGS}
19 24
LDFLAGS = -s ${LIBS}
20 -
#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
25 +
#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} ${CPPFLAGS}
21 26
#LDFLAGS = -g ${LIBS}
22 27
23 28
# Solaris
dwm.1 +3 −0
57 57
Start
58 58
.BR xterm.
59 59
.TP
60 +
.B Mod1\-b
61 +
Toggles bar on and off.
62 +
.TP
60 63
.B Mod1\-space
61 64
Toggles between layouts.
62 65
.TP
dwm.c +26 −13
39 39
#include <X11/Xlib.h>
40 40
#include <X11/Xproto.h>
41 41
#include <X11/Xutil.h>
42 +
#ifdef XINERAMA
43 +
#include <X11/extensions/Xinerama.h>
44 +
#endif
42 45
43 46
/* macros */
44 47
#define MAX(a, b)       ((a) > (b) ? (a) : (b))
1579 1582
1580 1583
void
1581 1584
updategeom(void) {
1582 -
	unsigned int i;
1583 -
1584 -
#ifdef CUSTOMGEOM /* define your own if you are Xinerama user */
1585 -
	CUSTOMGEOM
1586 -
#else
1587 -
	/* bar geometry*/
1588 -
	bx = 0;
1589 -
	by = showbar ? (topbar ? 0 : sh - bh) : -bh;
1590 -
	bw = sw;
1585 +
	int i;
1586 +
#ifdef XINERAMA
1587 +
	XineramaScreenInfo *info = NULL;
1591 1588
1592 1589
	/* window area geometry */
1593 -
	wx = sx;
1594 -
	wy = showbar && topbar ? sy + bh : sy;
1595 -
	ww = sw;
1596 -
	wh = showbar ? sh - bh : sh;
1590 +
	if(XineramaIsActive(dpy)) {
1591 +
		info = XineramaQueryScreens(dpy, &i);
1592 +
		wx = info[0].x_org;
1593 +
		wy = showbar && topbar ? info[0].y_org + info[0].height + bh : info[0].y_org;
1594 +
		ww = info[0].width;
1595 +
		wh = showbar ? info[0].height - bh : info[0].height;
1596 +
		XFree(info);
1597 +
	}
1598 +
	else
1597 1599
#endif
1600 +
	{
1601 +
		wx = sx;
1602 +
		wy = showbar && topbar ? sy + bh : sy;
1603 +
		ww = sw;
1604 +
		wh = showbar ? sh - bh : sh;
1605 +
	}
1606 +
1607 +
	/* bar geometry*/
1608 +
	bx = wx;
1609 +
	by = showbar ? (topbar ? 0 : wy + wh) : -bh;
1610 +
	bw = ww;
1598 1611
1599 1612
	/* update layout geometries */
1600 1613
	for(i = 0; i < LENGTH(layouts); i++)