]> Pileus Git - ~andy/gtk/commitdiff
Fix mouse pointer handling on multiple screens
authorAlexander Larsson <alexl@redhat.com>
Mon, 7 Dec 2009 08:58:34 +0000 (09:58 +0100)
committerAlexander Larsson <alexl@redhat.com>
Mon, 7 Dec 2009 09:49:57 +0000 (10:49 +0100)
The fix in 786b589d95077b465dcc2311ff2489ee7bb9a49f for the
"Cannot click buttons more than once without moving the mouse cursor"
did not correctly handle setups with multiple screens in one display.

We need to handle the case where the first XQueryPointer returns
a different root window than the default one.

This fixes bug 597386 (agaion)

gdk/x11/gdkwindow-x11.c

index 6e79ff86440bbd1fd72f50f9e529082574ce7b87..9c46716444e66cb7a6182fff714891fb0645823d 100644 (file)
@@ -3256,7 +3256,7 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
          xwindow_last = xwindow;
          XQueryPointer (xdisplay, xwindow,
                         &root, &xwindow, &rootx, &rooty, &winx, &winy, &xmask);
-         if (get_toplevel &&
+         if (get_toplevel && xwindow_last != root &&
              (window = gdk_window_lookup_for_display (display, xwindow_last)) != NULL &&
              GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
            {
@@ -3326,7 +3326,7 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
          gdk_flush ();
          if (gdk_error_trap_pop ())
            break;
-         if (get_toplevel &&
+         if (get_toplevel && xwindow_last != root &&
              (window = gdk_window_lookup_for_display (display, xwindow_last)) != NULL &&
              GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
            break;