[dconf-editor] Make get_children() ask for a path.



commit d4161fe106a66976fce53a6809a67fc23f6016e6
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Fri Jan 19 01:49:59 2018 +0100

    Make get_children() ask for a path.

 editor/browser-view.vala           |    5 +-
 editor/dconf-model.vala            |   93 +++++++++--------------------------
 editor/dconf-window.vala           |   41 ++++++----------
 editor/modifications-revealer.vala |    5 +-
 editor/registry-search.vala        |    5 +-
 editor/registry-view.vala          |    2 +-
 6 files changed, 47 insertions(+), 104 deletions(-)
---
diff --git a/editor/browser-view.vala b/editor/browser-view.vala
index 3c82546..1facfca 100644
--- a/editor/browser-view.vala
+++ b/editor/browser-view.vala
@@ -268,9 +268,8 @@ class BrowserView : Grid
 
         if (current_view_is_browse_view ())
         {
-            Directory? fresh_dir = (Directory?) model.get_directory (path);
-            GLib.ListStore? fresh_key_model = model.get_children (fresh_dir);
-            if (fresh_key_model != null && !browse_view.check_reload ((!) fresh_dir, (!) fresh_key_model))
+            GLib.ListStore? fresh_key_model = model.get_children (path);
+            if (fresh_key_model != null && !browse_view.check_reload ((!) fresh_key_model))
                 return false;
         }
         else if (current_view_is_properties_view ())
diff --git a/editor/dconf-model.vala b/editor/dconf-model.vala
index 4c6cfe3..53f60ba 100644
--- a/editor/dconf-model.vala
+++ b/editor/dconf-model.vala
@@ -84,54 +84,6 @@ public class SettingsModel : Object
     }
 
     /*\
-    * * Content lookup
-    \*/
-
-    private enum LookupResultType
-    {
-        KEY,
-        FOLDER,
-        NOT_FOUND
-    }
-
-    private LookupResultType lookup (string path, out GLib.ListStore? key_model, out bool multiple_schemas)
-    {
-        key_model = null;
-        if (is_key_path (path))
-        {
-            string name = get_name (path);
-            string parent_path = get_parent_path (path);
-            GLib.ListStore? parent_key_model = null;
-            switch (lookup (parent_path, out parent_key_model, out multiple_schemas))
-            {
-            case LookupResultType.FOLDER:
-                Key? key = get_key_from_path_and_name ((!) parent_key_model, name);
-                if (key != null)
-                {
-                    key_model = new ListStore (typeof (SettingObject));
-                    ((!) key_model).append ((!) key);
-                    return LookupResultType.KEY;
-                }
-                return LookupResultType.NOT_FOUND;
-            default:
-                return LookupResultType.NOT_FOUND;
-            }
-        }
-        else
-        {
-            GLib.ListStore _key_model = new GLib.ListStore (typeof (SettingObject));
-            lookup_gsettings (path, _key_model, out multiple_schemas);
-            create_dconf_keys (path, _key_model);
-            if (_key_model.get_n_items () > 0)
-            {
-                key_model = _key_model;
-                return LookupResultType.FOLDER;
-            }
-            return LookupResultType.NOT_FOUND;
-        }
-    }
-
-    /*\
     * * GSettings content creation
     \*/
 
@@ -200,19 +152,22 @@ public class SettingsModel : Object
         return dir;
     }
 
-    public GLib.ListStore? get_children (Directory? parent)
+    public GLib.ListStore? get_children (string folder_path)
     {
-        if (parent == null)
+        Directory? dir = get_directory (folder_path);
+        if (dir == null)
             return null;
-        GLib.ListStore? key_model = null;
+
+        GLib.ListStore key_model = new GLib.ListStore (typeof (SettingObject));
         bool multiple_schemas;
-        switch (lookup (((!) parent).full_name, out key_model, out multiple_schemas))
-        {
-        case LookupResultType.FOLDER:
+
+        lookup_gsettings (folder_path, key_model, out multiple_schemas);
+        create_dconf_keys (folder_path, key_model);
+
+        if (key_model.get_n_items () > 0)
             return key_model;
-        default:
+        else
             return null;
-        }
     }
 
     /*\
@@ -298,23 +253,23 @@ public class SettingsModel : Object
     public SettingObject? get_object (string path, bool strict = true)
     {
         if (!is_key_path (path))
-            return get_directory (path);
-        else if (strict)
-            return get_key (path);
-        else
-        {
-            GLib.ListStore? key_model = get_children (get_directory (get_parent_path (path)));
-            string name = get_name (path);
-            SettingObject? key = get_key_from_path_and_name (key_model, name);
-            if (key != null || strict)
-                return key;
-            return get_folder_from_path_and_name (key_model, name);
-        }
+            return (SettingObject?) get_directory (path);
+
+        if (strict)
+            return (SettingObject?) get_key (path);
+
+        GLib.ListStore? key_model = get_children (get_parent_path (path));
+        string name = get_name (path);
+        SettingObject? key = get_key_from_path_and_name (key_model, name);
+        if (key != null)
+            return key;
+
+        return get_folder_from_path_and_name (key_model, name);
     }
 
     public Key? get_key (string path)
     {
-        GLib.ListStore? key_model = get_children (get_directory (get_parent_path (path)));
+        GLib.ListStore? key_model = get_children (get_parent_path (path));
         return get_key_from_path_and_name (key_model, get_name (path));
     }
 
diff --git a/editor/dconf-window.vala b/editor/dconf-window.vala
index 4519d0d..dc05e8b 100644
--- a/editor/dconf-window.vala
+++ b/editor/dconf-window.vala
@@ -426,7 +426,7 @@ class DConfWindow : ApplicationWindow
     private void reset_path (string path, bool recursively)
     {
         enter_delay_mode ();
-        revealer.reset_objects (model.get_children (model.get_directory (path)), recursively);
+        revealer.reset_objects (model.get_children (path), recursively);
     }
 
     private void enter_delay_mode (/* SimpleAction action, Variant? path_variant */)
@@ -465,10 +465,19 @@ class DConfWindow : ApplicationWindow
         if (not_found)
             cannot_find_folder (full_name); // do not place after, full_name is in some cases changed by 
set_directory()...
 
-        if (selected_or_empty == "")
-            set_directory ((!) found_object, pathbar.get_selected_child (fallback_path));
-        else
-            set_directory ((!) found_object, selected_or_empty);
+        GLib.ListStore? key_model = model.get_children (((!) found_object).full_name);
+        if (key_model != null)
+        {
+            browser_view.prepare_browse_view ((!) key_model,
+                                              current_path.has_prefix (((!) found_object).full_name),
+                                              ((!) found_object).warning_multiple_schemas);
+            update_current_path (((!) found_object).full_name);
+
+            if (selected_or_empty == "")
+                browser_view.select_row (pathbar.get_selected_child (fallback_path));
+            else
+                browser_view.select_row (selected_or_empty);
+        }
 
         search_bar.search_mode_enabled = false; // do last to avoid flickering RegistryView before 
PropertiesView when selecting a search result
     }
@@ -497,30 +506,10 @@ class DConfWindow : ApplicationWindow
         search_bar.search_mode_enabled = false; // do last to avoid flickering RegistryView before 
PropertiesView when selecting a search result
     }
 
-    private void set_directory (Directory directory, string selected_or_empty)
-    {
-        GLib.ListStore? key_model = model.get_children (directory);
-        if (key_model == null)
-            return;
-        browser_view.prepare_browse_view ((!) key_model, current_path.has_prefix (directory.full_name), 
directory.warning_multiple_schemas);
-        update_current_path (directory.full_name);
-
-        browser_view.select_row (selected_or_empty);
-    }
-
     private void reload_view ()
     {
         if (browser_view.current_view_is_browse_view ())
-        {
-            Directory? directory = model.get_directory (current_path);
-            if (directory == null)
-                request_folder_path (current_path); // rely on fallback detection
-            else
-            {
-                string saved_selection = browser_view.get_selected_row_name ();
-                set_directory ((!) directory, saved_selection);
-            }
-        }
+            request_folder_path (current_path, browser_view.get_selected_row_name ());
         else if (browser_view.current_view_is_properties_view ())
             request_object_path (current_path, false);
         else if (browser_view.current_view_is_search_results_view ())
diff --git a/editor/modifications-revealer.vala b/editor/modifications-revealer.vala
index 7ae5824..de88cd4 100644
--- a/editor/modifications-revealer.vala
+++ b/editor/modifications-revealer.vala
@@ -83,8 +83,9 @@ class ModificationsRevealer : Revealer
             SettingObject setting_object = (SettingObject) ((!) object);
             if (setting_object is Directory)
             {
-                if (recursively) {
-                    GLib.ListStore? children = model.get_children ((Directory) setting_object);
+                if (recursively)
+                {
+                    GLib.ListStore? children = model.get_children (setting_object.full_name);
                     if (children != null)
                         _reset_objects ((!) children, true);
                 }
diff --git a/editor/registry-search.vala b/editor/registry-search.vala
index dc93b7f..d9b391b 100644
--- a/editor/registry-search.vala
+++ b/editor/registry-search.vala
@@ -464,8 +464,7 @@ class RegistrySearch : Grid, BrowsableView
 
         if (!SettingsModel.is_key_path (current_path))
         {
-            Directory? local = model.get_directory (current_path);
-            GLib.ListStore? key_model = model.get_children (local);
+            GLib.ListStore? key_model = model.get_children (current_path);
             for (uint i = 0; i < ((!) key_model).get_n_items (); i++)
             {
                 SettingObject item = (SettingObject) ((!) key_model).get_item (i);
@@ -549,7 +548,7 @@ class RegistrySearch : Grid, BrowsableView
             Directory next = (!) search_nodes.pop_head ();
             bool local_again = next.full_name == current_path;
 
-            GLib.ListStore? next_key_model = model.get_children (next);
+            GLib.ListStore? next_key_model = model.get_children (next.full_name);
             if (next_key_model == null)
                 return true;
 
diff --git a/editor/registry-view.vala b/editor/registry-view.vala
index a68a803..611e675 100644
--- a/editor/registry-view.vala
+++ b/editor/registry-view.vala
@@ -62,7 +62,7 @@ class RegistryView : Grid, BrowsableView
         key_list_box.bind_model (key_model, new_list_box_row);
     }
 
-    public bool check_reload (Directory fresh_dir, GLib.ListStore fresh_key_model)
+    public bool check_reload (GLib.ListStore fresh_key_model)
     {
         if (key_model == null) // should not happen?
             return true;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]