summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2014-06-04 08:59:50 -0400
committerRyan Lortie <desrt@desrt.ca>2014-06-06 10:25:48 -0400
commitbbdb2345fc7e5a57cb7af90ab0bf8ced437ada24 (patch)
tree42e232dbfd7c2505810ee0aee19ac6b05d8dedaa
parentdc496ac7644d11e47b626a879b12813b31ef83b7 (diff)
gobject: add 'explicit notify' GParamSpec flag
Add a flag to prevent the automatic emission of the "notify" signal during g_object_set_property(). If this flag is set then the class must explicitly emit the notify for themselves. This is already standard practice on most classes, but we cannot simply remove the existing behaviour because there are surely many cases where it is needed. https://bugzilla.gnome.org/show_bug.cgi?id=731200
-rw-r--r--gobject/gobject.c13
-rw-r--r--gobject/gparam.h5
2 files changed, 13 insertions, 5 deletions
diff --git a/gobject/gobject.c b/gobject/gobject.c
index 4a35cd065..7e9e46752 100644
--- a/gobject/gobject.c
+++ b/gobject/gobject.c
@@ -1380,14 +1380,17 @@ object_set_property (GObject *object,
}
else
{
- GParamSpec *notify_pspec;
-
class->set_property (object, param_id, &tmp_value, pspec);
- notify_pspec = get_notify_pspec (pspec);
+ if (~pspec->flags & G_PARAM_EXPLICIT_NOTIFY)
+ {
+ GParamSpec *notify_pspec;
+
+ notify_pspec = get_notify_pspec (pspec);
- if (notify_pspec != NULL)
- g_object_notify_queue_add (object, nqueue, notify_pspec);
+ if (notify_pspec != NULL)
+ g_object_notify_queue_add (object, nqueue, notify_pspec);
+ }
}
g_value_unset (&tmp_value);
}
diff --git a/gobject/gparam.h b/gobject/gparam.h
index fb21f7bae..8f216e4ce 100644
--- a/gobject/gparam.h
+++ b/gobject/gparam.h
@@ -130,6 +130,10 @@ G_BEGIN_DECLS
* parameter is guaranteed to remain valid and
* unmodified for the lifetime of the parameter.
* Since 2.8
+ * @G_PARAM_EXPLICIT_NOTIFY: calls to g_object_set_property() for this
+ * property will not automatically result in a "notify" signal being
+ * emitted: the implementation must call g_object_notify() themselves
+ * in case the property actually changes. Since: 2.42.
* @G_PARAM_PRIVATE: internal
* @G_PARAM_DEPRECATED: the parameter is deprecated and will be removed
* in a future version. A warning will be generated if it is used
@@ -153,6 +157,7 @@ typedef enum
#endif
G_PARAM_STATIC_NICK = 1 << 6,
G_PARAM_STATIC_BLURB = 1 << 7,
+ G_PARAM_EXPLICIT_NOTIFY = 1 << 8,
/* User defined flags go up to 30 */
G_PARAM_DEPRECATED = 1 << 31
} GParamFlags;