diff -ur dmenu-3.2-orig/config.mk dmenu-3.2/config.mk --- dmenu-3.2-orig/config.mk 2007-05-30 04:21:59.000000000 -0600 +++ dmenu-3.2/config.mk 2007-07-07 20:02:08.000000000 -0600 @@ -12,7 +12,7 @@ # 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 -lXinerama # flags CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" diff -ur dmenu-3.2-orig/dmenu.1 dmenu-3.2/dmenu.1 --- dmenu-3.2-orig/dmenu.1 2007-05-30 04:21:59.000000000 -0600 +++ dmenu-3.2/dmenu.1 2007-07-07 20:02:08.000000000 -0600 @@ -10,6 +10,7 @@ .RB [ \-p " "] .RB [ \-sb " "] .RB [ \-sf " "] +.RB [ \-xs " ] .RB [ \-v ] .SH DESCRIPTION .SS Overview @@ -40,6 +41,9 @@ .B \-sf defines the selected foreground color (#RGB, #RRGGBB, and color names are supported). .TP +.B \-xs +starts dmenu on the given Xinerama screen (1-indexed) +.TP .B \-v prints version information to standard output, then exits. .SH USAGE diff -ur dmenu-3.2-orig/main.c dmenu-3.2/main.c --- dmenu-3.2-orig/main.c 2007-05-30 04:21:59.000000000 -0600 +++ dmenu-3.2/main.c 2007-07-07 20:04:01.000000000 -0600 @@ -8,6 +8,7 @@ #include #include #include +#include #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) @@ -412,6 +413,27 @@ " [-p ] [-sb ] [-sf ] [-v]\n"); } +static void +queryscreeninfo(Display *dpy, XRectangle *rect, int screen) { + XineramaScreenInfo *xsi = NULL; + int nscreens = 1; + + if(XineramaIsActive(dpy)) + xsi = XineramaQueryScreens(dpy, &nscreens); + + if(xsi == NULL || screen > nscreens || screen < 0) { + rect->x = 0; + rect->y = 0; + rect->width = DisplayWidth( dpy, DefaultScreen(dpy)); + rect->height = DisplayHeight(dpy, DefaultScreen(dpy)); + } else { + rect->x = xsi[screen-1].x_org; + rect->y = xsi[screen-1].y_org; + rect->width = xsi[screen-1].width; + rect->height = xsi[screen-1].height; + } +} + /* extern */ int screen; @@ -428,8 +450,10 @@ char *selbg = SELBGCOLOR; char *selfg = SELFGCOLOR; int i, j; + int xinescreen = 1; Item *itm; XEvent ev; + XRectangle screeninfo; XModifierKeymap *modmap; XSetWindowAttributes wa; @@ -456,6 +480,9 @@ else if(!strcmp(argv[i], "-sf")) { if(++i < argc) selfg = argv[i]; } + else if(!strcmp(argv[i], "-xs")) { + if(++i < argc) xinescreen = atoi(argv[i]); + } else if(!strcmp(argv[i], "-v")) eprint("dmenu-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk\n"); else @@ -466,6 +493,9 @@ eprint("dmenu: cannot open display\n"); screen = DefaultScreen(dpy); root = RootWindow(dpy, screen); + + queryscreeninfo(dpy, &screeninfo, xinescreen); + if(isatty(STDIN_FILENO)) { maxname = readstdin(); running = grabkeyboard(); @@ -494,10 +524,10 @@ wa.override_redirect = 1; wa.background_pixmap = ParentRelative; wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask; - mw = DisplayWidth(dpy, screen); + mw = screeninfo.width; mh = dc.font.height + 2; - win = XCreateWindow(dpy, root, 0, - bottom ? DisplayHeight(dpy, screen) - mh : 0, mw, mh, 0, + win = XCreateWindow(dpy, root, screeninfo.x, + screeninfo.y + (bottom ? screeninfo.height - mh : 0), mw, mh, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);