summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tvb@src.gnome.org>2009-04-15 19:11:19 +0000
committerTristan Van Berkom <tvb@src.gnome.org>2009-04-15 19:11:19 +0000
commitbd3329123aeb6d9c4784496261907466efd75246 (patch)
tree122ac54ff916c3471d0213cbcb1d3ddb252c3933
parent189fb384af8c51d3936fc8f417f1e261f639b9e7 (diff)
downloadglade-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--ChangeLog8
-rw-r--r--gladeui/glade-property.c2
-rw-r--r--plugins/gtk+/glade-gtk.c72
-rw-r--r--plugins/gtk+/gtk+.xml.in1
4 files changed, 76 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 9c081f8e..5ec5746e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>