[gnome-builder] project-tree: allow creating files/folders with "Files" selected



commit c73d3a76c03bb7505294a9ba2adcd9849b55f3e4
Author: Christian Hergert <christian hergert me>
Date:   Sat Apr 11 14:39:19 2015 -0700

    project-tree: allow creating files/folders with "Files" selected

 src/project-tree/gb-project-tree-actions.c |   52 ++++++++++++++++++++++-----
 src/project-tree/gb-project-tree-builder.c |    8 ++++
 2 files changed, 50 insertions(+), 10 deletions(-)
---
diff --git a/src/project-tree/gb-project-tree-actions.c b/src/project-tree/gb-project-tree-actions.c
index 2f2ad2d..21abcfd 100644
--- a/src/project-tree/gb-project-tree-actions.c
+++ b/src/project-tree/gb-project-tree-actions.c
@@ -221,10 +221,23 @@ gb_project_tree_actions_open_containing_folder (GSimpleAction *action,
 
   if (!(selected = gb_tree_get_selected (GB_TREE (self))) ||
       !(item = gb_tree_node_get_item (selected)) ||
-      !IDE_IS_PROJECT_FILE (item) ||
-      !(file = ide_project_file_get_file (IDE_PROJECT_FILE (item))))
+      !(IDE_IS_PROJECT_FILE (item) || IDE_IS_PROJECT_FILES (item)))
     return;
 
+  if (IDE_IS_PROJECT_FILES (item))
+    {
+      IdeContext *context;
+      IdeVcs *vcs;
+
+      context = ide_object_get_context (IDE_OBJECT (item));
+      vcs = ide_context_get_vcs (context);
+      file = ide_vcs_get_working_directory (vcs);
+    }
+  else if (!(file = ide_project_file_get_file (IDE_PROJECT_FILE (item))))
+    {
+      return;
+    }
+
   gb_file_manager_show (file, NULL);
 }
 
@@ -347,7 +360,8 @@ gb_project_tree_actions_new (GbProjectTree *self,
   GObject *item;
   GtkPopover *popover;
   IdeProjectFile *project_file;
-  GFile *file;
+  GFile *file = NULL;
+  gboolean is_dir;
 
   g_assert (GB_IS_PROJECT_TREE (self));
   g_assert ((file_type == G_FILE_TYPE_DIRECTORY) ||
@@ -356,16 +370,34 @@ gb_project_tree_actions_new (GbProjectTree *self,
 again:
   if (!(selected = gb_tree_get_selected (GB_TREE (self))) ||
       !(item = gb_tree_node_get_item (selected)) ||
-      !IDE_IS_PROJECT_FILE (item) ||
-      !(project_file = IDE_PROJECT_FILE (item)) ||
-      !(file = ide_project_file_get_file (project_file)))
+      !(IDE_IS_PROJECT_FILES (item) || IDE_IS_PROJECT_FILE (item)))
     return;
 
+  if (IDE_IS_PROJECT_FILE (item))
+    {
+      if (!(project_file = IDE_PROJECT_FILE (item)) ||
+          !(file = ide_project_file_get_file (project_file)))
+        return;
+      is_dir = project_file_is_directory (item);
+    }
+  else if (IDE_IS_PROJECT_FILES (item))
+    {
+      IdeContext *context;
+      IdeVcs *vcs;
+
+      context = ide_object_get_context (IDE_OBJECT (item));
+      vcs = ide_context_get_vcs (context);
+      file = ide_vcs_get_working_directory (vcs);
+      is_dir = TRUE;
+    }
+
+  g_assert (G_IS_FILE (file));
+
   /*
    * If this item is an IdeProjectFile and not a directory, then we really
    * want to create a sibling.
    */
-  if (!project_file_is_directory (item))
+  if (!is_dir)
     {
       GtkTreePath *path;
 
@@ -487,10 +519,10 @@ gb_project_tree_actions_update (GbProjectTree *self)
     item = gb_tree_node_get_item (selection);
 
   action_set (group, "new-file",
-              "enabled", IDE_IS_PROJECT_FILE (item),
+              "enabled", (IDE_IS_PROJECT_FILE (item) || IDE_IS_PROJECT_FILES (item)),
               NULL);
   action_set (group, "new-directory",
-              "enabled", IDE_IS_PROJECT_FILE (item),
+              "enabled", (IDE_IS_PROJECT_FILE (item) || IDE_IS_PROJECT_FILES (item)),
               NULL);
   action_set (group, "open",
               "enabled", !project_file_is_directory (item),
@@ -499,7 +531,7 @@ gb_project_tree_actions_update (GbProjectTree *self)
               "enabled", !project_file_is_directory (item),
               NULL);
   action_set (group, "open-containing-folder",
-              "enabled", IDE_IS_PROJECT_FILE (item),
+              "enabled", (IDE_IS_PROJECT_FILE (item) || IDE_IS_PROJECT_FILES (item)),
               NULL);
 
   IDE_EXIT;
diff --git a/src/project-tree/gb-project-tree-builder.c b/src/project-tree/gb-project-tree-builder.c
index 5002aa2..338624a 100644
--- a/src/project-tree/gb-project-tree-builder.c
+++ b/src/project-tree/gb-project-tree-builder.c
@@ -306,6 +306,14 @@ gb_project_tree_builder_node_popup (GbTreeBuilder *builder,
       submenu = gtk_application_get_menu_by_id (app, "gb-project-tree-new");
       g_menu_prepend_section (menu, NULL, G_MENU_MODEL (submenu));
     }
+  else if (IDE_IS_PROJECT_FILES (item))
+    {
+      submenu = gtk_application_get_menu_by_id (app, "gb-project-tree-open-containing");
+      g_menu_prepend_section (menu, NULL, G_MENU_MODEL (submenu));
+
+      submenu = gtk_application_get_menu_by_id (app, "gb-project-tree-new");
+      g_menu_prepend_section (menu, NULL, G_MENU_MODEL (submenu));
+    }
 
   submenu = gtk_application_get_menu_by_id (app, "gb-project-tree-display-options");
   g_menu_append_section (menu, NULL, G_MENU_MODEL (submenu));


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