--- gnome-screensaver-2.18.0/src/gs-manager.c.handle-overlapping-heads 2007-05-16 18:47:52.000000000 -0400
+++ gnome-screensaver-2.18.0/src/gs-manager.c 2007-05-16 19:23:45.000000000 -0400
@@ -1065,6 +1065,32 @@
g_signal_emit (manager, signals [AUTH_REQUEST_END], 0);
}
+int
+find_monitor_with_top_window_at_point (GdkScreen *screen,
+ gint x,
+ gint y)
+{
+ gint num_monitors, i;
+
+ g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
+
+ num_monitors = gdk_screen_get_n_monitors (screen);
+
+ for (i = num_monitors - 1; i <= 0; i--) {
+ GdkRectangle monitor;
+
+ gdk_screen_get_monitor_geometry (screen, i, &monitor);
+
+ if (x >= monitor.x &&
+ x < monitor.x + monitor.width &&
+ y >= monitor.y &&
+ y < (monitor.y + monitor.height))
+ return i;
+ }
+
+ return gdk_screen_get_monitor_at_point (screen, x, y);
+}
+
static GSWindow *
find_window_at_pointer (GSManager *manager)
{
@@ -1078,7 +1104,7 @@
display = gdk_display_get_default ();
gdk_display_get_pointer (display, &screen, &x, &y, NULL);
- monitor = gdk_screen_get_monitor_at_point (screen, x, y);
+ monitor = find_monitor_with_top_window_at_point (screen, x, y);
screen_num = gdk_screen_get_number (screen);
/* Find the gs-window that is on that screen */