diff options
author | Tristan Van Berkom <tvb@src.gnome.org> | 2009-04-15 19:11:19 +0000 |
---|---|---|
committer | Tristan Van Berkom <tvb@src.gnome.org> | 2009-04-15 19:11:19 +0000 |
commit | bd3329123aeb6d9c4784496261907466efd75246 (patch) | |
tree | 122ac54ff916c3471d0213cbcb1d3ddb252c3933 | |
parent | 189fb384af8c51d3936fc8f417f1e261f639b9e7 (diff) | |
download | glade-bd3329123aeb6d9c4784496261907466efd75246.tar.gz |
Added glade_gtk_cell_renderer_read_widget() and now
* plugins/gtk+/glade-gtk.c, plugins/gtk+/gtk+.xml.in:
Added glade_gtk_cell_renderer_read_widget() and now
glade_gtk_cell_layout_read_child() doesnt load attributes
if the object property has been explicitly specified in
the Glade file (fixes bug 566928).
svn path=/trunk/; revision=2188
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | gladeui/glade-property.c | 2 | ||||
-rw-r--r-- | plugins/gtk+/glade-gtk.c | 72 | ||||
-rw-r--r-- | plugins/gtk+/gtk+.xml.in | 1 |
4 files changed, 76 insertions, 7 deletions
@@ -1,3 +1,11 @@ +2009-04-15 Tristan Van Berkom <tvb@gnome.org> + + * plugins/gtk+/glade-gtk.c, plugins/gtk+/gtk+.xml.in: + Added glade_gtk_cell_renderer_read_widget() and now + glade_gtk_cell_layout_read_child() doesnt load attributes + if the object property has been explicitly specified in + the Glade file (fixes bug 566928). + 2009-04-07 Tristan Van Berkom <tvb@gnome.org> * plugins/gtk+/glade-gtk.c: GtkWindow adaptor was skipping GtkWidget diff --git a/gladeui/glade-property.c b/gladeui/glade-property.c index 3460e86a..2fc118d6 100644 --- a/gladeui/glade-property.c +++ b/gladeui/glade-property.c @@ -844,6 +844,8 @@ glade_property_equals (GladeProperty *property, ...) * @value: a #GValue * * Sets the property's value + * + * Returns: Whether the property was successfully set. */ gboolean glade_property_set_value (GladeProperty *property, const GValue *value) diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c index 7880db14..751c4efd 100644 --- a/plugins/gtk+/glade-gtk.c +++ b/plugins/gtk+/glade-gtk.c @@ -10410,23 +10410,35 @@ glade_gtk_cell_renderer_set_use_attribute (GObject *object, g_free (attr_prop_name); } +static GladeProperty * +glade_gtk_cell_renderer_attribute_switch (GladeWidget *gwidget, + const gchar *property_name) +{ + GladeProperty *property; + gchar *use_attr_name = g_strdup_printf ("use-attr-%s", property_name); + + property = glade_widget_get_property (gwidget, use_attr_name); + g_free (use_attr_name); + + return property; +} + static gboolean glade_gtk_cell_renderer_property_enabled (GObject *object, const gchar *property_name) { - GladeWidget *gwidget = glade_widget_get_from_gobject (object); - gchar *use_attr_name = g_strdup_printf ("use-attr-%s", property_name); GladeProperty *property; + GladeWidget *gwidget = glade_widget_get_from_gobject (object); gboolean use_attr = TRUE; - if ((property = glade_widget_get_property (gwidget, use_attr_name)) != NULL) + if ((property = + glade_gtk_cell_renderer_attribute_switch (gwidget, property_name)) != NULL) glade_property_get (property, &use_attr); - g_free (use_attr_name); - return !use_attr; } + void glade_gtk_cell_renderer_set_property (GladeWidgetAdaptor *adaptor, GObject *object, @@ -10508,6 +10520,49 @@ glade_gtk_cell_renderer_write_widget (GladeWidgetAdaptor *adaptor, GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node); } +void +glade_gtk_cell_renderer_read_widget (GladeWidgetAdaptor *adaptor, + GladeWidget *widget, + GladeXmlNode *node) +{ + GladeProperty *property; + GList *l; + static gint attr_len = 0, use_attr_len = 0; + + if (!glade_xml_node_verify + (node, GLADE_XML_TAG_WIDGET (glade_project_get_format (widget->project)))) + return; + + /* First chain up and read in all the properties... */ + GWA_GET_CLASS (G_TYPE_OBJECT)->read_widget (adaptor, widget, node); + + + /* Now set "use-attr-*" everywhere that the object property is non-default */ + if (!attr_len) + { + attr_len = strlen ("attr-"); + use_attr_len = strlen ("use-attr-"); + } + + for (l = widget->properties; l; l = l->next) + { + GladeProperty *switch_prop; + property = l->data; + + if (strncmp (property->klass->id, "attr-", attr_len) != 0 && + strncmp (property->klass->id, "use-attr-", use_attr_len) != 0 && + (switch_prop = + glade_gtk_cell_renderer_attribute_switch (widget, property->klass->id)) != NULL) + { + if (glade_property_original_default (property)) + glade_property_set (switch_prop, TRUE); + else + glade_property_set (switch_prop, FALSE); + } + } + +} + /*--------------------------- GtkCellLayout ---------------------------------*/ void glade_gtk_cell_layout_add_child (GladeWidgetAdaptor *adaptor, @@ -10642,8 +10697,11 @@ glade_gtk_cell_renderer_read_attributes (GladeWidget *widget, GladeXmlNode *node if (attr_prop && use_attr_prop) { - glade_property_set (use_attr_prop, TRUE); - glade_property_set (attr_prop, g_ascii_strtoll (column_str, NULL, 10)); + gboolean use_attribute = FALSE; + glade_property_get (use_attr_prop, &use_attribute); + + if (use_attribute) + glade_property_set (attr_prop, g_ascii_strtoll (column_str, NULL, 10)); } g_free (name); diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in index e95e7979..c9aa0926 100644 --- a/plugins/gtk+/gtk+.xml.in +++ b/plugins/gtk+/gtk+.xml.in @@ -2177,6 +2177,7 @@ embedded in another object</_tooltip> <create-editable-function>glade_gtk_cell_renderer_create_editable</create-editable-function> <set-property-function>glade_gtk_cell_renderer_set_property</set-property-function> <write-widget-function>glade_gtk_cell_renderer_write_widget</write-widget-function> + <read-widget-function>glade_gtk_cell_renderer_read_widget</read-widget-function> <action-activate-function>glade_gtk_cell_renderer_action_activate</action-activate-function> <actions> |