[gnome-builder] sourceview: disable some features with multiple-cursors



commit 1a6c2ddbcf71e174ca7ac2c1b69d093481e937e3
Author: Christian Hergert <chergert redhat com>
Date:   Mon May 27 12:16:53 2019 -0700

    sourceview: disable some features with multiple-cursors
    
    If we have multiple cursors present, we need to disable some features so
    that we are in a consistent state to handle input.
    
    Fixes #926

 src/libide/sourceview/ide-completion.c          |  3 +++
 src/libide/sourceview/ide-source-view-private.h |  1 +
 src/libide/sourceview/ide-source-view.c         | 17 ++++++++++++++++-
 3 files changed, 20 insertions(+), 1 deletion(-)
---
diff --git a/src/libide/sourceview/ide-completion.c b/src/libide/sourceview/ide-completion.c
index 5b9e5dce0..bba99a056 100644
--- a/src/libide/sourceview/ide-completion.c
+++ b/src/libide/sourceview/ide-completion.c
@@ -42,6 +42,8 @@
 #include "ide-completion-proposal.h"
 #include "ide-completion-provider.h"
 
+#include "ide-source-view-private.h"
+
 #define DEFAULT_N_ROWS 5
 
 struct _IdeCompletion
@@ -187,6 +189,7 @@ ide_completion_is_blocked (IdeCompletion *self)
          !(buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->view))) ||
          gtk_text_buffer_get_has_selection (buffer) ||
          !GTK_SOURCE_IS_VIEW (self->view) ||
+         _ide_source_view_has_cursors (IDE_SOURCE_VIEW (self->view)) ||
          !ide_source_view_is_processing_key (IDE_SOURCE_VIEW (self->view));
 }
 
diff --git a/src/libide/sourceview/ide-source-view-private.h b/src/libide/sourceview/ide-source-view-private.h
index 00e038a31..be43dc9ac 100644
--- a/src/libide/sourceview/ide-source-view-private.h
+++ b/src/libide/sourceview/ide-source-view-private.h
@@ -32,5 +32,6 @@ void         _ide_source_view_set_modifier     (IdeSourceView *self,
                                                 gunichar       modifier);
 GtkTextMark *_ide_source_view_get_scroll_mark  (IdeSourceView *self);
 void         _ide_source_view_clear_saved_mark (IdeSourceView *self);
+gboolean     _ide_source_view_has_cursors      (IdeSourceView *self);
 
 G_END_DECLS
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index 011aa7644..3228a9c8b 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -1543,6 +1543,9 @@ ide_source_view_maybe_insert_match (IdeSourceView *self,
   g_assert (IDE_IS_SOURCE_VIEW (self));
   g_assert (event);
 
+  if (priv->cursor != NULL && ide_cursor_is_enabled (priv->cursor))
+    return FALSE;
+
   /*
    * If we are disabled, then do nothing.
    */
@@ -2129,7 +2132,9 @@ ide_source_view_key_press_event (GtkWidget   *widget,
    * chain up to the parent class to insert the character, and then let the
    * auto-indenter fix things up.
    */
-  if (priv->buffer != NULL && priv->auto_indent)
+  if (priv->buffer != NULL &&
+      priv->auto_indent &&
+      (priv->cursor == NULL || !ide_cursor_is_enabled (priv->cursor)))
     {
       IdeIndenter *indenter = ide_source_view_get_indenter (self);
 
@@ -7900,3 +7905,13 @@ ide_source_view_set_gutter (IdeSourceView *self,
   g_object_notify (G_OBJECT (self), "show-line-diagnostics");
   g_object_notify (G_OBJECT (self), "show-line-numbers");
 }
+
+gboolean
+_ide_source_view_has_cursors (IdeSourceView *self)
+{
+  IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
+
+  g_return_val_if_fail (IDE_IS_SOURCE_VIEW (self), FALSE);
+
+  return priv->cursor != NULL && ide_cursor_is_enabled (priv->cursor);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]