[dconf-editor] Do not rely on ordering when check_reload folder



commit 62166875db0f896621b28ef12865b54ab82ee5c4
Author: Davi da Silva Böger <dsboger gmail com>
Date:   Tue Dec 19 14:26:46 2017 -0200

    Do not rely on ordering when check_reload folder
    
    It bugs when changing sorting options multiple times before refreshing.
    See https://bugzilla.gnome.org/show_bug.cgi?id=791775.

 editor/browser-view.vala  |    8 ++------
 editor/registry-view.vala |   21 ++++++++++++++++-----
 2 files changed, 18 insertions(+), 11 deletions(-)
---
diff --git a/editor/browser-view.vala b/editor/browser-view.vala
index 573029f..f337a33 100644
--- a/editor/browser-view.vala
+++ b/editor/browser-view.vala
@@ -330,12 +330,8 @@ class BrowserView : Grid, PathElement
         {
             Directory? fresh_dir = (Directory?) model.get_directory (current_path);
             GLib.ListStore? fresh_key_model = model.get_children (fresh_dir);
-            if (fresh_key_model != null)
-            {
-                sorting_options.sort_key_model ((!) fresh_key_model); // RegistryView.check_reload assumes 
the same order as the current view for faster comparison
-                if (!browse_view.check_reload ((!) fresh_dir, (!) fresh_key_model))
-                    return;
-            }
+            if (fresh_key_model != null && !browse_view.check_reload ((!) fresh_dir, (!) fresh_key_model))
+                return;
         } // search_results_view always reloads
 
         if (internal_changes)
diff --git a/editor/registry-view.vala b/editor/registry-view.vala
index 72abaaf..d5808af 100644
--- a/editor/registry-view.vala
+++ b/editor/registry-view.vala
@@ -87,13 +87,24 @@ class RegistryView : Grid, PathElement, BrowsableView
         for (uint i = 0; i < ((!) key_model).get_n_items (); i++)
         {
             SettingObject setting_object = (SettingObject) ((!) key_model).get_item (i);
-            SettingObject fresh_setting_object = (SettingObject) fresh_key_model.get_item (i);
-            if (setting_object.get_type () != fresh_setting_object.get_type ())
-                return true;
-            if (setting_object.name != fresh_setting_object.name)
+            bool found = false;
+            for (uint j = 0; j < ((!) fresh_key_model).get_n_items (); j++)
+            {
+                SettingObject fresh_setting_object = (SettingObject) fresh_key_model.get_item (j);
+                if (setting_object.get_type () != fresh_setting_object.get_type ())
+                    continue;
+                if (setting_object.name != fresh_setting_object.name)
+                    continue;
+                // TODO compare other visible info (i.e. key summary and value)
+                found = true;
+                fresh_key_model.remove (j);
+                break;
+            }
+            if (!found)
                 return true;
-            // TODO compare other visible info (i.e. key summary and value)
         }
+        if (((!) fresh_key_model).get_n_items () > 0)
+            return true;
         return false;
     }
 


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