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
This commit is contained in:
Ryan Lortie
2014-06-04 08:59:50 -04:00
parent dc496ac764
commit bbdb2345fc
2 changed files with 13 additions and 5 deletions

View File

@@ -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;
if (notify_pspec != NULL)
g_object_notify_queue_add (object, nqueue, notify_pspec);
notify_pspec = get_notify_pspec (pspec);
if (notify_pspec != NULL)
g_object_notify_queue_add (object, nqueue, notify_pspec);
}
}
g_value_unset (&tmp_value);
}