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