+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),
+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),
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)
{
/* 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)
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)
{
}
}
- k_grab_window = NULL;
+ assign_object (&k_grab_window, NULL);
}
gboolean
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
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 (¤t_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 (¤t_window, p_grab_window);
+ }
+ }
}
else
{