--- 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 */