[gnome-builder/gnome-builder-3-24] sourceview: add reformat-selection G_SIGNAL_ACTION
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/gnome-builder-3-24] sourceview: add reformat-selection G_SIGNAL_ACTION
- Date: Tue, 4 Apr 2017 22:12:14 +0000 (UTC)
commit 46153573077b46f53ac9148996e28ec4e1642b2e
Author: Christian Hergert <chergert redhat com>
Date: Thu Mar 30 18:52:48 2017 -0600
sourceview: add reformat-selection G_SIGNAL_ACTION
This allows keybindings to reformat a selection or the entire document
using the IdeBuffer APIs to reformat a text range.
libide/sourceview/ide-source-view.c | 58 ++++++++++++++++++++++++++++++++++-
1 files changed, 57 insertions(+), 1 deletions(-)
---
diff --git a/libide/sourceview/ide-source-view.c b/libide/sourceview/ide-source-view.c
index 218b7b7..481218d 100644
--- a/libide/sourceview/ide-source-view.c
+++ b/libide/sourceview/ide-source-view.c
@@ -263,13 +263,14 @@ enum {
CLEAR_SEARCH,
CLEAR_SELECTION,
CLEAR_SNIPPETS,
- DUPLICATE_ENTIRE_LINE,
CYCLE_COMPLETION,
DECREASE_FONT_SIZE,
DELETE_SELECTION,
+ DUPLICATE_ENTIRE_LINE,
END_MACRO,
END_USER_ACTION,
FOCUS_LOCATION,
+ FORMAT_SELECTION,
GOTO_DEFINITION,
HIDE_COMPLETION,
INCREASE_FONT_SIZE,
@@ -5913,6 +5914,54 @@ ide_source_view_get_spell_checking (IdeSourceView *self)
}
static void
+ide_source_view_format_selection_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ IdeBuffer *buffer = (IdeBuffer *)object;
+ g_autoptr(IdeSourceView) self = user_data;
+ g_autoptr(GError) error = NULL;
+
+ IDE_ENTRY;
+
+ g_assert (IDE_IS_SOURCE_VIEW (self));
+ g_assert (G_IS_ASYNC_RESULT (result));
+
+ if (!ide_buffer_format_selection_finish (buffer, result, &error))
+ g_warning ("%s", error->message);
+
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (self), TRUE);
+
+ IDE_EXIT;
+}
+
+static void
+ide_source_view_real_format_selection (IdeSourceView *self)
+{
+ IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
+ g_autoptr(IdeFormatterOptions) options = NULL;
+
+ IDE_ENTRY;
+
+ g_assert (IDE_IS_SOURCE_VIEW (self));
+
+ options = ide_formatter_options_new ();
+ ide_formatter_options_set_tab_width (options,
+ gtk_source_view_get_tab_width (GTK_SOURCE_VIEW (self)));
+ ide_formatter_options_set_insert_spaces (options,
+ gtk_source_view_get_insert_spaces_instead_of_tabs (GTK_SOURCE_VIEW (self)));
+
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (self), FALSE);
+ ide_buffer_format_selection_async (priv->buffer,
+ options,
+ NULL,
+ ide_source_view_format_selection_cb,
+ g_object_ref (self));
+
+ IDE_EXIT;
+}
+
+static void
ide_source_view_dispose (GObject *object)
{
IdeSourceView *self = (IdeSourceView *)object;
@@ -6673,6 +6722,13 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
1,
IDE_TYPE_SOURCE_LOCATION);
+ signals [FORMAT_SELECTION] =
+ g_signal_new_class_handler ("format-selection",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_CALLBACK (ide_source_view_real_format_selection),
+ NULL, NULL, NULL, G_TYPE_NONE, 0);
+
signals [GOTO_DEFINITION] =
g_signal_new ("goto-definition",
G_TYPE_FROM_CLASS (klass),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]