static gboolean looks_like_makefile (IdeBuffer *buffer) { GtkSourceLanguage *language; const gchar *path; IdeFile *file; g_assert (IDE_IS_BUFFER (buffer)); file = ide_buffer_get_file (buffer); path = ide_file_get_path (file); if (path != NULL) { if (g_str_has_suffix (path, "Makefile.am") || g_str_has_suffix (path, ".mk")) return TRUE; } language = gtk_source_buffer_get_language (GTK_SOURCE_BUFFER (buffer)); if (language != NULL) { const gchar *lang_id; lang_id = gtk_source_language_get_id (language); if (ide_str_equal0 (lang_id, "automake") || ide_str_equal0 (lang_id, "makefile")) return TRUE; } return FALSE; }
static void gb_editor_view_actions_reload_buffer (GSimpleAction *action, GVariant *param, gpointer user_data) { GbEditorView *self = user_data; IdeContext *context; IdeBufferManager *buffer_manager; IdeFile *file; g_autoptr(IdeProgress) progress = NULL; g_assert (GB_IS_EDITOR_VIEW (self)); context = ide_buffer_get_context (IDE_BUFFER (self->document)); file = ide_buffer_get_file (IDE_BUFFER (self->document)); buffer_manager = ide_context_get_buffer_manager (context); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (self->progress_bar), 0.0); gtk_widget_show (GTK_WIDGET (self->progress_bar)); ide_buffer_manager_load_file_async (buffer_manager, file, TRUE, &progress, NULL, gb_editor_view_actions_reload_buffer_cb, g_object_ref (self)); g_object_bind_property (progress, "fraction", self->progress_bar, "fraction", G_BINDING_SYNC_CREATE); }
static void ide_editor_perspective_find_source_location (GtkWidget *widget, gpointer user_data) { struct { IdeFile *file; IdeEditorView *view; } *lookup = user_data; IdeBuffer *buffer; IdeFile *file; g_return_if_fail (IDE_IS_LAYOUT_VIEW (widget)); if (lookup->view != NULL) return; if (!IDE_IS_EDITOR_VIEW (widget)) return; buffer = ide_editor_view_get_buffer (IDE_EDITOR_VIEW (widget)); file = ide_buffer_get_file (buffer); if (ide_file_equal (file, lookup->file)) lookup->view = IDE_EDITOR_VIEW (widget); }
static void ide_editor_view_actions_find_other_file (GSimpleAction *action, GVariant *param, gpointer user_data) { IdeEditorView *self = user_data; IdeFile *file; g_assert (IDE_IS_EDITOR_VIEW (self)); file = ide_buffer_get_file (IDE_BUFFER (self->document)); ide_file_find_other_async (file, NULL, find_other_file_cb, g_object_ref (self)); }
static void ide_editor_view_actions_save_as (GSimpleAction *action, GVariant *param, gpointer user_data) { IdeEditorView *self = user_data; IdeBuffer *buffer; GtkWidget *suggested; GtkWidget *toplevel; GtkWidget *dialog; IdeFile *file; GFile *gfile; g_assert (IDE_IS_EDITOR_VIEW (self)); toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self)); dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "do-overwrite-confirmation", TRUE, "local-only", FALSE, "modal", TRUE, "select-multiple", FALSE, "show-hidden", FALSE, "transient-for", toplevel, "title", _("Save Document As"), NULL); buffer = IDE_BUFFER (self->document); file = ide_buffer_get_file (buffer); gfile = ide_file_get_file (file); if (gfile != NULL) gtk_file_chooser_set_file (GTK_FILE_CHOOSER (dialog), gfile, NULL); gtk_dialog_add_buttons (GTK_DIALOG (dialog), _("Cancel"), GTK_RESPONSE_CANCEL, _("Save"), GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); suggested = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); gtk_style_context_add_class (gtk_widget_get_style_context (suggested), GTK_STYLE_CLASS_SUGGESTED_ACTION); g_signal_connect (dialog, "response", G_CALLBACK (save_as_response), g_object_ref (self)); gtk_window_present (GTK_WINDOW (dialog)); }
static void ide_git_buffer_change_monitor_calculate_async (IdeGitBufferChangeMonitor *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(GTask) task = NULL; DiffTask *diff; IdeFile *file; GFile *gfile; g_assert (IDE_IS_GIT_BUFFER_CHANGE_MONITOR (self)); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); g_assert (self->buffer != NULL); g_assert (self->repository != NULL); self->state_dirty = FALSE; task = g_task_new (self, cancellable, callback, user_data); file = ide_buffer_get_file (self->buffer); gfile = ide_file_get_file (file); if (!gfile) { g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("Cannot provide diff, no backing file provided.")); return; } diff = g_slice_new0 (DiffTask); diff->file = g_object_ref (gfile); diff->repository = g_object_ref (self->repository); diff->state = g_hash_table_new (g_direct_hash, g_direct_equal); diff->content = ide_buffer_get_content (self->buffer); diff->blob = self->cached_blob ? g_object_ref (self->cached_blob) : NULL; g_task_set_task_data (task, diff, diff_task_free); self->in_calculation = TRUE; g_async_queue_push (gWorkQueue, g_object_ref (task)); }
static void gb_editor_view_actions_reveal (GSimpleAction *action, GVariant *param, gpointer user_data) { GbEditorView *self = user_data; GbWorkbench *workbench; IdeFile *file; GFile *gfile; g_assert (G_IS_SIMPLE_ACTION (action)); g_assert (GB_IS_EDITOR_VIEW (self)); file = ide_buffer_get_file (IDE_BUFFER (self->document)); gfile = ide_file_get_file (file); workbench = gb_widget_get_workbench (GTK_WIDGET (self)); gb_workbench_reveal_file (workbench, gfile); }
static void ide_lsp_formatter_apply_changes (IdeLspFormatter *self, IdeBuffer *buffer, GVariant *text_edits) { g_autoptr(GPtrArray) edits = NULL; g_autoptr(IdeContext) context = NULL; IdeBufferManager *buffer_manager; GVariant *text_edit; GFile *file; GVariantIter iter; IDE_ENTRY; g_assert (IDE_IS_LSP_FORMATTER (self)); g_assert (text_edits != NULL); if (!g_variant_is_container (text_edits)) { g_warning ("variant is not a container, ignoring"); IDE_EXIT; } file = ide_buffer_get_file (buffer); edits = g_ptr_array_new_with_free_func (g_object_unref); g_variant_iter_init (&iter, text_edits); while (g_variant_iter_loop (&iter, "v", &text_edit)) { g_autoptr(IdeLocation) begin_location = NULL; g_autoptr(IdeLocation) end_location = NULL; g_autoptr(IdeRange) range = NULL; const gchar *new_text = NULL; gboolean success; struct { gint64 line; gint64 column; } begin, end; success = JSONRPC_MESSAGE_PARSE (text_edit, "range", "{", "start", "{", "line", JSONRPC_MESSAGE_GET_INT64 (&begin.line), "character", JSONRPC_MESSAGE_GET_INT64 (&begin.column), "}", "end", "{", "line", JSONRPC_MESSAGE_GET_INT64 (&end.line), "character", JSONRPC_MESSAGE_GET_INT64 (&end.column), "}", "}", "newText", JSONRPC_MESSAGE_GET_STRING (&new_text) ); if (!success) { IDE_TRACE_MSG ("Failed to extract change from variant"); continue; } begin_location = ide_location_new (file, begin.line, begin.column); end_location = ide_location_new (file, end.line, end.column); range = ide_range_new (begin_location, end_location); g_ptr_array_add (edits, ide_text_edit_new (range, new_text)); } context = ide_buffer_ref_context (buffer); buffer_manager = ide_buffer_manager_from_context (context); ide_buffer_manager_apply_edits_async (buffer_manager, IDE_PTR_ARRAY_STEAL_FULL (&edits), NULL, NULL, NULL); IDE_EXIT; }
static void ide_editor_view_actions_save (GSimpleAction *action, GVariant *param, gpointer user_data) { IdeEditorView *self = user_data; IdeContext *context; IdeBufferManager *buffer_manager; IdeFile *file; IdeProgress *progress = NULL; IdeVcs *vcs; GFile *workdir; g_assert (IDE_IS_EDITOR_VIEW (self)); file = ide_buffer_get_file (IDE_BUFFER (self->document)); context = ide_buffer_get_context (IDE_BUFFER (self->document)); buffer_manager = ide_context_get_buffer_manager (context); vcs = ide_context_get_vcs (context); workdir = ide_vcs_get_working_directory (vcs); if (ide_file_get_is_temporary (file)) { GtkDialog *dialog; GtkWidget *toplevel; GtkWidget *suggested; toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self)); dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SAVE, "do-overwrite-confirmation", TRUE, "local-only", FALSE, "modal", TRUE, "select-multiple", FALSE, "show-hidden", FALSE, "transient-for", toplevel, "title", _("Save Document"), NULL); gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog), workdir, NULL); gtk_dialog_add_buttons (GTK_DIALOG (dialog), _("Cancel"), GTK_RESPONSE_CANCEL, _("Save"), GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); suggested = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); gtk_style_context_add_class (gtk_widget_get_style_context (suggested), GTK_STYLE_CLASS_SUGGESTED_ACTION); g_signal_connect (dialog, "response", G_CALLBACK (save_temp_response), g_object_ref (self)); gtk_window_present (GTK_WINDOW (dialog)); return; } ide_buffer_manager_save_file_async (buffer_manager, IDE_BUFFER (self->document), file, &progress, NULL, save_file_cb, g_object_ref (self)); g_object_bind_property (progress, "fraction", self->progress_bar, "fraction", G_BINDING_SYNC_CREATE); gtk_widget_show (GTK_WIDGET (self->progress_bar)); g_clear_object (&progress); }