static void gb_project_tree_actions__create_cb (GObject *object, GAsyncResult *result, gpointer user_data) { GFile *file = (GFile *)object; g_autoptr(IdeProjectFile) project_file = NULL; g_autoptr(GbTreeNode) node = user_data; g_autoptr(GError) error = NULL; GbProjectTree *self; GbWorkbench *workbench; IdeContext *context; IdeProject *project; GbTreeNode *created; g_assert (G_IS_FILE (file)); g_assert (GB_IS_TREE_NODE (node)); if (!g_file_create_finish (file, result, &error)) { /* todo: show error messsage */ return; } self = GB_PROJECT_TREE (gb_tree_node_get_tree (node)); if (self == NULL) return; workbench = gb_widget_get_workbench (GTK_WIDGET (self)); if (workbench == NULL) return; context = gb_workbench_get_context (workbench); if (context == NULL) return; project = ide_context_get_project (context); project_file = create_file (context, file, G_FILE_TYPE_REGULAR); ide_project_add_file (project, project_file); gb_workbench_open (workbench, file); gb_tree_node_rebuild (node); gb_tree_node_expand (node, FALSE); created = gb_tree_find_item (GB_TREE (self), G_OBJECT (project_file)); if (created != NULL) gb_tree_node_select (created); }
static gboolean gb_vim_command_edit (GtkSourceView *source_view, const gchar *command, const gchar *options, GError **error) { GbWorkbench *workbench; IdeContext *context; IdeVcs *vcs; GFile *workdir; GFile *file = NULL; if (ide_str_empty0 (options)) { gb_widget_activate_action (GTK_WIDGET (source_view), "workbench", "open", NULL); return TRUE; } if (!(workbench = gb_widget_get_workbench (GTK_WIDGET (source_view))) || !(context = gb_workbench_get_context (workbench)) || !(vcs = ide_context_get_vcs (context)) || !(workdir = ide_vcs_get_working_directory (vcs))) { g_set_error (error, GB_VIM_ERROR, GB_VIM_ERROR_NOT_SOURCE_VIEW, _("Failed to locate working directory")); return FALSE; } if (g_path_is_absolute (options)) file = g_file_new_for_path (options); else file = g_file_get_child (workdir, options); gb_workbench_open (workbench, file); g_clear_object (&file); return TRUE; }
static void find_other_file_cb (GObject *object, GAsyncResult *result, gpointer user_data) { g_autoptr(GbEditorView) self = user_data; g_autoptr(IdeFile) ret = NULL; IdeFile *file = (IdeFile *)object; ret = ide_file_find_other_finish (file, result, NULL); if (ret != NULL) { GbWorkbench *workbench; GFile *gfile; gfile = ide_file_get_file (ret); workbench = gb_widget_get_workbench (GTK_WIDGET (self)); gb_workbench_open (workbench, gfile); } }
static void gb_project_tree_actions_open (GSimpleAction *action, GVariant *variant, gpointer user_data) { GbProjectTree *self = user_data; GbWorkbench *workbench; GbTreeNode *selected; GObject *item; g_assert (GB_IS_PROJECT_TREE (self)); workbench = gb_widget_get_workbench (GTK_WIDGET (self)); g_assert (GB_IS_WORKBENCH (workbench)); if (!(selected = gb_tree_get_selected (GB_TREE (self))) || !(item = gb_tree_node_get_item (selected))) return; item = gb_tree_node_get_item (selected); if (IDE_IS_PROJECT_FILE (item)) { 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; gb_workbench_open (workbench, file); } }