[gnome-builder] code: add API to request all views scroll to iter
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] code: add API to request all views scroll to iter
- Date: Wed, 6 Mar 2019 00:35:02 +0000 (UTC)
commit 26fbc408fd3eaeb241224fa2506a6b269f6905b0
Author: Christian Hergert <chergert redhat com>
Date: Tue Mar 5 16:33:00 2019 -0800
code: add API to request all views scroll to iter
This can be useful when loading a buffer, to ensure that all
the views jump to the insertion point after load.
src/libide/code/ide-buffer-private.h | 63 +++++++++++++++++----------------
src/libide/code/ide-buffer.c | 31 ++++++++++++++++
src/libide/sourceview/ide-source-view.c | 19 ++++++++++
3 files changed, 82 insertions(+), 31 deletions(-)
---
diff --git a/src/libide/code/ide-buffer-private.h b/src/libide/code/ide-buffer-private.h
index 836fda7d7..56e969916 100644
--- a/src/libide/code/ide-buffer-private.h
+++ b/src/libide/code/ide-buffer-private.h
@@ -29,36 +29,37 @@
G_BEGIN_DECLS
-void _ide_buffer_manager_buffer_loaded (IdeBufferManager *self,
- IdeBuffer *buffer);
-void _ide_buffer_manager_buffer_saved (IdeBufferManager *self,
- IdeBuffer *buffer);
-void _ide_buffer_cancel_cursor_restore (IdeBuffer *self);
-gboolean _ide_buffer_can_restore_cursor (IdeBuffer *self);
-IdeExtensionSetAdapter *_ide_buffer_get_addins (IdeBuffer *self);
-IdeBuffer *_ide_buffer_new (IdeBufferManager *self,
- GFile *file,
- gboolean is_temporary);
-void _ide_buffer_attach (IdeBuffer *self,
- IdeObject *parent);
-void _ide_buffer_load_file_async (IdeBuffer *self,
- GCancellable *cancellable,
- IdeNotification **notif,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gboolean _ide_buffer_load_file_finish (IdeBuffer *self,
- GAsyncResult *result,
- GError **error);
-void _ide_buffer_line_flags_changed (IdeBuffer *self);
-void _ide_buffer_set_changed_on_volume (IdeBuffer *self,
- gboolean changed_on_volume);
-void _ide_buffer_set_read_only (IdeBuffer *self,
- gboolean read_only);
-IdeHighlightEngine *_ide_buffer_get_highlight_engine (IdeBuffer *self);
-void _ide_buffer_set_failure (IdeBuffer *self,
- const GError *error);
-void _ide_buffer_sync_to_unsaved_files (IdeBuffer *self);
-void _ide_buffer_set_file (IdeBuffer *self,
- GFile *file);
+void _ide_buffer_manager_buffer_loaded (IdeBufferManager *self,
+ IdeBuffer *buffer);
+void _ide_buffer_manager_buffer_saved (IdeBufferManager *self,
+ IdeBuffer *buffer);
+void _ide_buffer_cancel_cursor_restore (IdeBuffer *self);
+gboolean _ide_buffer_can_restore_cursor (IdeBuffer *self);
+IdeExtensionSetAdapter *_ide_buffer_get_addins (IdeBuffer *self);
+IdeBuffer *_ide_buffer_new (IdeBufferManager *self,
+ GFile *file,
+ gboolean is_temporary);
+void _ide_buffer_attach (IdeBuffer *self,
+ IdeObject *parent);
+void _ide_buffer_load_file_async (IdeBuffer *self,
+ GCancellable *cancellable,
+ IdeNotification **notif,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean _ide_buffer_load_file_finish (IdeBuffer *self,
+ GAsyncResult *result,
+ GError **error);
+void _ide_buffer_line_flags_changed (IdeBuffer *self);
+void _ide_buffer_set_changed_on_volume (IdeBuffer *self,
+ gboolean changed_on_volume);
+void _ide_buffer_set_read_only (IdeBuffer *self,
+ gboolean read_only);
+IdeHighlightEngine *_ide_buffer_get_highlight_engine (IdeBuffer *self);
+void _ide_buffer_set_failure (IdeBuffer *self,
+ const GError *error);
+void _ide_buffer_sync_to_unsaved_files (IdeBuffer *self);
+void _ide_buffer_set_file (IdeBuffer *self,
+ GFile *file);
+void _ide_buffer_request_scroll_to_cursor (IdeBuffer *self);
G_END_DECLS
diff --git a/src/libide/code/ide-buffer.c b/src/libide/code/ide-buffer.c
index cf511df58..3d0e60489 100644
--- a/src/libide/code/ide-buffer.c
+++ b/src/libide/code/ide-buffer.c
@@ -144,6 +144,7 @@ enum {
CURSOR_MOVED,
LINE_FLAGS_CHANGED,
LOADED,
+ REQUEST_SCROLL_TO_INSERT,
N_SIGNALS
};
@@ -903,6 +904,27 @@ ide_buffer_class_init (IdeBufferClass *klass)
g_signal_set_va_marshaller (signals [LOADED],
G_TYPE_FROM_CLASS (klass),
g_cclosure_marshal_VOID__VOIDv);
+
+ /**
+ * IdeBuffer::request-scroll-to-insert:
+ *
+ * Requests that attached views scroll to insert location.
+ *
+ * This is generally only used when loading a buffer.
+ *
+ * Since: 3.32
+ */
+ signals [REQUEST_SCROLL_TO_INSERT] =
+ g_signal_new_class_handler ("request-scroll-to-insert",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ NULL,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ g_signal_set_va_marshaller (signals [REQUEST_SCROLL_TO_INSERT],
+ G_TYPE_FROM_CLASS (klass),
+ g_cclosure_marshal_VOID__VOIDv);
}
static void
@@ -3771,3 +3793,12 @@ settle_finish (IdeBuffer *self,
IDE_RETURN (ret);
}
+
+void
+_ide_buffer_request_scroll_to_cursor (IdeBuffer *self)
+{
+ g_return_if_fail (IDE_IS_MAIN_THREAD ());
+ g_return_if_fail (IDE_IS_BUFFER (self));
+
+ g_signal_emit (self, signals [REQUEST_SCROLL_TO_INSERT], 0);
+}
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index 6c5ad3e94..4dbdbe8e7 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -836,6 +836,20 @@ ide_source_view__buffer_notify_style_scheme_cb (IdeSourceView *self,
}
}
+static void
+ide_source_view__buffer_request_scroll_to_insert_cb (IdeSourceView *self,
+ IdeBuffer *buffer)
+{
+ GtkTextMark *mark;
+
+ g_assert (IDE_IS_MAIN_THREAD ());
+ g_assert (IDE_IS_SOURCE_VIEW (self));
+ g_assert (IDE_IS_BUFFER (buffer));
+
+ mark = gtk_text_buffer_get_insert (GTK_TEXT_BUFFER (buffer));
+ gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (self), mark);
+}
+
static void
ide_source_view__buffer_changed_cb (IdeSourceView *self,
IdeBuffer *buffer)
@@ -6520,6 +6534,11 @@ ide_source_view_init (IdeSourceView *self)
G_CALLBACK (ide_source_view__buffer_changed_cb),
self,
G_CONNECT_SWAPPED);
+ dzl_signal_group_connect_object (priv->buffer_signals,
+ "request-scroll-to-insert",
+ G_CALLBACK (ide_source_view__buffer_request_scroll_to_insert_cb),
+ self,
+ G_CONNECT_SWAPPED);
dzl_signal_group_connect_object (priv->buffer_signals,
"line-flags-changed",
G_CALLBACK (ide_source_view__buffer_line_flags_changed_cb),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]