diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index 2244c2f2de..50ebdaa235 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -322,6 +322,8 @@ struct _GdkWindow GdkWindowState old_state; GdkWindowState state; + guint synthesized_crossing_event_id; + guint8 alpha; guint8 fullscreen_mode; @@ -337,7 +339,6 @@ struct _GdkWindow guint focus_on_map : 1; guint shaped : 1; guint support_multidevice : 1; - guint synthesize_crossing_event_queued : 1; guint effective_visibility : 2; guint visibility : 2; /* The visibility wrt the toplevel (i.e. based on clip_region) */ guint native_visibility : 2; /* the native visibility of a impl windows */ diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 838abcf4c7..ede040b157 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -570,6 +570,12 @@ gdk_window_finalize (GObject *object) _gdk_window_destroy (window, TRUE); } + if (window->synthesized_crossing_event_id) + { + g_source_remove (window->synthesized_crossing_event_id); + window->synthesized_crossing_event_id = 0; + } + if (window->impl) { g_object_unref (window->impl); @@ -8977,7 +8983,7 @@ do_synthesize_crossing_event (gpointer data) changed_toplevel = data; - changed_toplevel->synthesize_crossing_event_queued = FALSE; + changed_toplevel->synthesized_crossing_event_id = 0; if (GDK_WINDOW_DESTROYED (changed_toplevel)) return FALSE; @@ -9036,17 +9042,14 @@ _gdk_synthesize_crossing_events_for_geometry_change (GdkWindow *changed_window) toplevel = get_event_toplevel (changed_window); - if (!toplevel->synthesize_crossing_event_queued) + if (toplevel->synthesized_crossing_event_id == 0) { - guint id; - - toplevel->synthesize_crossing_event_queued = TRUE; - - id = gdk_threads_add_idle_full (GDK_PRIORITY_EVENTS - 1, - do_synthesize_crossing_event, - g_object_ref (toplevel), - g_object_unref); - g_source_set_name_by_id (id, "[gtk+] do_synthesize_crossing_event"); + toplevel->synthesized_crossing_event_id = + gdk_threads_add_idle_full (GDK_PRIORITY_EVENTS - 1, + do_synthesize_crossing_event, + toplevel, NULL); + g_source_set_name_by_id (toplevel->synthesized_crossing_event_id, + "[gtk+] do_synthesize_crossing_event"); } }