[gnome-builder] project-tree: collapse node if we expanded it and user cancelled
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] project-tree: collapse node if we expanded it and user cancelled
- Date: Sat, 11 Apr 2015 01:51:03 +0000 (UTC)
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]