widget: Add static inline version of gtk_widget_display()
authorTimm Bäder <mail@baedert.org>
Sat, 21 Apr 2018 15:03:31 +0000 (17:03 +0200)
committerTimm Bäder <mail@baedert.org>
Sat, 21 Apr 2018 16:48:15 +0000 (18:48 +0200)
Due to the few type checks in gtk_widget_get_display(), it was the
slowest part of a call to gtk_widget_query_size_for_orientation if the
in case of a cache hit.

gtk/gtkwidget.c
gtk/gtkwidgetprivate.h

index 7b115c332569f8f9c424b99efa8a5a08a82e4838..33ca2235c345c2f8157243517fd1530e8fbc91fb 100644 (file)
@@ -7763,21 +7763,9 @@ gtk_widget_get_scale_factor (GtkWidget *widget)
 GdkDisplay*
 gtk_widget_get_display (GtkWidget *widget)
 {
-  GtkWidget *toplevel;
-
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
 
-  toplevel = _gtk_widget_get_toplevel (widget);
-
-  if (_gtk_widget_is_toplevel (toplevel))
-    {
-      if (GTK_IS_WINDOW (toplevel))
-       return gtk_window_get_display (GTK_WINDOW (toplevel));
-      else if (GTK_IS_INVISIBLE (toplevel))
-       return gtk_invisible_get_display (GTK_INVISIBLE (widget));
-    }
-  
-  return gdk_display_get_default ();
+  return _gtk_widget_get_display (widget);
 }
 
 /**
index 7b76ffa2bf9190c207fb754693f3f44363d13e92..f53b7659dc98154a8b07e41498ddca0e491a193d 100644 (file)
@@ -32,6 +32,8 @@
 #include "gtkcsstypesprivate.h"
 #include "gtkeventcontroller.h"
 #include "gtksizerequestcacheprivate.h"
+#include "gtkwindowprivate.h"
+#include "gtkinvisible.h"
 
 G_BEGIN_DECLS
 
@@ -412,6 +414,22 @@ _gtk_widget_get_toplevel (GtkWidget *widget)
   return widget;
 }
 
+static inline GdkDisplay *
+_gtk_widget_get_display (GtkWidget *widget)
+{
+  GtkWidget *toplevel = _gtk_widget_get_toplevel (widget);
+
+  if (_gtk_widget_is_toplevel (toplevel))
+    {
+      if (GTK_IS_WINDOW (toplevel))
+        return gtk_window_get_display (GTK_WINDOW (toplevel));
+      else if (GTK_IS_INVISIBLE (toplevel))
+        return gtk_invisible_get_display (GTK_INVISIBLE (widget));
+    }
+
+  return gdk_display_get_default ();
+}
+
 static inline GtkStyleContext *
 _gtk_widget_get_style_context (GtkWidget *widget)
 {