[gnome-builder] libide/sourceview: allow 3/4 overscroll of source view



commit df67cd78931b69fb664e0abf4b8230e71cf25bda
Author: Christian Hergert <chergert redhat com>
Date:   Sat Jul 30 17:32:47 2022 -0700

    libide/sourceview: allow 3/4 overscroll of source view
    
    We used to have this as an option in the old sourceview, but it is not
    worth the effort to be that precise. Just implement something reasonable
    up-front and then we can delete the option going forward. It's just too
    much of an annoyance to track that level of detail/font-measurements/etc
    just so you can choose to have X pixels of overscroll.

 .../gsettings/org.gnome.builder.editor.gschema.xml |  6 ------
 src/libide/gui/ide-preferences-builtin.c           |  1 -
 src/libide/sourceview/ide-source-view-private.h    |  3 +++
 src/libide/sourceview/ide-source-view.c            | 25 ++++++++++++++++++++++
 4 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/data/gsettings/org.gnome.builder.editor.gschema.xml 
b/data/gsettings/org.gnome.builder.editor.gschema.xml
index 6a71cebdc..02020c8d1 100644
--- a/data/gsettings/org.gnome.builder.editor.gschema.xml
+++ b/data/gsettings/org.gnome.builder.editor.gschema.xml
@@ -89,12 +89,6 @@
       <summary>Draw Spaces</summary>
       <description>The various types of space to draw in the editor.</description>
     </key>
-    <key name="overscroll" type="i">
-      <default>10</default>
-      <range min="-999" max="999"/>
-      <summary>Overscroll</summary>
-      <description>The number of lines to scroll beyond the end of the buffer.</description>
-    </key>
     <key name="wrap-text" type="s">
       <choices>
         <choice value="never"/>
diff --git a/src/libide/gui/ide-preferences-builtin.c b/src/libide/gui/ide-preferences-builtin.c
index 726343a95..03634db74 100644
--- a/src/libide/gui/ide-preferences-builtin.c
+++ b/src/libide/gui/ide-preferences-builtin.c
@@ -178,7 +178,6 @@ ide_preferences_builtin_register_editor (DzlPreferences *preferences)
   dzl_preferences_add_list_group (preferences, "editor", "position", _("Cursor"), GTK_SELECTION_NONE, 0);
   dzl_preferences_add_switch (preferences, "editor", "position", "org.gnome.builder.editor", 
"restore-insert-mark", NULL, NULL, _("Restore cursor position"), _("Restore cursor position when a file is 
reopened"), NULL, 0);
   dzl_preferences_add_spin_button (preferences, "editor", "position", "org.gnome.builder.editor", 
"scroll-offset", NULL, _("Scroll Offset"), _("Minimum number of lines to keep above and below the cursor"), 
NULL, 10);
-  dzl_preferences_add_spin_button (preferences, "editor", "position", "org.gnome.builder.editor", 
"overscroll", NULL, _("Overscroll"), _("Allow the editor to scroll past the end of the buffer"), NULL, 20);
 
   dzl_preferences_add_list_group (preferences, "editor", "text-wrapping", _("Text Wrapping"), 
GTK_SELECTION_NONE, 0);
   dzl_preferences_add_radio (preferences, "editor", "text-wrapping", "org.gnome.builder.editor", 
"wrap-text", NULL, "\"never\"", _("Never"), NULL, NULL, 0);
diff --git a/src/libide/sourceview/ide-source-view-private.h b/src/libide/sourceview/ide-source-view-private.h
index d1699a2a7..6ca5232e9 100644
--- a/src/libide/sourceview/ide-source-view-private.h
+++ b/src/libide/sourceview/ide-source-view-private.h
@@ -63,6 +63,9 @@ struct _IdeSourceView
   IdeExtensionSetAdapter *hover_providers;
   IdeExtensionAdapter *indenter;
 
+  /* GSource used to update bottom margin */
+  guint overscroll_source;
+
   /* Mouse click position */
   double click_x;
   double click_y;
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index f3d45d10c..89543e412 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -442,6 +442,26 @@ ide_source_view_focus_leave_cb (IdeSourceView           *self,
   IDE_EXIT;
 }
 
+static gboolean
+ide_source_view_update_overscroll (gpointer user_data)
+{
+  IdeSourceView *self = user_data;
+
+  g_assert (IDE_IS_SOURCE_VIEW (self));
+
+  self->overscroll_source = 0;
+
+  if (gtk_widget_get_mapped (GTK_WIDGET (self)))
+    {
+      GdkRectangle visible_rect;
+
+      gtk_text_view_get_visible_rect (GTK_TEXT_VIEW (self), &visible_rect);
+      gtk_text_view_set_bottom_margin (GTK_TEXT_VIEW (self), visible_rect.height * .75);
+    }
+
+  return G_SOURCE_REMOVE;
+}
+
 static void
 ide_source_view_size_allocate (GtkWidget *widget,
                                int        width,
@@ -457,6 +477,9 @@ ide_source_view_size_allocate (GtkWidget *widget,
 
   if (self->popup_menu != NULL)
     gtk_popover_present (self->popup_menu);
+
+  if (self->overscroll_source == 0)
+    self->overscroll_source = g_idle_add (ide_source_view_update_overscroll, self);
 }
 
 static void
@@ -662,6 +685,8 @@ ide_source_view_dispose (GObject *object)
 
   IDE_ENTRY;
 
+  g_clear_handle_id (&self->overscroll_source, g_source_remove);
+
   ide_source_view_disconnect_buffer (self);
 
   g_clear_object (&self->joined_menu);


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