summaryrefslogtreecommitdiff
path: root/service/dconf-writer.c
diff options
context:
space:
mode:
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;