[gtk+] stylecontext: Use node declaration in hash



commit 57cafc277b5bcc1b5f6a3d4dd62cca8f5f660073
Author: Benjamin Otte <otte redhat com>
Date:   Sat Oct 18 06:06:28 2014 +0200

    stylecontext: Use node declaration in hash
    
    Don't use the StyleInfo anymore.

 gtk/gtkstylecontext.c |   58 ++++++++++++++++---------------------------------
 1 files changed, 19 insertions(+), 39 deletions(-)
---
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 8ef33af..daa733b 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -351,26 +351,6 @@ style_info_copy (GtkStyleInfo *info)
   return copy;
 }
 
-static guint
-style_info_hash (gconstpointer elem)
-{
-  const GtkStyleInfo *info = elem;
-
-  return gtk_css_node_declaration_hash (info->decl);
-}
-
-static gboolean
-style_info_equal (gconstpointer elem1,
-                  gconstpointer elem2)
-{
-  const GtkStyleInfo *info1, *info2;
-
-  info1 = elem1;
-  info2 = elem2;
-
-  return gtk_css_node_declaration_equal (info1->decl, info2->decl);
-}
-
 static void
 gtk_style_context_cascade_changed (GtkStyleCascade *cascade,
                                    GtkStyleContext *context)
@@ -419,9 +399,9 @@ gtk_style_context_init (GtkStyleContext *style_context)
   priv = style_context->priv =
     gtk_style_context_get_instance_private (style_context);
 
-  priv->style_values = g_hash_table_new_full (style_info_hash,
-                                              style_info_equal,
-                                              (GDestroyNotify) style_info_free,
+  priv->style_values = g_hash_table_new_full (gtk_css_node_declaration_hash,
+                                              gtk_css_node_declaration_equal,
+                                              (GDestroyNotify) gtk_css_node_declaration_unref,
                                               g_object_unref);
 
   priv->screen = gdk_screen_get_default ();
@@ -657,8 +637,8 @@ gtk_style_context_is_saved (GtkStyleContext *context)
 }
 
 static GtkWidgetPath *
-create_query_path (GtkStyleContext *context,
-                   GtkStyleInfo    *info)
+create_query_path (GtkStyleContext             *context,
+                   const GtkCssNodeDeclaration *decl)
 {
   GtkStyleContextPrivate *priv;
   GtkWidgetPath *path;
@@ -675,22 +655,22 @@ create_query_path (GtkStyleContext *context,
         gtk_css_node_declaration_add_to_widget_path (root->decl, path, length - 1);
 
       gtk_widget_path_append_type (path, length > 0 ? gtk_widget_path_iter_get_object_type (path, length - 
1) : G_TYPE_NONE);
-      gtk_css_node_declaration_add_to_widget_path (info->decl, path, length);
+      gtk_css_node_declaration_add_to_widget_path (decl, path, length);
     }
   else
     {
       if (length > 0)
-        gtk_css_node_declaration_add_to_widget_path (info->decl, path, length - 1);
+        gtk_css_node_declaration_add_to_widget_path (decl, path, length - 1);
     }
 
   return path;
 }
 
 static void
-build_properties (GtkStyleContext      *context,
-                  GtkCssComputedValues *values,
-                  GtkStyleInfo         *info,
-                  const GtkBitmask     *relevant_changes)
+build_properties (GtkStyleContext             *context,
+                  GtkCssComputedValues        *values,
+                  const GtkCssNodeDeclaration *decl,
+                  const GtkBitmask            *relevant_changes)
 {
   GtkStyleContextPrivate *priv;
   GtkCssMatcher matcher;
@@ -699,7 +679,7 @@ build_properties (GtkStyleContext      *context,
 
   priv = context->priv;
 
-  path = create_query_path (context, info);
+  path = create_query_path (context, decl);
   lookup = _gtk_css_lookup_new (relevant_changes);
 
   if (_gtk_css_matcher_init (&matcher, path))
@@ -733,7 +713,7 @@ style_values_lookup (GtkStyleContext *context)
 
   g_assert (priv->widget != NULL || priv->widget_path != NULL);
 
-  values = g_hash_table_lookup (priv->style_values, info);
+  values = g_hash_table_lookup (priv->style_values, info->decl);
   if (values)
     {
       style_info_set_values (info, values);
@@ -745,10 +725,10 @@ style_values_lookup (GtkStyleContext *context)
   style_info_set_values (info, values);
   if (gtk_style_context_is_saved (context))
     g_hash_table_insert (priv->style_values,
-                         style_info_copy (info),
+                         gtk_css_node_declaration_ref (info->decl),
                          g_object_ref (values));
   
-  build_properties (context, values, info, NULL);
+  build_properties (context, values, info->decl, NULL);
 
   g_object_unref (values);
 
@@ -2648,14 +2628,14 @@ gtk_style_context_update_cache (GtkStyleContext  *context,
   g_hash_table_iter_init (&iter, priv->style_values);
   while (g_hash_table_iter_next (&iter, &key, &value))
     {
-      GtkStyleInfo *info = key;
+      const GtkCssNodeDeclaration *decl = key;
       GtkCssComputedValues *values = value;
       GtkBitmask *changes;
 
       changes = _gtk_css_computed_values_compute_dependencies (values, parent_changes);
 
       if (!_gtk_bitmask_is_empty (changes))
-       build_properties (context, values, info, changes);
+       build_properties (context, values, decl, changes);
 
       _gtk_bitmask_free (changes);
     }
@@ -2719,7 +2699,7 @@ gtk_style_context_needs_full_revalidate (GtkStyleContext  *context,
           GtkWidgetPath *path;
           GtkCssMatcher matcher, superset;
 
-          path = create_query_path (context, priv->info);
+          path = create_query_path (context, priv->info->decl);
           if (_gtk_css_matcher_init (&matcher, path))
             {
               _gtk_css_matcher_superset_init (&superset, &matcher, GTK_STYLE_CONTEXT_RADICAL_CHANGE & 
~GTK_CSS_CHANGE_SOURCE);
@@ -2852,7 +2832,7 @@ _gtk_style_context_validate (GtkStyleContext  *context,
     {
       changes = _gtk_css_computed_values_compute_dependencies (current, parent_changes);
       if (!_gtk_bitmask_is_empty (changes))
-       build_properties (context, current, info, changes);
+       build_properties (context, current, info->decl, changes);
 
       gtk_style_context_update_cache (context, parent_changes);
     }


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