inspector: Cache if we have ever constructed a window
authorTimm Bäder <mail@baedert.org>
Sat, 7 Aug 2021 09:58:46 +0000 (11:58 +0200)
committerTimm Bäder <mail@baedert.org>
Sat, 18 Sep 2021 06:29:18 +0000 (08:29 +0200)
Silly optimization to get rid of

gtk_main_do_event
  gtk_inspector_handle_event
    gtk_inspector_window_get_for_display
      g_object_get_data

showing up in profiles even though it's useless since we've never even
created any inspector window in the first place.

gtk/inspector/window.c

index 02b108d8820f754a3a6786a372303fe0f01f5a77..6bc0df080ac8c91f30a1af11c2a810504ccff236 100644 (file)
@@ -84,6 +84,12 @@ static guint signals[LAST_SIGNAL];
 
 G_DEFINE_TYPE (GtkInspectorWindow, gtk_inspector_window, GTK_TYPE_WINDOW)
 
+
+/* Fast way of knowing that further checks are necessary because at least
+ * one inspector window has been constructed. */
+static gboolean any_inspector_window_constructed = FALSE;
+
+
 static gboolean
 set_selected_object (GtkInspectorWindow *iw,
                      GObject            *selected)
@@ -286,6 +292,7 @@ gtk_inspector_window_constructed (GObject *object)
   G_OBJECT_CLASS (gtk_inspector_window_parent_class)->constructed (object);
 
   g_object_set_data (G_OBJECT (iw->inspected_display), "-gtk-inspector", iw);
+  any_inspector_window_constructed = TRUE;
 
   gtk_inspector_object_tree_set_display (GTK_INSPECTOR_OBJECT_TREE (iw->object_tree), iw->inspected_display);
   gtk_inspector_css_editor_set_display (GTK_INSPECTOR_CSS_EDITOR (iw->css_editor), iw->inspected_display);
@@ -836,6 +843,9 @@ gtk_inspector_is_recording (GtkWidget *widget)
 {
   GtkInspectorWindow *iw;
 
+  if (!any_inspector_window_constructed)
+    return FALSE;
+
   iw = gtk_inspector_window_get_for_display (gtk_widget_get_display (widget));
   if (iw == NULL)
     return FALSE;
@@ -853,6 +863,9 @@ gtk_inspector_handle_event (GdkEvent *event)
   GtkInspectorWindow *iw;
   gboolean handled = FALSE;
 
+  if (!any_inspector_window_constructed)
+    return FALSE;
+
   iw = gtk_inspector_window_get_for_display (gdk_event_get_display (event));
   if (iw == NULL)
     return FALSE;