diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-05-09 16:46:40 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-05-11 12:20:59 -0400 |
commit | 177c0eb9e2601613cb7f250dc9f704a660d75860 (patch) | |
tree | cf8e1ec0671e22b42f01898c4cee580079926804 | |
parent | 1306727fb1482eed22bb98b7e6e3187246898760 (diff) | |
download | gtk+-177c0eb9e2601613cb7f250dc9f704a660d75860.tar.gz |
Unset tooltip window earlier
This avoids a crash when the tooltip window tries
to update its action muxers.
-rw-r--r-- | gtk/gtktooltip.c | 14 | ||||
-rw-r--r-- | gtk/gtktooltipprivate.h | 1 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 2 |
3 files changed, 17 insertions, 0 deletions
diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c index fc9e665444..4af709f19e 100644 --- a/gtk/gtktooltip.c +++ b/gtk/gtktooltip.c @@ -990,3 +990,17 @@ gtk_tooltip_maybe_allocate (GtkNative *native) gtk_native_check_resize (GTK_NATIVE (tooltip->window)); } + +void +gtk_tooltip_unset_surface (GtkNative *native) +{ + GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (native)); + GtkTooltip *tooltip; + + tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip); + if (!tooltip || GTK_NATIVE (tooltip->native) != native) + return; + + gtk_tooltip_set_surface (tooltip, NULL); +} + diff --git a/gtk/gtktooltipprivate.h b/gtk/gtktooltipprivate.h index ca63406b2c..8f48433775 100644 --- a/gtk/gtktooltipprivate.h +++ b/gtk/gtktooltipprivate.h @@ -44,6 +44,7 @@ GtkWidget * _gtk_widget_find_at_coords (GdkSurface *surface, gint *widget_y); void gtk_tooltip_maybe_allocate (GtkNative *native); +void gtk_tooltip_unset_surface (GtkNative *native); G_END_DECLS diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index c469ceb7d0..ce94190e44 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -7484,6 +7484,8 @@ gtk_window_destroy (GtkWindow *window) g_return_if_fail (GTK_IS_WINDOW (window)); + gtk_tooltip_unset_surface (GTK_NATIVE (window)); + for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (toplevel_list)); i++) { gpointer item = g_list_model_get_item (G_LIST_MODEL (toplevel_list), i); |