[glib] Handle non-readable/-writable properties when binding
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Handle non-readable/-writable properties when binding
- Date: Wed, 21 Apr 2010 16:36:01 +0000 (UTC)
commit ccf9361490fa3684b22e52655e3236b2cd28a517
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Apr 21 12:31:33 2010 -0400
Handle non-readable/-writable properties when binding
And document readability/writability requirements for binding flags.
gio/gsettings.c | 31 ++++++++++++++++++++++++++++++-
gio/gsettings.h | 6 ++++--
2 files changed, 34 insertions(+), 3 deletions(-)
---
diff --git a/gio/gsettings.c b/gio/gsettings.c
index 28c3121..26c7515 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -1326,6 +1326,19 @@ g_settings_bind_with_mapping (GSettings *settings,
return;
}
+ if ((flags & G_SETTINGS_BIND_GET) && (binding->property->flags & G_PARAM_WRITABLE) == 0)
+ {
+ g_critical ("g_settings_bind: property '%s' on class '%s' is not writable",
+ property, G_OBJECT_TYPE_NAME (object));
+ return;
+ }
+ if ((flags & G_SETTINGS_BIND_SET) && (binding->property->flags & G_PARAM_READABLE) == 0)
+ {
+ g_critical ("g_settings_bind: property '%s' on class '%s' is not readable",
+ property, G_OBJECT_TYPE_NAME (object));
+ return;
+ }
+
{
GVariant *value;
@@ -1363,7 +1376,8 @@ g_settings_bind_with_mapping (GSettings *settings,
sensitive = g_object_class_find_property (objectclass, "sensitive");
- if (sensitive && sensitive->value_type == G_TYPE_BOOLEAN)
+ if (sensitive && sensitive->value_type == G_TYPE_BOOLEAN &&
+ (sensitive->flags & G_PARAM_WRITABLE))
g_settings_bind_writable (settings, binding->key,
object, "sensitive", FALSE);
}
@@ -1479,6 +1493,21 @@ g_settings_bind_writable (GSettings *settings,
{
GSettingsWritableBinding *binding;
gchar *detailed_signal;
+ GParamSpec *pspec;
+
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (object), property);
+ if (pspec == NULL)
+ {
+ g_critical ("g_settings_bind_writable: no property '%s' on class '%s'",
+ property, G_OBJECT_TYPE_NAME (object));
+ return;
+ }
+ if ((pspec->flags & G_PARAM_WRITABLE) == 0)
+ {
+ g_critical ("g_settings_bind_writable: property '%s' on class '%s' is not writable",
+ property, G_OBJECT_TYPE_NAME (object));
+ return;
+ }
binding = g_slice_new (GSettingsWritableBinding);
binding->settings = g_object_ref (settings);
diff --git a/gio/gsettings.h b/gio/gsettings.h
index 79d84b5..440ce03 100644
--- a/gio/gsettings.h
+++ b/gio/gsettings.h
@@ -164,8 +164,10 @@ typedef gboolean (*GSettingsBindGetMapping) (GValue
/**
* GSettingsBindFlags:
* @G_SETTINGS_BIND_DEFAULT: Equivalent to <literal>G_SETTINGS_BIND_GET|G_SETTINGS_BIND_SET</literal>
- * @G_SETTINGS_BIND_GET: Update the #GObject property when the setting changes
- * @G_SETTINGS_BIND_SET: Update the setting when the #GObject property changes
+ * @G_SETTINGS_BIND_GET: Update the #GObject property when the setting changes.
+ * It is an error to use this flag if the property is not writable.
+ * @G_SETTINGS_BIND_SET: Update the setting when the #GObject property changes.
+ * It is an error to use this flag if the property is not readable.
* @G_SETTINGS_BIND_NO_SENSITIVITY: Do not try to bind a "sensitivity" property to the writability of the setting
* @G_SETTINGS_BIND_GET_NO_CHANGES: When set in addition to #G_SETTINGS_BIND_GET, set the #GObject property
* value initially from the setting, but do not listen for changes of the setting
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]