[gnome-builder] project-tree: collapse node if we expanded it and user cancelled



commit 3b75608665aa42279ab7af3c861218387d3dbc43
Author: Christian Hergert <christian hergert me>
Date:   Fri Apr 10 18:50:49 2015 -0700

    project-tree: collapse node if we expanded it and user cancelled
    
    If the user cancelled the operation, and we expanded the row (for
    visibility purposes), we should be nice and collapse it back down.
    
    If the user created something, we will not collapse it (however we should
    select it once we have the item showing up in the project tree).

 src/project-tree/gb-project-tree-actions.c |   26 +++++++++++++++++++++++++-
 src/project-tree/gb-project-tree-private.h |    2 ++
 2 files changed, 27 insertions(+), 1 deletions(-)
---
diff --git a/src/project-tree/gb-project-tree-actions.c b/src/project-tree/gb-project-tree-actions.c
index cecf000..86fec84 100644
--- a/src/project-tree/gb-project-tree-actions.c
+++ b/src/project-tree/gb-project-tree-actions.c
@@ -303,10 +303,27 @@ gb_project_tree_actions__popover_create_file_cb (GbProjectTree    *self,
       g_assert_not_reached ();
     }
 
+  self->expanded_in_new = FALSE;
+
   gtk_widget_destroy (GTK_WIDGET (popover));
 }
 
 static void
+gb_project_tree_actions__popover_closed_cb (GbProjectTree *self,
+                                            GtkPopover    *popover)
+{
+  GbTreeNode *selected;
+
+  g_assert (GB_IS_PROJECT_TREE (self));
+  g_assert (GTK_IS_POPOVER (popover));
+
+  if (!(selected = gb_tree_get_selected (GB_TREE (self))) || !self->expanded_in_new)
+    return;
+
+  gb_tree_node_collapse (selected);
+}
+
+static void
 gb_project_tree_actions_new (GbProjectTree *self,
                              GFileType      file_type)
 {
@@ -329,7 +346,9 @@ gb_project_tree_actions_new (GbProjectTree *self,
       !(file = ide_project_file_get_file (project_file)))
     return;
 
-  gb_tree_node_expand (selected, FALSE);
+  if ((self->expanded_in_new = !gb_tree_node_get_expanded (selected)))
+    gb_tree_node_expand (selected, FALSE);
+
   gb_tree_node_get_area (selected, &rect);
 
   popover = g_object_new (GB_TYPE_NEW_FILE_POPOVER, NULL);
@@ -343,6 +362,11 @@ gb_project_tree_actions_new (GbProjectTree *self,
                            G_CALLBACK (gb_project_tree_actions__popover_create_file_cb),
                            self,
                            G_CONNECT_SWAPPED);
+  g_signal_connect_object (popover,
+                           "closed",
+                           G_CALLBACK (gb_project_tree_actions__popover_closed_cb),
+                           self,
+                           G_CONNECT_SWAPPED);
   gtk_widget_show (GTK_WIDGET (popover));
 }
 
diff --git a/src/project-tree/gb-project-tree-private.h b/src/project-tree/gb-project-tree-private.h
index 0ee4cc7..165b30d 100644
--- a/src/project-tree/gb-project-tree-private.h
+++ b/src/project-tree/gb-project-tree-private.h
@@ -28,6 +28,8 @@ struct _GbProjectTree
   GbTree     parent_instance;
 
   GSettings *settings;
+
+  guint      expanded_in_new : 1;
 };
 
 G_END_DECLS


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