]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
Committing in .
[wxWidgets.git] / src / gtk1 / window.cpp
index 2a4c1375d1eb0ef7200bcc483a61f94a8509be78..538dda645dedc98f09ae8c7118053839e18fbf77 100644 (file)
@@ -1831,10 +1831,14 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget,
     wxMouseEvent event( wxEVT_MOTION );
     InitMouseEvent(win, event, gdk_event);
 
-    if ( !g_captureWindow )
+    if ( g_captureWindow )
     {
         // synthetize a mouse enter or leave event if needed
         GdkWindow *winUnderMouse = gdk_window_at_pointer(NULL, NULL);
+        // This seems to be necessary and actually been added to 
+        // GDK itself in version 2.0.X
+        gdk_flush();
+        
         bool hasMouse = winUnderMouse == gdk_event->window;
         if ( hasMouse != g_captureWindowHasMouse )
         {
@@ -2058,6 +2062,9 @@ gint gtk_window_enter_callback( GtkWidget *widget,
     if (!win->m_hasVMT) return FALSE;
     if (g_blockEventsOnDrag) return FALSE;
 
+    // Event was emitted after a grab
+    if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE;
+    
     if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
 
     int x = 0;
@@ -2095,6 +2102,9 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_
     if (!win->m_hasVMT) return FALSE;
     if (g_blockEventsOnDrag) return FALSE;
 
+    // Event was emitted after an ungrab
+    if (gdk_event->mode != GDK_CROSSING_NORMAL) return FALSE;
+    
     if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
 
     wxMouseEvent event( wxEVT_LEAVE_WINDOW );