[gtksourceview/wip/chergert/vim: 321/363] allow failing from extend callback




commit 52b2c8dd30aef4d84423d51f25be12f1255ead07
Author: Christian Hergert <chergert redhat com>
Date:   Fri Nov 5 15:17:33 2021 -0700

    allow failing from extend callback
    
    this way we can look at specific requests and fail them just like VIM does

 gtksourceview/vim/gtk-source-vim-text-object.c | 39 ++++++++++++++++++--------
 1 file changed, 28 insertions(+), 11 deletions(-)
---
diff --git a/gtksourceview/vim/gtk-source-vim-text-object.c b/gtksourceview/vim/gtk-source-vim-text-object.c
index 49e26972..1ccb6093 100644
--- a/gtksourceview/vim/gtk-source-vim-text-object.c
+++ b/gtksourceview/vim/gtk-source-vim-text-object.c
@@ -26,11 +26,12 @@
 
 typedef gboolean (*TextObjectCheck)  (const GtkTextIter *iter);
 typedef gboolean (*TextObjectMotion) (GtkTextIter       *iter);
-typedef void     (*TextObjectExtend) (const GtkTextIter *origin,
+typedef gboolean (*TextObjectExtend) (const GtkTextIter *origin,
                                       GtkTextIter       *inner_begin,
                                       GtkTextIter       *inner_end,
                                       GtkTextIter       *a_begin,
-                                      GtkTextIter       *a_end);
+                                      GtkTextIter       *a_end,
+                                      guint              mode);
 
 enum {
        TEXT_OBJECT_INNER,
@@ -245,12 +246,13 @@ forward_to_nonspace (GtkTextIter *iter)
        }
 }
 
-static void
+static gboolean
 text_object_extend_word (const GtkTextIter *origin,
                          GtkTextIter       *inner_begin,
                          GtkTextIter       *inner_end,
                          GtkTextIter       *a_begin,
-                         GtkTextIter       *a_end)
+                         GtkTextIter       *a_end,
+                         guint              mode)
 {
        if (!gtk_text_iter_ends_line (inner_end))
        {
@@ -271,27 +273,34 @@ text_object_extend_word (const GtkTextIter *origin,
                *a_end = *inner_end;
                forward_to_nonspace (a_end);
        }
+
+       return TRUE;
 }
 
-static void
+static gboolean
 text_object_extend_one (const GtkTextIter *origin,
                         GtkTextIter       *inner_begin,
                         GtkTextIter       *inner_end,
                         GtkTextIter       *a_begin,
-                        GtkTextIter       *a_end)
+                        GtkTextIter       *a_end,
+                        guint              mode)
 {
        *a_begin = *inner_begin;
        gtk_text_iter_forward_char (inner_begin);
+
        *a_end = *inner_end;
        gtk_text_iter_forward_char (a_end);
+
+       return TRUE;
 }
 
-static void
+static gboolean
 text_object_extend_paragraph (const GtkTextIter *origin,
                               GtkTextIter       *inner_begin,
                               GtkTextIter       *inner_end,
                               GtkTextIter       *a_begin,
-                              GtkTextIter       *a_end)
+                              GtkTextIter       *a_end,
+                              guint              mode)
 {
        GtkTextIter next;
        gboolean started_on_empty;
@@ -350,14 +359,17 @@ text_object_extend_paragraph (const GtkTextIter *origin,
                        gtk_text_iter_backward_char (&next);
                *a_end = next;
        }
+
+       return TRUE;
 }
 
-static void
+static gboolean
 text_object_extend_sentence (const GtkTextIter *origin,
                              GtkTextIter       *inner_begin,
                              GtkTextIter       *inner_end,
                              GtkTextIter       *a_begin,
-                             GtkTextIter       *a_end)
+                             GtkTextIter       *a_end,
+                             guint              mode)
 {
        if (gtk_text_iter_starts_line (inner_begin) &&
            gtk_text_iter_ends_line (inner_begin))
@@ -379,6 +391,8 @@ text_object_extend_sentence (const GtkTextIter *origin,
                        gtk_text_iter_forward_char (a_end);
                }
        }
+
+       return TRUE;
 }
 
 static GtkSourceVimState *
@@ -488,7 +502,10 @@ gtk_source_vim_text_object_select (GtkSourceVimTextObject *self,
        a_begin = inner_begin;
        a_end = inner_end;
 
-       self->extend (begin, &inner_begin, &inner_end, &a_begin, &a_end);
+       if (!self->extend (begin, &inner_begin, &inner_end, &a_begin, &a_end, self->inner_or_a))
+       {
+               return FALSE;
+       }
 
        if (self->inner_or_a == TEXT_OBJECT_INNER)
        {


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