[gtk+] style context: Convert to g_object_notify_by_pspec



commit 4c376d1a9ce4ee956c72165e0cc98b66e7e1f595
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Sep 6 10:45:03 2015 -0400

    style context: Convert to g_object_notify_by_pspec
    
    This avoids pspec lookup overhead in g_object_notify.

 gtk/gtkstylecontext.c |   71 +++++++++++++++++++++++++-----------------------
 1 files changed, 37 insertions(+), 34 deletions(-)
---
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 6c7f1e4..e266e00 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -160,7 +160,8 @@ enum {
   PROP_SCREEN,
   PROP_DIRECTION,
   PROP_FRAME_CLOCK,
-  PROP_PARENT
+  PROP_PARENT,
+  LAST_PROP
 };
 
 enum {
@@ -168,6 +169,8 @@ enum {
   LAST_SIGNAL
 };
 
+static GParamSpec *properties[LAST_PROP] = { NULL, };
+
 static guint signals[LAST_SIGNAL] = { 0 };
 
 static void gtk_style_context_finalize (GObject *object);
@@ -214,28 +217,27 @@ gtk_style_context_class_init (GtkStyleContextClass *klass)
                   g_cclosure_marshal_VOID__VOID,
                   G_TYPE_NONE, 0);
 
-  g_object_class_install_property (object_class,
-                                   PROP_SCREEN,
-                                   g_param_spec_object ("screen",
-                                                        P_("Screen"),
-                                                        P_("The associated GdkScreen"),
-                                                        GDK_TYPE_SCREEN,
-                                                        GTK_PARAM_READWRITE));
-  g_object_class_install_property (object_class,
-                                   PROP_FRAME_CLOCK,
-                                   g_param_spec_object ("paint-clock",
-                                                        P_("FrameClock"),
-                                                        P_("The associated GdkFrameClock"),
-                                                        GDK_TYPE_FRAME_CLOCK,
-                                                        GTK_PARAM_READWRITE));
-  g_object_class_install_property (object_class,
-                                   PROP_DIRECTION,
-                                   g_param_spec_enum ("direction",
-                                                      P_("Direction"),
-                                                      P_("Text direction"),
-                                                      GTK_TYPE_TEXT_DIRECTION,
-                                                      GTK_TEXT_DIR_LTR,
-                                                      
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED));
+  properties[PROP_SCREEN] =
+      g_param_spec_object ("screen",
+                           P_("Screen"),
+                           P_("The associated GdkScreen"),
+                           GDK_TYPE_SCREEN,
+                           GTK_PARAM_READWRITE);
+
+  properties[PROP_FRAME_CLOCK] =
+      g_param_spec_object ("paint-clock",
+                           P_("FrameClock"),
+                           P_("The associated GdkFrameClock"),
+                           GDK_TYPE_FRAME_CLOCK,
+                           GTK_PARAM_READWRITE);
+
+  properties[PROP_DIRECTION] =
+      g_param_spec_enum ("direction",
+                         P_("Direction"),
+                         P_("Text direction"),
+                         GTK_TYPE_TEXT_DIRECTION,
+                         GTK_TEXT_DIR_LTR,
+                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED);
 
   /**
    * GtkStyleContext:parent:
@@ -245,13 +247,14 @@ gtk_style_context_class_init (GtkStyleContextClass *klass)
    *
    * Since: 3.4
    */
-  g_object_class_install_property (object_class,
-                                   PROP_PARENT,
-                                   g_param_spec_object ("parent",
-                                                        P_("Parent"),
-                                                        P_("The parent style context"),
-                                                        GTK_TYPE_STYLE_CONTEXT,
-                                                        GTK_PARAM_READWRITE));
+  properties[PROP_PARENT] =
+      g_param_spec_object ("parent",
+                           P_("Parent"),
+                           P_("The parent style context"),
+                           GTK_TYPE_STYLE_CONTEXT,
+                           GTK_PARAM_READWRITE);
+
+  g_object_class_install_properties (object_class, LAST_PROP, properties);
 }
 
 void
@@ -965,7 +968,7 @@ gtk_style_context_set_state (GtkStyleContext *context,
 
   if (((old_flags ^ flags) & (GTK_STATE_FLAG_DIR_LTR | GTK_STATE_FLAG_DIR_RTL)) &&
       !gtk_style_context_is_saved (context))
-    g_object_notify (G_OBJECT (context), "direction");
+    g_object_notify_by_pspec (G_OBJECT (context), properties[PROP_DIRECTION]);
 }
 
 /**
@@ -1176,7 +1179,7 @@ gtk_style_context_set_parent (GtkStyleContext *context,
 
   priv->parent = parent;
 
-  g_object_notify (G_OBJECT (context), "parent");
+  g_object_notify_by_pspec (G_OBJECT (context), properties[PROP_PARENT]);
   gtk_css_node_invalidate (gtk_style_context_get_root (context), GTK_CSS_CHANGE_ANY_PARENT | 
GTK_CSS_CHANGE_ANY_SIBLING);
 }
 
@@ -1975,7 +1978,7 @@ gtk_style_context_set_screen (GtkStyleContext *context,
 
   priv->screen = screen;
 
-  g_object_notify (G_OBJECT (context), "screen");
+  g_object_notify_by_pspec (G_OBJECT (context), properties[PROP_SCREEN]);
 }
 
 /**
@@ -2031,7 +2034,7 @@ gtk_style_context_set_frame_clock (GtkStyleContext *context,
   if (priv->frame_clock)
     g_object_ref (priv->frame_clock);
 
-  g_object_notify (G_OBJECT (context), "paint-clock");
+  g_object_notify_by_pspec (G_OBJECT (context), properties[PROP_FRAME_CLOCK]);
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]