[gtk+] win32: Resurrect some enter/leave notify events for native windows



commit db19fbd45cb9c43a6e06c301bab129a22a2fee20
Author: Hans Breuer <hans breuer org>
Date:   Fri Aug 27 21:29:33 2010 +0200

    win32: Resurrect some enter/leave notify events for native windows
    
    The button highlighting in testgtk works again, even with
    GDK_NATIVE_WINDOWS. Unfortunately testgtk:menus still does
    not work for the forced-native-window-case.

 gdk/win32/gdkevents-win32.c |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)
---
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index cc7343c..3e98315 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -139,6 +139,13 @@ static UINT     sync_timer = 0;
 static int debug_indent = 0;
 
 static void
+synthesize_enter_or_leave_event (GdkWindow    	*window,
+				 MSG          	*msg,
+				 GdkEventType 	 type,
+				 GdkCrossingMode mode,
+				 GdkNotifyType detail);
+
+static void
 assign_object (gpointer lhsp,
 	       gpointer rhs)
 {
@@ -2195,14 +2202,6 @@ gdk_event_translate (MSG  *msg,
       GDK_NOTE (EVENTS,
 		g_print (" (%d,%d)",
 			 GET_X_LPARAM (msg->lParam), GET_Y_LPARAM (msg->lParam)));
-#if 0 /* TODO_CSW? */
-      if (current_toplevel != NULL &&
-	  (current_toplevel->event_mask & GDK_LEAVE_NOTIFY_MASK))
-	{
-	  synthesize_enter_or_leave_event (current_toplevel, msg,
-	                                   GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
-	}
-#endif
       break;
 
     case WM_MOUSELEAVE:
@@ -2214,14 +2213,17 @@ gdk_event_translate (MSG  *msg,
 	  /* we are only interested if we don't know the new window */
 	  if (current_toplevel)
 	    synthesize_enter_or_leave_event (current_toplevel, msg,
-                                       GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
+					     GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
 	  assign_object (&current_toplevel, NULL);
 	}
-      else
+      else if (window != gdk_window_get_toplevel (window)) /* xxx: only for native child windows? */
 	{
-	  GDK_NOTE (EVENTS, g_print (" (ignored)"));
+	  /* XXX: this used to be ignored pre-csw, but I think we need at least some 
+	   * of the leave events */
+	  synthesize_enter_or_leave_event (window, msg,
+					   GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
 	}
-      
+
       return_val = TRUE;
       break;
 



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