[libgd] GdTaggedEntryTag: Use entry's style context



commit 7e0dd4b15ea80673f62249ac092763b10fc226ad
Author: Benjamin Otte <otte redhat com>
Date:   Thu Aug 27 23:55:29 2015 +0200

    GdTaggedEntryTag: Use entry's style context
    
    Reuse the entry's style context via save()/restore() instead of creating
    a new style context all the time.
    
    Solves a bunch of styling problems, such as value inheritance.

 libgd/gd-tagged-entry.c |   28 +++++++++++++---------------
 1 files changed, 13 insertions(+), 15 deletions(-)
---
diff --git a/libgd/gd-tagged-entry.c b/libgd/gd-tagged-entry.c
index 82baed4..35c481d 100644
--- a/libgd/gd-tagged-entry.c
+++ b/libgd/gd-tagged-entry.c
@@ -95,7 +95,7 @@ gd_tagged_entry_tag_get_margin (GdTaggedEntryTag *tag,
 
   context = gd_tagged_entry_tag_get_context (tag, entry);
   gtk_style_context_get_margin (context, 0, margin);
-  g_object_unref (context);
+  gtk_style_context_restore (context);
 }
 
 static void
@@ -238,19 +238,17 @@ gd_tagged_entry_tag_get_context (GdTaggedEntryTag *tag,
                                  GdTaggedEntry    *entry)
 {
   GtkWidget *widget = GTK_WIDGET (entry);
-  GtkWidgetPath *path;
-  gint pos;
   GtkStyleContext *retval;
+  GList *l, *list;
 
-  retval = gtk_style_context_new ();
-  path = gtk_widget_path_copy (gtk_widget_get_path (widget));
-
-  pos = gtk_widget_path_append_type (path, GD_TYPE_TAGGED_ENTRY);
-  gtk_widget_path_iter_add_class (path, pos, tag->priv->style);
+  retval = gtk_widget_get_style_context (widget);
+  gtk_style_context_save (retval);
 
-  gtk_style_context_set_path (retval, path);
-
-  gtk_widget_path_unref (path);
+  list = gtk_style_context_list_classes (retval);
+  for (l = list; l; l = l->next)
+    gtk_style_context_remove_class (retval, l->data);
+  g_list_free (list);
+  gtk_style_context_add_class (retval, tag->priv->style);
 
   return retval;
 }
@@ -278,7 +276,7 @@ gd_tagged_entry_tag_get_width (GdTaggedEntryTag *tag,
 
   gd_tagged_entry_tag_ensure_close_surface (tag, context);
 
-  g_object_unref (context);
+  gtk_style_context_restore (context);
 
   button_width = 0;
   if (entry->priv->button_visible && tag->priv->has_close_button)
@@ -393,7 +391,7 @@ gd_tagged_entry_tag_event_is_button (GdTaggedEntryTag *tag,
   context = gd_tagged_entry_tag_get_context (tag, entry);
   gd_tagged_entry_tag_get_relative_allocations (tag, entry, context, NULL, NULL, &button_allocation);
 
-  g_object_unref (context);
+  gtk_style_context_restore (context);
 
   /* see if the event falls into the button allocation */
   if ((event_x >= button_allocation.x && 
@@ -497,9 +495,9 @@ gd_tagged_entry_tag_draw (GdTaggedEntryTag *tag,
                            button_allocation.x, button_allocation.y);
 
 done:
-  cairo_restore (cr);
+  gtk_style_context_restore (context);
 
-  g_object_unref (context);
+  cairo_restore (cr);
 }
 
 static void


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