]> Pileus Git - ~andy/gtk/commitdiff
Consistenly use assign_object() when assigning GdkWindow pointers so that
authorTor Lillqvist <tml@novell.com>
Wed, 8 Feb 2006 17:32:50 +0000 (17:32 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 8 Feb 2006 17:32:50 +0000 (17:32 +0000)
2006-02-08  Tor Lillqvist  <tml@novell.com>

* gdk/win32/gdkevents-win32.c (gdk_pointer_grab)
(gdk_display_pointer_ungrab, gdk_keyboard_grab)
(gdk_display_keyboard_ungrab): Consistenly use assign_object()
when assigning GdkWindow pointers so that the ref counting doesn't
get off whack.

(handle_stuff_while_moving_or_resizing): Don't use deprecated API.

(gdk_event_translate) <WM_MOUSEMOVE>: When the pointer is grabbed
with owner_events FALSE, generate enter and leave events only for
the grab window. (#321054)

ChangeLog
ChangeLog.pre-2-10
gdk/win32/gdkevents-win32.c

index 3718f16b683ef0ae1158899554a0af3c827be251..b2a7c437c694f94065adfbd1e33f41d58824889b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2006-02-08  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c (gdk_pointer_grab)
+       (gdk_display_pointer_ungrab, gdk_keyboard_grab)
+       (gdk_display_keyboard_ungrab): Consistenly use assign_object()
+       when assigning GdkWindow pointers so that the ref counting doesn't
+       get off whack.
+
+       (handle_stuff_while_moving_or_resizing): Don't use deprecated API.
+
+       (gdk_event_translate) <WM_MOUSEMOVE>: When the pointer is grabbed
+       with owner_events FALSE, generate enter and leave events only for
+       the grab window. (#321054)
+
 2006-02-08  Kristian Rietveld  <kris@imendio.com>
 
        * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_ref_path),
index 3718f16b683ef0ae1158899554a0af3c827be251..b2a7c437c694f94065adfbd1e33f41d58824889b 100644 (file)
@@ -1,3 +1,17 @@
+2006-02-08  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c (gdk_pointer_grab)
+       (gdk_display_pointer_ungrab, gdk_keyboard_grab)
+       (gdk_display_keyboard_ungrab): Consistenly use assign_object()
+       when assigning GdkWindow pointers so that the ref counting doesn't
+       get off whack.
+
+       (handle_stuff_while_moving_or_resizing): Don't use deprecated API.
+
+       (gdk_event_translate) <WM_MOUSEMOVE>: When the pointer is grabbed
+       with owner_events FALSE, generate enter and leave events only for
+       the grab window. (#321054)
+
 2006-02-08  Kristian Rietveld  <kris@imendio.com>
 
        * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_ref_path),
index 089673bc336f3a27c231c0b3fd38ff83bf950aac..e47d8fd73cb4e620b8a344f06cd451758ff30998 100644 (file)
@@ -585,7 +585,7 @@ gdk_pointer_grab (GdkWindow    *window,
       if (p_grab_window != NULL && p_grab_window != window)
        generate_grab_broken_event (p_grab_window, FALSE, window);
       
-      p_grab_window = window;
+      assign_object (&p_grab_window, window);
 
       if (p_grab_cursor != NULL)
        {
@@ -642,7 +642,7 @@ gdk_display_pointer_ungrab (GdkDisplay *display,
 
   /* FIXME: Generate GDK_CROSSING_UNGRAB events */
 
-  p_grab_window = NULL;
+  assign_object (&p_grab_window, NULL);
   if (p_grab_cursor != NULL)
     {
       if (GetCursor () == p_grab_cursor)
@@ -759,7 +759,7 @@ gdk_keyboard_grab (GdkWindow *window,
       if (k_grab_window != NULL && k_grab_window != window)
        generate_grab_broken_event (k_grab_window, TRUE, window);
 
-      k_grab_window = window;
+      assign_object (&k_grab_window, window);
 
       if (!k_grab_owner_events)
        {
@@ -824,7 +824,7 @@ gdk_display_keyboard_ungrab (GdkDisplay *display,
        }
     }
 
-  k_grab_window = NULL;
+  assign_object (&k_grab_window, NULL);
 }
 
 gboolean
@@ -2132,8 +2132,8 @@ static void
 handle_stuff_while_moving_or_resizing (void)
 {
   int arbitrary_limit = 1;
-  while (g_main_pending () && arbitrary_limit--)
-    g_main_iteration (FALSE);
+  while (g_main_context_pending (NULL) && arbitrary_limit--)
+    g_main_context_iteration (NULL, FALSE);
 }
 
 static VOID CALLBACK
@@ -2749,7 +2749,22 @@ gdk_event_translate (MSG  *msg,
          GdkWindow *real_window = find_real_window_for_grabbed_mouse_event (window, msg);
 
          if (real_window != current_window)
-           synthesize_crossing_events (real_window, GDK_CROSSING_NORMAL, msg);
+           {
+             if (p_grab_owner_events)
+               {
+                 synthesize_crossing_events (real_window, GDK_CROSSING_NORMAL, msg);
+               }
+             else if (current_window == p_grab_window)
+               {
+                 synthesize_leave_event (p_grab_window, msg, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
+                 assign_object (&current_window, _gdk_root);
+               }
+             else if (real_window == p_grab_window)
+               {
+                 synthesize_enter_event (p_grab_window, msg, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
+                 assign_object (&current_window, p_grab_window);
+               }
+           }
        }
       else
        {