[gnome-builder] tree: protect against spurious emission of changed::sort-directories-first



commit c91890a20d22e7a3a326ec27e5ea4b94124c6256
Author: Christian Hergert <christian hergert me>
Date:   Fri Apr 10 18:10:34 2015 -0700

    tree: protect against spurious emission of changed::sort-directories-first
    
    Turns out that GtkFileChooserDialog, upon cancel, can cause this value
    to flap. Most unexpected!

 src/project-tree/gb-project-tree-builder.c |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/src/project-tree/gb-project-tree-builder.c b/src/project-tree/gb-project-tree-builder.c
index 876d35d..5002aa2 100644
--- a/src/project-tree/gb-project-tree-builder.c
+++ b/src/project-tree/gb-project-tree-builder.c
@@ -27,7 +27,10 @@
 struct _GbProjectTreeBuilder
 {
   GbTreeBuilder  parent_instance;
+
   GSettings     *file_chooser_settings;
+
+  guint          sort_directories_first : 1;
 };
 
 G_DEFINE_TYPE (GbProjectTreeBuilder, gb_project_tree_builder, GB_TYPE_TREE_BUILDER)
@@ -357,12 +360,19 @@ gb_project_tree_builder_rebuild (GSettings            *settings,
                                  GbProjectTreeBuilder *self)
 {
   GtkWidget *tree;
+  gboolean sort_directories_first;
 
   g_assert (G_IS_SETTINGS (settings));
   g_assert (GB_IS_PROJECT_TREE_BUILDER (self));
 
-  if ((tree = gb_tree_builder_get_tree (GB_TREE_BUILDER (self))))
-    gb_tree_rebuild (GB_TREE (tree));
+  sort_directories_first = g_settings_get_boolean (settings, "sort-directories-first");
+
+  if (sort_directories_first != self->sort_directories_first)
+    {
+      self->sort_directories_first = sort_directories_first;
+      if ((tree = gb_tree_builder_get_tree (GB_TREE_BUILDER (self))))
+        gb_tree_rebuild (GB_TREE (tree));
+    }
 }
 
 static void
@@ -392,6 +402,8 @@ static void
 gb_project_tree_builder_init (GbProjectTreeBuilder *self)
 {
   self->file_chooser_settings = g_settings_new ("org.gtk.Settings.FileChooser");
+  self->sort_directories_first = g_settings_get_boolean (self->file_chooser_settings,
+                                                         "sort-directories-first");
 
   g_signal_connect (self->file_chooser_settings,
                     "changed::sort-directories-first",


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