diff options
author | Daniel Playfair Cal <daniel.playfair.cal@gmail.com> | 2017-12-11 17:11:14 +1100 |
---|---|---|
committer | Daniel Playfair Cal <daniel.playfair.cal@gmail.com> | 2019-12-29 20:06:20 +1100 |
commit | 5974d2d08b2d4dffffd348d240aba8afb9dfeb35 (patch) | |
tree | 868c255ef024abe4527b647a9baddd74ad39d1e4 /service | |
parent | 7ad890fb7a2ec90a777a756a1fa20a615ec7245e (diff) | |
download | dconf-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.c | 24 |
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 |