[gnome-builder] libide: allow keeping insert mark over character
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide: allow keeping insert mark over character
- Date: Tue, 24 Mar 2015 00:09:30 +0000 (UTC)
commit a286f4d30b234938961fdf7e1f798d1c5b0962ff
Author: Christian Hergert <christian hergert me>
Date: Mon Mar 9 23:32:41 2015 -0700
libide: allow keeping insert mark over character
data/keybindings/vim.css | 1 +
libide/ide-source-view-mode.c | 14 ++++++++++++++
libide/ide-source-view-mode.h | 9 +++++----
libide/ide-source-view.c | 26 ++++++++++++++++++++++----
4 files changed, 42 insertions(+), 8 deletions(-)
---
diff --git a/data/keybindings/vim.css b/data/keybindings/vim.css
index ed90d1a..5cd0d25 100644
--- a/data/keybindings/vim.css
+++ b/data/keybindings/vim.css
@@ -834,6 +834,7 @@ IdeSourceViewMode.vim-normal {
-IdeSourceViewMode-suppress-unbound: true;
-IdeSourceViewMode-coalesce-undo: true;
-IdeSourceViewMode-block-cursor: true;
+ -IdeSourceViewMode-keep-mark-on-char: true;
gtk-key-bindings: builder-vim-source-view,
builder-vim-source-view-normal;
diff --git a/libide/ide-source-view-mode.c b/libide/ide-source-view-mode.c
index 20e5219..7ee11c9 100644
--- a/libide/ide-source-view-mode.c
+++ b/libide/ide-source-view-mode.c
@@ -90,6 +90,11 @@ ide_source_view_mode_get_block_cursor (IdeSourceViewMode *self)
{
return get_boolean_param (self, "block-cursor");
}
+gboolean
+ide_source_view_mode_get_keep_mark_on_char (IdeSourceViewMode *self)
+{
+ return get_boolean_param (self, "keep-mark-on-char");
+}
static void
ide_source_view_mode_finalize (GObject *object)
@@ -230,6 +235,15 @@ ide_source_view_mode_class_init (IdeSourceViewModeClass *klass)
(G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS)));
+ gtk_widget_class_install_style_property (GTK_WIDGET_CLASS (klass),
+ g_param_spec_boolean ("keep-mark-on-char",
+ _("Keep Mark on Char"),
+ _("Don't allow the cursor to "
+ "move to line end."),
+ FALSE,
+ (G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS)));
+
/* Proxy all action signals from source view */
type = IDE_TYPE_SOURCE_VIEW;
while (type != G_TYPE_INVALID && type != GTK_TYPE_WIDGET)
diff --git a/libide/ide-source-view-mode.h b/libide/ide-source-view-mode.h
index 90797f1..71db49f 100644
--- a/libide/ide-source-view-mode.h
+++ b/libide/ide-source-view-mode.h
@@ -46,10 +46,11 @@ struct _IdeSourceViewModeClass
GtkWidgetClass parent_class;
};
-gboolean ide_source_view_mode_get_block_cursor (IdeSourceViewMode *self);
-gboolean ide_source_view_mode_get_suppress_unbound (IdeSourceViewMode *self);
-gboolean ide_source_view_mode_get_coalesce_undo (IdeSourceViewMode *self);
-const gchar *ide_source_view_mode_get_name (IdeSourceViewMode *self);
+gboolean ide_source_view_mode_get_block_cursor (IdeSourceViewMode *self);
+gboolean ide_source_view_mode_get_suppress_unbound (IdeSourceViewMode *self);
+gboolean ide_source_view_mode_get_coalesce_undo (IdeSourceViewMode *self);
+const gchar *ide_source_view_mode_get_name (IdeSourceViewMode *self);
+gboolean ide_source_view_mode_get_keep_mark_on_char (IdeSourceViewMode *self);
G_END_DECLS
diff --git a/libide/ide-source-view.c b/libide/ide-source-view.c
index 0d3af60..4063033 100644
--- a/libide/ide-source-view.c
+++ b/libide/ide-source-view.c
@@ -913,21 +913,22 @@ ide_source_view__buffer_mark_set_cb (GtkTextBuffer *buffer,
IdeSourceView *self = user_data;
IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
IdeSourceSnippet *snippet;
+ GtkTextMark *insert;
g_assert (IDE_IS_SOURCE_VIEW (self));
g_assert (iter);
g_assert (GTK_IS_TEXT_MARK (mark));
- ide_source_view_block_handlers (self);
+ insert = gtk_text_buffer_get_insert (buffer);
- if (mark == gtk_text_buffer_get_insert (buffer))
+ if (mark == insert)
{
+ ide_source_view_block_handlers (self);
while ((snippet = g_queue_peek_head (priv->snippets)) &&
!ide_source_snippet_insert_set (snippet, mark))
ide_source_view_pop_snippet (self);
+ ide_source_view_unblock_handlers (self);
}
-
- ide_source_view_unblock_handlers (self);
}
static void
@@ -1555,6 +1556,23 @@ ide_source_view_do_mode (IdeSourceView *self,
if (!priv->mode)
ide_source_view_real_set_mode (self, NULL, IDE_SOURCE_VIEW_MODE_TYPE_PERMANENT);
+ if (ide_source_view_mode_get_keep_mark_on_char (priv->mode))
+ {
+ GtkTextBuffer *buffer;
+ GtkTextMark *insert;
+ GtkTextIter iter;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self));
+ insert = gtk_text_buffer_get_insert (buffer);
+ gtk_text_buffer_get_iter_at_mark (buffer, &iter, insert);
+
+ if (gtk_text_iter_ends_line (&iter) && !gtk_text_iter_starts_line (&iter))
+ {
+ gtk_text_iter_backward_char (&iter);
+ gtk_text_buffer_select_range (buffer, &iter, &iter);
+ }
+ }
+
return ret;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]