[gtk+/multitouch: 50/123] gtk: Only set widget under device on non-virtual crossing events



commit 43df8b8b6162e79d162c2df44cca96ef216a3b70
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Dec 6 20:20:39 2011 +0100

    gtk: Only set widget under device on non-virtual crossing events
    
    _gtk_widget_set_device_window() is suppose to make accounting of
    the topmost widget under the device at each time, so avoid setting
    it on virtual crossing events as the device is already in another
    window.

 gtk/gtkmain.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index aa9460b..a998260 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -1722,18 +1722,22 @@ gtk_main_do_event (GdkEvent *event)
       break;
 
     case GDK_ENTER_NOTIFY:
-      _gtk_widget_set_device_window (event_widget,
-                                     gdk_event_get_device (event),
-                                     event->any.window);
+      if (event->crossing.detail != GDK_NOTIFY_VIRTUAL &&
+          event->crossing.detail != GDK_NOTIFY_NONLINEAR_VIRTUAL)
+        _gtk_widget_set_device_window (event_widget,
+                                       gdk_event_get_device (event),
+                                       event->any.window);
       if (gtk_widget_is_sensitive (grab_widget) &&
 	  !gtk_propagate_captured_event (grab_widget, event, topmost_widget))
         gtk_widget_event (grab_widget, event);
       break;
 
     case GDK_LEAVE_NOTIFY:
-      _gtk_widget_set_device_window (event_widget,
-                                     gdk_event_get_device (event),
-                                     NULL);
+      if (event->crossing.detail != GDK_NOTIFY_VIRTUAL &&
+          event->crossing.detail != GDK_NOTIFY_NONLINEAR_VIRTUAL)
+        _gtk_widget_set_device_window (event_widget,
+                                       gdk_event_get_device (event),
+                                       NULL);
       if (gtk_widget_is_sensitive (grab_widget) &&
           !gtk_propagate_captured_event (grab_widget, event, topmost_widget))
         gtk_widget_event (grab_widget, event);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]