summaryrefslogtreecommitdiff
path: root/service/dconf-writer.c
diff options
context:
space:
mode:
authorDaniel Playfair Cal <daniel.playfair.cal@gmail.com>2019-12-30 00:38:58 +0000
committerDaniel Playfair Cal <daniel.playfair.cal@gmail.com>2019-12-30 00:38:58 +0000
commita1da64420c365004da1049199b03e6eca9c5f447 (patch)
treed3eb3350d99e70ee771a09b786db2dc169237b12 /service/dconf-writer.c
parent7ad890fb7a2ec90a777a756a1fa20a615ec7245e (diff)
parentf3104f75f945bd3418e5cf59fcc7c5044c071f2b (diff)
downloaddconf-a1da64420c365004da1049199b03e6eca9c5f447.tar.gz
Merge branch 'patch/service-check' into 'master'
Service: only emit changed signals when values change See merge request GNOME/dconf!3
Diffstat (limited to 'service/dconf-writer.c')
-rw-r--r--service/dconf-writer.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/service/dconf-writer.c b/service/dconf-writer.c
index 26f66dd..4d054c8 100644
--- a/service/dconf-writer.c
+++ b/service/dconf-writer.c
@@ -130,21 +130,25 @@ dconf_writer_real_change (DConfWriter *writer,
const gchar *tag)
{
g_return_if_fail (writer->priv->uncommited_values != NULL);
+ DConfChangeset *effective_changeset = dconf_changeset_filter_changes (writer->priv->uncommited_values,
+ changeset);
- dconf_changeset_change (writer->priv->uncommited_values, changeset);
-
- if (tag)
+ if (effective_changeset)
{
- TaggedChange *change;
+ dconf_changeset_change (writer->priv->uncommited_values, effective_changeset);
+ if (tag)
+ {
+ TaggedChange *change;
- change = g_slice_new (TaggedChange);
- change->changeset = dconf_changeset_ref (changeset);
- change->tag = g_strdup (tag);
+ change = g_slice_new (TaggedChange);
+ change->changeset = dconf_changeset_ref (effective_changeset);
+ change->tag = g_strdup (tag);
- g_queue_push_tail (&writer->priv->uncommited_changes, change);
- }
+ g_queue_push_tail (&writer->priv->uncommited_changes, change);
+ }
- writer->priv->need_write = TRUE;
+ writer->priv->need_write = TRUE;
+ }
}
static gboolean
@@ -179,6 +183,8 @@ dconf_writer_real_commit (DConfWriter *writer,
close (invalidate_fd);
}
+ writer->priv->need_write = FALSE;
+
if (writer->priv->commited_values)
dconf_changeset_unref (writer->priv->commited_values);
writer->priv->commited_values = writer->priv->uncommited_values;