mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
Avoid property notification during g_object_set
If we have no nontrivial notify vfunc, and no signal handlers for notify, we don't need to maintain the notify queue. No need to notify if nobody's listening.
This commit is contained in:
parent
8851112b8d
commit
f755f445c6
@ -1345,7 +1345,8 @@ g_object_notify_by_spec_internal (GObject *object,
|
||||
if (redirected != NULL)
|
||||
pspec = redirected;
|
||||
|
||||
if (pspec != NULL)
|
||||
if (pspec != NULL &&
|
||||
_g_object_has_notify_handler (object))
|
||||
{
|
||||
GObjectNotifyQueue *nqueue;
|
||||
|
||||
@ -2516,7 +2517,7 @@ g_object_setv (GObject *object,
|
||||
const GValue values[])
|
||||
{
|
||||
guint i;
|
||||
GObjectNotifyQueue *nqueue;
|
||||
GObjectNotifyQueue *nqueue = NULL;
|
||||
GParamSpec *pspec;
|
||||
GType obj_type;
|
||||
|
||||
@ -2527,7 +2528,10 @@ g_object_setv (GObject *object,
|
||||
|
||||
g_object_ref (object);
|
||||
obj_type = G_OBJECT_TYPE (object);
|
||||
nqueue = g_object_notify_queue_freeze (object, FALSE);
|
||||
|
||||
if (_g_object_has_notify_handler (object))
|
||||
nqueue = g_object_notify_queue_freeze (object, FALSE);
|
||||
|
||||
for (i = 0; i < n_properties; i++)
|
||||
{
|
||||
pspec = g_param_spec_pool_lookup (pspec_pool, names[i], obj_type, TRUE);
|
||||
@ -2538,7 +2542,9 @@ g_object_setv (GObject *object,
|
||||
object_set_property (object, pspec, &values[i], nqueue);
|
||||
}
|
||||
|
||||
g_object_notify_queue_thaw (object, nqueue);
|
||||
if (nqueue)
|
||||
g_object_notify_queue_thaw (object, nqueue);
|
||||
|
||||
g_object_unref (object);
|
||||
}
|
||||
|
||||
@ -2556,14 +2562,16 @@ g_object_set_valist (GObject *object,
|
||||
const gchar *first_property_name,
|
||||
va_list var_args)
|
||||
{
|
||||
GObjectNotifyQueue *nqueue;
|
||||
GObjectNotifyQueue *nqueue = NULL;
|
||||
const gchar *name;
|
||||
|
||||
g_return_if_fail (G_IS_OBJECT (object));
|
||||
|
||||
|
||||
g_object_ref (object);
|
||||
nqueue = g_object_notify_queue_freeze (object, FALSE);
|
||||
|
||||
|
||||
if (_g_object_has_notify_handler (object))
|
||||
nqueue = g_object_notify_queue_freeze (object, FALSE);
|
||||
|
||||
name = first_property_name;
|
||||
while (name)
|
||||
{
|
||||
@ -2600,7 +2608,9 @@ g_object_set_valist (GObject *object,
|
||||
name = va_arg (var_args, gchar*);
|
||||
}
|
||||
|
||||
g_object_notify_queue_thaw (object, nqueue);
|
||||
if (nqueue)
|
||||
g_object_notify_queue_thaw (object, nqueue);
|
||||
|
||||
g_object_unref (object);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user