--- gnome-screensaver-2.18.0/src/gs-window-x11.c.handle-overlapping-screens 2007-05-18 12:24:01.000000000 -0400
+++ gnome-screensaver-2.18.0/src/gs-window-x11.c 2007-05-18 12:24:01.000000000 -0400
@@ -290,14 +290,41 @@
gdk_flush ();
}
+static GdkRegion *
+get_outside_region (GSWindow *window)
+{
+ int i;
+ GdkRegion *region;
+
+ region = gdk_region_new ();
+ for (i = 0; i < window->priv->monitor; i++) {
+ GdkRectangle geometry;
+
+ gdk_screen_get_monitor_geometry (GTK_WINDOW (window)->screen,
+ i, &geometry);
+ gdk_region_union_with_rect (region, &geometry);
+ }
+
+ return region;
+}
+
static void
update_geometry (GSWindow *window)
{
GdkRectangle geometry;
+ GdkRegion *outside_region, *monitor_region;
+
+ outside_region = get_outside_region (window);
gdk_screen_get_monitor_geometry (GTK_WINDOW (window)->screen,
window->priv->monitor,
&geometry);
+ monitor_region = gdk_region_rectangle (&geometry);
+ gdk_region_subtract (monitor_region, outside_region);
+ gdk_region_destroy (outside_region);
+
+ gdk_region_get_clipbox (monitor_region, &geometry);
+ gdk_region_destroy (monitor_region);
window->priv->geometry.x = geometry.x;
window->priv->geometry.y = geometry.y;