summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorDaniel Playfair Cal <daniel.playfair.cal@gmail.com>2017-12-11 17:11:14 +1100
committerDaniel Playfair Cal <daniel.playfair.cal@gmail.com>2019-12-29 20:06:20 +1100
commit5974d2d08b2d4dffffd348d240aba8afb9dfeb35 (patch)
tree868c255ef024abe4527b647a9baddd74ad39d1e4 /service
parent7ad890fb7a2ec90a777a756a1fa20a615ec7245e (diff)
downloaddconf-5974d2d08b2d4dffffd348d240aba8afb9dfeb35.tar.gz
Service: filter changesets when performing writes such that changed events are only emitted if new values differ from existing values
Diffstat (limited to 'service')
-rw-r--r--service/dconf-writer.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/service/dconf-writer.c b/service/dconf-writer.c
index 26f66dd..8b59019 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