static GbDocument * gb_terminal_view_get_document (GbView *view) { g_return_val_if_fail (GB_IS_TERMINAL_VIEW (view), NULL); return GB_DOCUMENT (GB_TERMINAL_VIEW (view)->document); }
void gb_view_stack_focus_location (GbViewStack *self, IdeSourceLocation *location) { IdeBufferManager *buffer_manager; IdeBuffer *buffer; IdeFile *file; GFile *gfile; g_return_if_fail (GB_IS_VIEW_STACK (self)); g_return_if_fail (location != NULL); if (self->context == NULL) return; file = ide_source_location_get_file (location); gfile = ide_file_get_file (file); g_assert (file != NULL); g_assert (IDE_IS_FILE (file)); gfile = ide_file_get_file (file); buffer_manager = ide_context_get_buffer_manager (self->context); buffer = ide_buffer_manager_find_buffer (buffer_manager, gfile); if (buffer != NULL && GB_IS_DOCUMENT (buffer)) { GtkWidget *active_view; gb_view_stack_focus_document (self, GB_DOCUMENT (buffer)); active_view = gb_view_stack_get_active_view (self); g_assert (GB_DOCUMENT (buffer) == gb_view_get_document (GB_VIEW (active_view))); gb_view_navigate_to (GB_VIEW (active_view), location); } else { g_autoptr(GTask) task = NULL; task = g_task_new (self, NULL, NULL, NULL); g_task_set_task_data (task, ide_source_location_ref (location), (GDestroyNotify)ide_source_location_unref); ide_buffer_manager_load_file_async (buffer_manager, file, FALSE, NULL, NULL, gb_view_stack__navigate_to_load_cb, g_object_ref (task)); } }
static GbDocument * gb_editor_view_get_document (GbView *view) { GbEditorView *self = (GbEditorView *)view; g_assert (GB_IS_EDITOR_VIEW (self)); return GB_DOCUMENT (self->document); }
static void gb_view_stack__navigate_to_load_cb (GObject *object, GAsyncResult *result, gpointer user_data) { IdeBufferManager *buffer_manager = (IdeBufferManager *)object; GbViewStack *self; g_autoptr(GTask) task = user_data; IdeSourceLocation *location; g_autoptr(IdeBuffer) buffer = NULL; g_autoptr(GError) error = NULL; GtkWidget *active_view; g_assert (IDE_IS_BUFFER_MANAGER (buffer_manager)); self = g_task_get_source_object (task); location = g_task_get_task_data (task); buffer = ide_buffer_manager_load_file_finish (buffer_manager, result, &error); if (buffer == NULL) { /* todo: message dialog? */ g_warning ("%s", error->message); return; } g_assert (GB_IS_DOCUMENT (buffer)); g_assert (location != NULL); gb_view_stack_focus_document (self, GB_DOCUMENT (buffer)); active_view = gb_view_stack_get_active_view (self); g_assert (GB_DOCUMENT (buffer) == gb_view_get_document (GB_VIEW (active_view))); gb_view_navigate_to (GB_VIEW (active_view), location); g_task_return_boolean (task, TRUE); }