diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2013-02-14 12:12:56 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2013-02-14 12:12:56 +0100 | 
| commit | 5dfdc0bc15e49f7c091aad123cf1b03f55d936cb (patch) | |
| tree | 1a5184f1d516aa15b3eedcfb9418b6938888bd10 /src | |
| parent | fc11253d85202e8733a709a5acbb8e09358d1054 (diff) | |
Determine active Xinerama screen by pointer position
Diffstat (limited to 'src')
| -rw-r--r-- | src/imlib.c | 27 | ||||
| -rw-r--r-- | src/winwidget.c | 17 | 
2 files changed, 34 insertions, 10 deletions
| diff --git a/src/imlib.c b/src/imlib.c index 2425050..5514a34 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -68,13 +68,32 @@ static char *feh_magick_load_image(char *filename);  void init_xinerama(void)  {  	if (opt.xinerama && XineramaIsActive(disp)) { -		int major, minor; +		int major, minor, px, py, i; + +		/* discarded */ +		Window dw; +		int di; +		unsigned int du; + +		XineramaQueryVersion(disp, &major, &minor); +		xinerama_screens = XineramaQueryScreens(disp, &num_xinerama_screens); +  		if (getenv("XINERAMA_SCREEN"))  			xinerama_screen = atoi(getenv("XINERAMA_SCREEN")); -		else +		else {  			xinerama_screen = 0; -		XineramaQueryVersion(disp, &major, &minor); -		xinerama_screens = XineramaQueryScreens(disp, &num_xinerama_screens); +			XQueryPointer(disp, root, &dw, &dw, &px, &py, &di, &di, &du); +			for (i = 0; i < num_xinerama_screens; i++) { +				if (XY_IN_RECT(px, py, +							xinerama_screens[i].x_org, +							xinerama_screens[i].y_org, +							xinerama_screens[i].width, +							xinerama_screens[i].height)) { +					xinerama_screen = i; +					break; +				} +			} +		}  	}  }  #endif				/* HAVE_LIBXINERAMA */ diff --git a/src/winwidget.c b/src/winwidget.c index 2f543df..ada4c02 100644 --- a/src/winwidget.c +++ b/src/winwidget.c @@ -780,23 +780,28 @@ void winwidget_move(winwidget winwid, int x, int y)  void winwidget_resize(winwidget winwid, int w, int h)  { -	Window ignored_window;  	XWindowAttributes attributes; -	int tc_x, tc_y; +	int tc_x, tc_y, px, py;  	int scr_width = scr->width;  	int scr_height = scr->height; +	/* discarded */ +	Window dw; +	int di, i; +	unsigned int du; +  	XGetWindowAttributes(disp, winwid->win, &attributes);  #ifdef HAVE_LIBXINERAMA  	if (opt.xinerama && xinerama_screens) { -		int i;  		xinerama_screen = 0; +		XQueryPointer(disp, root, &dw, &dw, &px, &py, &di, &di, &du);  		for (i = 0; i < num_xinerama_screens; i++) { -			if (XY_IN_RECT(attributes.x, attributes.y, +			if (XY_IN_RECT(px, py,  						xinerama_screens[i].x_org,  						xinerama_screens[i].y_org, -						xinerama_screens[i].width, xinerama_screens[i].height)) { +						xinerama_screens[i].width, +						xinerama_screens[i].height)) {  				xinerama_screen = i;  				break;  			} @@ -828,7 +833,7 @@ void winwidget_resize(winwidget winwid, int w, int h)  			XTranslateCoordinates(disp, winwid->win, attributes.root,  						-attributes.border_width -  						attributes.x, -						-attributes.border_width - attributes.y, &tc_x, &tc_y, &ignored_window); +						-attributes.border_width - attributes.y, &tc_x, &tc_y, &dw);  			winwid->x = tc_x;  			winwid->y = tc_y;  			XMoveResizeWindow(disp, winwid->win, tc_x, tc_y, winwid->w, winwid->h); | 
