[gnome-builder] tree: add "Open With" -> "Source Code Editor"



commit 7839e5fdf40a0fc3ea7ae45b1c793f347b643c97
Author: Christian Hergert <christian hergert me>
Date:   Wed Apr 8 13:41:04 2015 -0700

    tree: add "Open With" -> "Source Code Editor"

 src/editor/gb-editor-workspace-actions.c |   40 ++++++++++++++++++++++++++++++
 src/workbench/gb-workbench.c             |   18 +++++++++++++
 src/workbench/gb-workbench.h             |    2 +
 3 files changed, 60 insertions(+), 0 deletions(-)
---
diff --git a/src/editor/gb-editor-workspace-actions.c b/src/editor/gb-editor-workspace-actions.c
index ae898d7..e077ade 100644
--- a/src/editor/gb-editor-workspace-actions.c
+++ b/src/editor/gb-editor-workspace-actions.c
@@ -149,6 +149,45 @@ gb_editor_workspace_tree_actions_open (GSimpleAction *action,
 }
 
 static void
+gb_editor_workspace_tree_actions_open_with_editor (GSimpleAction *action,
+                                                   GVariant      *variant,
+                                                   gpointer       user_data)
+{
+  GbEditorWorkspace *self = user_data;
+  GbTreeNode *selected;
+  GObject *item;
+
+  g_assert (GB_IS_EDITOR_WORKSPACE (self));
+
+  if (!(selected = gb_tree_get_selected (self->project_tree)) ||
+      !(item = gb_tree_node_get_item (selected)))
+    return;
+
+  item = gb_tree_node_get_item (selected);
+
+  if (IDE_IS_PROJECT_FILE (item))
+    {
+      GbWorkbench *workbench;
+      GFileInfo *file_info;
+      GFile *file;
+
+      file_info = ide_project_file_get_file_info (IDE_PROJECT_FILE (item));
+      if (!file_info)
+        return;
+
+      if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY)
+        return;
+
+      file = ide_project_file_get_file (IDE_PROJECT_FILE (item));
+      if (!file)
+        return;
+
+      workbench = gb_widget_get_workbench (GTK_WIDGET (self));
+      gb_workbench_open_with_editor (workbench, file);
+    }
+}
+
+static void
 gb_editor_workspace_tree_actions_open_containing_folder (GSimpleAction *action,
                                                          GVariant      *variant,
                                                          gpointer       user_data)
@@ -184,6 +223,7 @@ static const GActionEntry GbEditorWorkspaceActions[] = {
 
 static const GActionEntry GbEditorWorkspaceTreeActions[] = {
   { "open", gb_editor_workspace_tree_actions_open },
+  { "open-with-editor", gb_editor_workspace_tree_actions_open_with_editor },
   { "open-containing-folder", gb_editor_workspace_tree_actions_open_containing_folder },
   { "refresh", gb_editor_workspace_tree_actions_refresh },
   { "collapse-all-nodes", gb_editor_workspace_tree_actions_collapse_all_nodes },
diff --git a/src/workbench/gb-workbench.c b/src/workbench/gb-workbench.c
index e3b58a8..4076fdb 100644
--- a/src/workbench/gb-workbench.c
+++ b/src/workbench/gb-workbench.c
@@ -602,6 +602,24 @@ gb_workbench_open (GbWorkbench *self,
                            g_object_ref (self));
 }
 
+void
+gb_workbench_open_with_editor (GbWorkbench *self,
+                               GFile       *file)
+{
+  IdeBufferManager *buffer_manager;
+  IdeProject *project;
+  g_autoptr(IdeFile) idefile = NULL;
+
+  g_return_if_fail (GB_IS_WORKBENCH (self));
+  g_return_if_fail (self->unloading == FALSE);
+  g_return_if_fail (self->context);
+
+  buffer_manager = ide_context_get_buffer_manager (self->context);
+  project = ide_context_get_project (self->context);
+  idefile = ide_project_get_project_file (project, file);
+  ide_buffer_manager_load_file_async (buffer_manager, idefile, FALSE, NULL, NULL, NULL, NULL);
+}
+
 /**
  * gb_workbench_get_command_manager:
  * @self: A #GbWorkbench.
diff --git a/src/workbench/gb-workbench.h b/src/workbench/gb-workbench.h
index dc72648..ddc86e9 100644
--- a/src/workbench/gb-workbench.h
+++ b/src/workbench/gb-workbench.h
@@ -46,6 +46,8 @@ void              gb_workbench_set_active_workspace (GbWorkbench         *self,
 void              gb_workbench_add_temporary_buffer (GbWorkbench         *self);
 void              gb_workbench_open                 (GbWorkbench         *self,
                                                      GFile               *file);
+void              gb_workbench_open_with_editor     (GbWorkbench         *self,
+                                                     GFile               *file);
 void              gb_workbench_open_uri_list        (GbWorkbench         *self,
                                                      const gchar * const *uri_list);
 GbCommandManager *gb_workbench_get_command_manager  (GbWorkbench         *self);


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