[gtksourceview/wip/chergert/vim: 74/293] use place cursor onscreen replacement
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/chergert/vim: 74/293] use place cursor onscreen replacement
- Date: Fri, 5 Nov 2021 04:22:58 +0000 (UTC)
commit ec7180ed1383d3f3152581b6fa366c54b47a0786
Author: Christian Hergert <chergert redhat com>
Date: Mon Oct 25 23:30:11 2021 -0700
use place cursor onscreen replacement
since the gtk one seems broken, and not quite what we want anyway.
gtksourceview/vim/gtk-source-vim-state.c | 44 ++++++++++-----------
gtksourceview/vim/gtk-source-vim-state.h | 65 ++++++++++++++++----------------
2 files changed, 56 insertions(+), 53 deletions(-)
---
diff --git a/gtksourceview/vim/gtk-source-vim-state.c b/gtksourceview/vim/gtk-source-vim-state.c
index 9ebc56c4..837d732d 100644
--- a/gtksourceview/vim/gtk-source-vim-state.c
+++ b/gtksourceview/vim/gtk-source-vim-state.c
@@ -542,13 +542,7 @@ gtk_source_vim_state_scroll_line (GtkSourceVimState *self,
_gtk_source_view_jump_to_iter (GTK_TEXT_VIEW (view), &top, 0.0, TRUE, 1.0, 0.0);
- /* Note: This doesn't seem to update immediate for CTRL+Y, probably
- * because the viewport area has not calculated that the insert
- * mark has fully moved off screen. We might need to do something
- * like force revalidation but delaying the movement can cause
- * ordering issues.
- */
- gtk_text_view_place_cursor_onscreen (GTK_TEXT_VIEW (view));
+ gtk_source_vim_state_place_cursor_onscreen (self);
}
void
@@ -627,26 +621,14 @@ scroll_page_up (GtkSourceVimState *self)
}
void
-gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
- int count)
+gtk_source_vim_state_place_cursor_onscreen (GtkSourceVimState *self)
{
GtkSourceVimStatePrivate *priv = gtk_source_vim_state_get_instance_private (self);
GtkTextIter iter;
GdkRectangle rect, loc;
gboolean move_insert = FALSE;
- g_return_if_fail (GTK_SOURCE_IS_VIM_STATE (self));
-
- if (count == 0)
- count = 1;
-
- for (int i = 1; i <= ABS (count); i++)
- {
- if (count > 0)
- scroll_page_down (self);
- else
- scroll_page_up (self);
- }
+ g_assert (GTK_SOURCE_IS_VIM_STATE (self));
gtk_source_vim_state_get_buffer (self, &iter, NULL);
gtk_text_view_get_visible_rect (GTK_TEXT_VIEW (priv->view), &rect);
@@ -679,3 +661,23 @@ gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
gtk_source_vim_state_select (self, &iter, &iter);
}
}
+
+void
+gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
+ int count)
+{
+ g_return_if_fail (GTK_SOURCE_IS_VIM_STATE (self));
+
+ if (count == 0)
+ count = 1;
+
+ for (int i = 1; i <= ABS (count); i++)
+ {
+ if (count > 0)
+ scroll_page_down (self);
+ else
+ scroll_page_up (self);
+ }
+
+ gtk_source_vim_state_place_cursor_onscreen (self);
+}
diff --git a/gtksourceview/vim/gtk-source-vim-state.h b/gtksourceview/vim/gtk-source-vim-state.h
index 2a0578d4..62e7c93f 100644
--- a/gtksourceview/vim/gtk-source-vim-state.h
+++ b/gtksourceview/vim/gtk-source-vim-state.h
@@ -54,38 +54,39 @@ struct _GtkSourceVimStateClass
int repeat);
};
-void gtk_source_vim_state_push (GtkSourceVimState *self,
- GtkSourceVimState *new_state);
-void gtk_source_vim_state_pop (GtkSourceVimState *self);
-void gtk_source_vim_state_beep (GtkSourceVimState *self);
-GtkSourceVimState *gtk_source_vim_state_get_child (GtkSourceVimState *self);
-GtkSourceVimState *gtk_source_vim_state_get_current (GtkSourceVimState *self);
-GtkSourceView *gtk_source_vim_state_get_view (GtkSourceVimState *self);
-GtkSourceBuffer *gtk_source_vim_state_get_buffer (GtkSourceVimState *self,
- GtkTextIter *insert,
- GtkTextIter *selection_bound);
-GtkSourceVimState *gtk_source_vim_state_get_root (GtkSourceVimState *self);
-GtkSourceVimState *gtk_source_vim_state_get_parent (GtkSourceVimState *self);
-gboolean gtk_source_vim_state_handle_event (GtkSourceVimState *self,
- GdkEvent *event);
-void gtk_source_vim_state_set_overwrite (GtkSourceVimState *self,
- gboolean overwrite);
-gboolean gtk_source_vim_state_get_can_repeat (GtkSourceVimState *self);
-gboolean gtk_source_vim_state_synthesize (GtkSourceVimState *self,
- guint keyval,
- GdkModifierType mods);
-void gtk_source_vim_state_repeat (GtkSourceVimState *self,
- int repeat);
-int gtk_source_vim_state_get_visible_lines (GtkSourceVimState *self);
-void gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
- int count);
-void gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
- int count);
-void gtk_source_vim_state_scroll_line (GtkSourceVimState *self,
- int count);
-void gtk_source_vim_state_select (GtkSourceVimState *self,
- const GtkTextIter *insert,
- const GtkTextIter *selection);
+void gtk_source_vim_state_push (GtkSourceVimState *self,
+ GtkSourceVimState *new_state);
+void gtk_source_vim_state_pop (GtkSourceVimState *self);
+void gtk_source_vim_state_beep (GtkSourceVimState *self);
+GtkSourceVimState *gtk_source_vim_state_get_child (GtkSourceVimState *self);
+GtkSourceVimState *gtk_source_vim_state_get_current (GtkSourceVimState *self);
+GtkSourceView *gtk_source_vim_state_get_view (GtkSourceVimState *self);
+GtkSourceBuffer *gtk_source_vim_state_get_buffer (GtkSourceVimState *self,
+ GtkTextIter *insert,
+ GtkTextIter *selection_bound);
+GtkSourceVimState *gtk_source_vim_state_get_root (GtkSourceVimState *self);
+GtkSourceVimState *gtk_source_vim_state_get_parent (GtkSourceVimState *self);
+gboolean gtk_source_vim_state_handle_event (GtkSourceVimState *self,
+ GdkEvent *event);
+void gtk_source_vim_state_set_overwrite (GtkSourceVimState *self,
+ gboolean overwrite);
+gboolean gtk_source_vim_state_get_can_repeat (GtkSourceVimState *self);
+gboolean gtk_source_vim_state_synthesize (GtkSourceVimState *self,
+ guint keyval,
+ GdkModifierType mods);
+void gtk_source_vim_state_repeat (GtkSourceVimState *self,
+ int repeat);
+int gtk_source_vim_state_get_visible_lines (GtkSourceVimState *self);
+void gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
+ int count);
+void gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
+ int count);
+void gtk_source_vim_state_scroll_line (GtkSourceVimState *self,
+ int count);
+void gtk_source_vim_state_select (GtkSourceVimState *self,
+ const GtkTextIter *insert,
+ const GtkTextIter *selection);
+void gtk_source_vim_state_place_cursor_onscreen (GtkSourceVimState *self);
static inline gboolean
gtk_source_vim_state_is_escape (guint keyval,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]