tooltip: Avoid criticals
authorMatthias Clasen <mclasen@redhat.com>
Thu, 21 May 2020 22:59:58 +0000 (18:59 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 21 May 2020 23:38:36 +0000 (19:38 -0400)
It is possible that the target widget is already
unparented at the time that we call the tooltips
handle_event function. Quietly return in that case,
no need to emit a critical.

gtk/gtktooltip.c

index 36b162885bdb2dd55ba01c82bf6049c6736eb8fe..4d10edf3e1fcf3eeb83b7d444da5d14762f3be0f 100644 (file)
@@ -919,18 +919,21 @@ _gtk_tooltip_handle_event (GtkWidget *target,
   GdkSurface *surface;
   double x, y;
   double nx, ny;
-  GtkWidget *native;
+  GtkNative *native;
 
   if (!tooltips_enabled (event))
     return;
 
+  native = gtk_widget_get_native (target);
+  if (!native)
+    return;
+
   event_type = gdk_event_get_event_type (event);
   surface = gdk_event_get_surface (event);
   gdk_event_get_position (event, &x, &y);
-  native = GTK_WIDGET (gtk_widget_get_native (target));
 
-  gtk_native_get_surface_transform (GTK_NATIVE (native), &nx, &ny);
-  gtk_widget_translate_coordinates (native, target, x - nx, y - ny, &x, &y);
+  gtk_native_get_surface_transform (native, &nx, &ny);
+  gtk_widget_translate_coordinates (GTK_WIDGET (native), target, x - nx, y - ny, &x, &y);
   gtk_tooltip_handle_event_internal (event_type, surface, target, x, y);
 }