Blame gnome-screensaver-2.18.0-handle-overlapping-heads.patch
|
|
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;
|