diff options
author | Benjamin Otte <otte@redhat.com> | 2011-05-27 17:51:40 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2011-06-02 02:03:51 +0200 |
commit | 67fe600b2eaf32dce976e75858bece5b46bb5bb9 (patch) | |
tree | 147353b5c24389a41543726e370e56f6a94e546a /gtk/gtkwidgetpath.c | |
parent | f0e5b576999844194d647af1eeec2c4e6a663a40 (diff) | |
download | gtk+-67fe600b2eaf32dce976e75858bece5b46bb5bb9.tar.gz |
widgetpath: Factor out the element copy function
I'll need that function soon.
Diffstat (limited to 'gtk/gtkwidgetpath.c')
-rw-r--r-- | gtk/gtkwidgetpath.c | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/gtk/gtkwidgetpath.c b/gtk/gtkwidgetpath.c index 55085d2fed..de58ca03d9 100644 --- a/gtk/gtkwidgetpath.c +++ b/gtk/gtkwidgetpath.c @@ -123,6 +123,34 @@ gtk_widget_path_new (void) return path; } +static void +gtk_path_element_copy (GtkPathElement *dest, + const GtkPathElement *src) +{ + memset (dest, 0, sizeof (GtkPathElement)); + + dest->type = src->type; + dest->name = src->name; + + if (src->regions) + { + GHashTableIter iter; + gpointer key, value; + + g_hash_table_iter_init (&iter, src->regions); + dest->regions = g_hash_table_new (NULL, NULL); + + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_insert (dest->regions, key, value); + } + + if (src->classes) + { + dest->classes = g_array_new (FALSE, FALSE, sizeof (GQuark)); + g_array_append_vals (dest->classes, src->classes->data, src->classes->len); + } +} + /** * gtk_widget_path_copy: * @path: a #GtkWidgetPath @@ -145,30 +173,11 @@ gtk_widget_path_copy (const GtkWidgetPath *path) for (i = 0; i < path->elems->len; i++) { - GtkPathElement *elem, new = { 0 }; + GtkPathElement *elem, new; elem = &g_array_index (path->elems, GtkPathElement, i); - new.type = elem->type; - new.name = elem->name; - - if (elem->regions) - { - GHashTableIter iter; - gpointer key, value; - - g_hash_table_iter_init (&iter, elem->regions); - new.regions = g_hash_table_new (NULL, NULL); - - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (new.regions, key, value); - } - - if (elem->classes) - { - new.classes = g_array_new (FALSE, FALSE, sizeof (GQuark)); - g_array_append_vals (new.classes, elem->classes->data, elem->classes->len); - } + gtk_path_element_copy (&new, elem); g_array_append_val (new_path->elems, new); } |