[dconf-editor] Use path to identify keys with pending changes.
- From: Arnaud Bonatti <arnaudb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dconf-editor] Use path to identify keys with pending changes.
- Date: Fri, 26 Jan 2018 22:36:21 +0000 (UTC)
commit 79ac22f9c2e90e3915f892409aaf20b62949c526
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date: Fri Jan 12 03:57:16 2018 +0100
Use path to identify keys with pending changes.
editor/dconf-model.vala | 25 +++++++++++------
editor/key-list-box-row.vala | 16 ++++++------
editor/modifications-handler.vala | 50 ++++++++++++++++++------------------
editor/modifications-revealer.vala | 4 +-
editor/registry-info.vala | 10 +++---
editor/registry-search.vala | 2 +-
editor/registry-view.vala | 2 +-
7 files changed, 58 insertions(+), 51 deletions(-)
---
diff --git a/editor/dconf-model.vala b/editor/dconf-model.vala
index 651db8a..5f54599 100644
--- a/editor/dconf-model.vala
+++ b/editor/dconf-model.vala
@@ -446,35 +446,42 @@ public class SettingsModel : Object
return client.read (key.full_name) == null;
}
- public void apply_key_value_changes (HashTable<Key, Variant?> changes)
+ public void apply_key_value_changes (HashTable<string, Variant?> changes)
{
HashTable<string, GLib.Settings> delayed_settings_hashtable = new HashTable<string, GLib.Settings>
(str_hash, str_equal);
DConf.Changeset dconf_changeset = new DConf.Changeset ();
- changes.foreach ((key, planned_value) => {
- if (key is GSettingsKey)
+ changes.foreach ((key_name, planned_value) => {
+ SettingObject? key = get_key (key_name);
+ if (key == null)
{
- string key_descriptor = key.descriptor;
+ // TODO change value anyway?
+ }
+ else if ((!) key is GSettingsKey)
+ {
+ string key_descriptor = ((Key) (!) key).descriptor;
string settings_descriptor = key_descriptor [0:key_descriptor.last_index_of_char (' ')];
// strip the key name
GLib.Settings? settings = delayed_settings_hashtable.lookup (settings_descriptor);
if (settings == null)
{
- settings = ((GSettingsKey) key).settings;
+ settings = ((GSettingsKey) (!) key).settings;
((!) settings).delay ();
delayed_settings_hashtable.insert (settings_descriptor, (!) settings);
}
if (planned_value == null)
{
- ((!) settings).reset (key.name);
+ ((!) settings).reset (((!) key).name);
if (((!) settings).backend.get_type ().name () == "GDelayedSettingsBackend") //
Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=791290
- ((!) settings).backend.changed (key.full_name, null);
+ ((!) settings).backend.changed (((!) key).full_name, null);
// Alternative workaround: key.value_changed ();
}
else
- ((!) settings).set_value (key.name, (!) planned_value);
+ ((!) settings).set_value (((!) key).name, (!) planned_value);
}
+ else if ((!) key is DConfKey)
+ dconf_changeset.set (((!) key).full_name, planned_value);
else
- dconf_changeset.set (key.full_name, planned_value);
+ assert_not_reached ();
});
delayed_settings_hashtable.foreach_remove ((key_descriptor, schema_settings) => {
schema_settings.apply (); return true; });
diff --git a/editor/key-list-box-row.vala b/editor/key-list-box-row.vala
index 8b167ba..77ba4b6 100644
--- a/editor/key-list-box-row.vala
+++ b/editor/key-list-box-row.vala
@@ -266,12 +266,12 @@ private abstract class KeyListBoxRow : ClickableListBoxRow
SettingsModel model = modifications_handler.model;
Key key = abstract_key;
StyleContext context = get_style_context ();
- if (modifications_handler.key_has_planned_change (key))
+ if (modifications_handler.key_has_planned_change (key.full_name))
{
context.add_class ("delayed");
if (key is DConfKey)
{
- if (modifications_handler.get_key_planned_value (key) == null)
+ if (modifications_handler.get_key_planned_value (key.full_name) == null)
context.add_class ("erase");
else
context.remove_class ("erase");
@@ -391,8 +391,8 @@ private class KeyListBoxRowEditableNoSchema : KeyListBoxRow
}
else
{
- bool planned_change = modifications_handler.key_has_planned_change (key);
- Variant? planned_value = modifications_handler.get_key_planned_value (key);
+ bool planned_change = modifications_handler.key_has_planned_change (key.full_name);
+ Variant? planned_value = modifications_handler.get_key_planned_value (key.full_name);
if (planned_change)
{
popover.new_section ();
@@ -520,8 +520,8 @@ private class KeyListBoxRowEditable : KeyListBoxRow
}
bool delayed_apply_menu = modifications_handler.get_current_delay_mode ();
- bool planned_change = modifications_handler.key_has_planned_change (key);
- Variant? planned_value = modifications_handler.get_key_planned_value (key);
+ bool planned_change = modifications_handler.key_has_planned_change (key.full_name);
+ Variant? planned_value = modifications_handler.get_key_planned_value (key.full_name);
variant = new Variant ("(ss)", key.full_name, key.schema_id);
popover.new_gaction ("customize", "ui.open-object(" + variant.print (false) + ")");
@@ -775,8 +775,8 @@ private class ContextPopover : Popover
string type_string = original_type.dup_string ();
bool delayed_apply_menu = modifications_handler.get_current_delay_mode ();
- bool planned_change = modifications_handler.key_has_planned_change (key);
- Variant? planned_value = modifications_handler.get_key_planned_value (key);
+ bool planned_change = modifications_handler.key_has_planned_change (key.full_name);
+ Variant? planned_value = modifications_handler.get_key_planned_value (key.full_name);
Variant? value_variant;
if (!has_default_value) // TODO report bug: if using ?: inside ?:, there's a "g_variant_ref:
assertion 'value->ref_count > 0' failed"
diff --git a/editor/modifications-handler.vala b/editor/modifications-handler.vala
index 94932be..c5394de 100644
--- a/editor/modifications-handler.vala
+++ b/editor/modifications-handler.vala
@@ -32,17 +32,16 @@ class ModificationsHandler : Object
{
public ModificationsMode mode { get; set; default=ModificationsMode.NONE; }
- private HashTable<Key, Variant?> keys_awaiting_hashtable = new HashTable<Key, Variant?> (
- (key) => { return str_hash (key.descriptor); },
- (key1, key2) => { return str_equal (key1.descriptor, key2.descriptor); }
- );
+ private HashTable<string, Variant?> keys_awaiting_hashtable = new HashTable<string, Variant?> (str_hash,
str_equal);
+
public uint dconf_changes_count
{
get
{
uint count = 0;
- keys_awaiting_hashtable .foreach ((key, planned_value) => {
- if (key is DConfKey)
+ keys_awaiting_hashtable.@foreach ((key_path, planned_value) => {
+ SettingObject? key = model.get_key (key_path);
+ if (key != null && (!) key is DConfKey)
count++;
});
return count;
@@ -53,8 +52,9 @@ class ModificationsHandler : Object
get
{
uint count = 0;
- keys_awaiting_hashtable .foreach ((key, planned_value) => {
- if (key is GSettingsKey)
+ keys_awaiting_hashtable.@foreach ((key_path, planned_value) => {
+ SettingObject? key = model.get_key (key_path);
+ if (key != null && (!) key is GSettingsKey)
count++;
});
return count;
@@ -100,21 +100,21 @@ class ModificationsHandler : Object
delayed_changes_changed ();
}
- public void add_delayed_setting (Key key, Variant? new_value)
+ public void add_delayed_setting (string key_path, Variant? new_value)
{
- keys_awaiting_hashtable.insert (key, new_value);
+ keys_awaiting_hashtable.insert (key_path, new_value);
mode = get_current_delay_mode () ? ModificationsMode.DELAYED : ModificationsMode.TEMPORARY;
delayed_changes_changed ();
}
- public void dismiss_change (Key key)
+ public void dismiss_change (string key_path)
{
if (mode == ModificationsMode.NONE)
mode = behaviour == Behaviour.ALWAYS_DELAY ? ModificationsMode.DELAYED :
ModificationsMode.TEMPORARY;
- keys_awaiting_hashtable.remove (key);
+ keys_awaiting_hashtable.remove (key_path);
delayed_changes_changed ();
}
@@ -154,22 +154,22 @@ class ModificationsHandler : Object
public Variant get_key_custom_value (Key key)
{
- bool planned_change = key_has_planned_change (key);
- Variant? planned_value = get_key_planned_value (key);
+ bool planned_change = key_has_planned_change (key.full_name);
+ Variant? planned_value = get_key_planned_value (key.full_name);
return planned_change && (planned_value != null) ? (!) planned_value : model.get_key_value (key);
}
public bool key_value_is_default (GSettingsKey key) // doesn't make sense for DConfKey?
{
- bool planned_change = key_has_planned_change (key);
- Variant? planned_value = get_key_planned_value (key);
+ bool planned_change = key_has_planned_change (key.full_name);
+ Variant? planned_value = get_key_planned_value (key.full_name);
return planned_change ? planned_value == null : model.is_key_default (key);
}
public void set_key_value (Key key, Variant? new_value)
{
if (get_current_delay_mode ())
- add_delayed_setting (key, new_value);
+ add_delayed_setting (key.full_name, new_value);
else if (new_value != null)
model.set_key_value (key, (!) new_value);
else if (key is GSettingsKey)
@@ -177,33 +177,33 @@ class ModificationsHandler : Object
else if (behaviour != Behaviour.UNSAFE)
{
enter_delay_mode ();
- add_delayed_setting (key, null);
+ add_delayed_setting (key.full_name, null);
}
else
model.erase_key ((DConfKey) key);
}
- public bool key_has_planned_change (Key key)
+ public bool key_has_planned_change (string key_path)
{
- if (keys_awaiting_hashtable.contains (key))
+ if (keys_awaiting_hashtable.contains (key_path))
return true;
bool has_planned_changed = false;
keys_awaiting_hashtable.@foreach ((key_awaiting, planned_value) => {
- if (key.full_name == key_awaiting.full_name)
+ if (key_path == key_awaiting)
has_planned_changed = true;
});
return has_planned_changed;
}
- public Variant? get_key_planned_value (Key key)
+ public Variant? get_key_planned_value (string key_path)
{
- if (keys_awaiting_hashtable.contains (key))
- return keys_awaiting_hashtable.lookup (key);
+ if (keys_awaiting_hashtable.contains (key_path))
+ return keys_awaiting_hashtable.lookup (key_path);
Variant? planned_changed = null;
keys_awaiting_hashtable.@foreach ((key_awaiting, planned_value) => {
- if (key.full_name == key_awaiting.full_name)
+ if (key_path == key_awaiting)
planned_changed = planned_value;
});
return planned_changed;
diff --git a/editor/modifications-revealer.vala b/editor/modifications-revealer.vala
index de88cd4..8a2e9d2 100644
--- a/editor/modifications-revealer.vala
+++ b/editor/modifications-revealer.vala
@@ -94,10 +94,10 @@ class ModificationsRevealer : Revealer
if (setting_object is DConfKey)
{
if (!model.is_key_ghost ((DConfKey) setting_object))
- modifications_handler.add_delayed_setting ((Key) setting_object, null);
+ modifications_handler.add_delayed_setting (setting_object.full_name, null);
}
else if (!model.is_key_default ((GSettingsKey) setting_object))
- modifications_handler.add_delayed_setting ((Key) setting_object, null);
+ modifications_handler.add_delayed_setting (setting_object.full_name, null);
}
}
diff --git a/editor/registry-info.vala b/editor/registry-info.vala
index 3a73175..f34edeb 100644
--- a/editor/registry-info.vala
+++ b/editor/registry-info.vala
@@ -172,9 +172,9 @@ class RegistryInfo : Grid, BrowsableView
if (modifications_handler.should_delay_apply (tmp_string))
{
if (is_valid)
- modifications_handler.add_delayed_setting (key, key_editor_child.get_variant ());
+ modifications_handler.add_delayed_setting (key.full_name,
key_editor_child.get_variant ());
else
- modifications_handler.dismiss_change (key);
+ modifications_handler.dismiss_change (key.full_name);
}
else
model.set_key_value (key, key_editor_child.get_variant ());
@@ -197,11 +197,11 @@ class RegistryInfo : Grid, BrowsableView
if (modifications_handler.should_delay_apply (tmp_string))
{
if (custom_value_switch.get_active ())
- modifications_handler.add_delayed_setting (key, null);
+ modifications_handler.add_delayed_setting (key.full_name, null);
else
{
Variant tmp_variant = modifications_handler.get_key_custom_value (key);
- modifications_handler.add_delayed_setting (key, tmp_variant);
+ modifications_handler.add_delayed_setting (key.full_name, tmp_variant);
key_editor_child.reload (tmp_variant);
}
}
@@ -231,7 +231,7 @@ class RegistryInfo : Grid, BrowsableView
{
erase_button_handler = erase_button.clicked.connect (() => {
modifications_handler.enter_delay_mode ();
- modifications_handler.add_delayed_setting (key, null);
+ modifications_handler.add_delayed_setting (key.full_name, null);
});
}
diff --git a/editor/registry-search.vala b/editor/registry-search.vala
index 3917458..d1cdd23 100644
--- a/editor/registry-search.vala
+++ b/editor/registry-search.vala
@@ -142,7 +142,7 @@ class RegistrySearch : Grid, BrowsableView
ulong on_delete_call_handler = key_row.on_delete_call.connect (() =>
modifications_handler.set_key_value (key, null));
ulong set_key_value_handler = key_row.set_key_value.connect ((variant) => {
modifications_handler.set_key_value (key, variant); });
- ulong change_dismissed_handler = key_row.change_dismissed.connect (() =>
modifications_handler.dismiss_change (key));
+ ulong change_dismissed_handler = key_row.change_dismissed.connect (() =>
modifications_handler.dismiss_change (key.full_name));
ulong delayed_modifications_changed_handler =
modifications_handler.delayed_changes_changed.connect (() => key_row.set_delayed_icon
());
diff --git a/editor/registry-view.vala b/editor/registry-view.vala
index 68f1810..36a2ad0 100644
--- a/editor/registry-view.vala
+++ b/editor/registry-view.vala
@@ -185,7 +185,7 @@ class RegistryView : Grid, BrowsableView
ulong on_delete_call_handler = key_row.on_delete_call.connect (() =>
modifications_handler.set_key_value (key, null));
ulong set_key_value_handler = key_row.set_key_value.connect ((variant) => {
modifications_handler.set_key_value (key, variant); });
- ulong change_dismissed_handler = key_row.change_dismissed.connect (() =>
modifications_handler.dismiss_change (key));
+ ulong change_dismissed_handler = key_row.change_dismissed.connect (() =>
modifications_handler.dismiss_change (key.full_name));
ulong delayed_modifications_changed_handler =
modifications_handler.delayed_changes_changed.connect (() => key_row.set_delayed_icon
());
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]