diff options
author | Daniel Playfair Cal <daniel.playfair.cal@gmail.com> | 2019-12-30 00:38:58 +0000 |
---|---|---|
committer | Daniel Playfair Cal <daniel.playfair.cal@gmail.com> | 2019-12-30 00:38:58 +0000 |
commit | a1da64420c365004da1049199b03e6eca9c5f447 (patch) | |
tree | d3eb3350d99e70ee771a09b786db2dc169237b12 /service/dconf-writer.c | |
parent | 7ad890fb7a2ec90a777a756a1fa20a615ec7245e (diff) | |
parent | f3104f75f945bd3418e5cf59fcc7c5044c071f2b (diff) | |
download | dconf-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.c | 26 |
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; |