[vte/wip/issue-335: 6/6] widget: Make scroll adjustment range start at 0 always




commit 3f94dd1fb47616f42c60901efaaf1d9e467d97b3
Author: Christian Persch <chpe src gnome org>
Date:   Thu Mar 4 23:17:41 2021 +0100

    widget: Make scroll adjustment range start at 0 always

 src/vte.cc    | 10 ++++++++--
 src/widget.cc | 29 ++++++++++++++---------------
 2 files changed, 22 insertions(+), 17 deletions(-)
---
diff --git a/src/vte.cc b/src/vte.cc
index 53ccf0cc..69b68907 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -1949,13 +1949,15 @@ Terminal::emit_adjustment_changed()
 
                 auto const lower = _vte_ring_delta (m_screen->row_data);
                 auto const upper = m_screen->insert_delta + m_row_count;
-                widget()->notify_scroll_bounds_changed({lower}, {upper}, {m_row_count});
+                widget()->notify_scroll_bounds_changed(0, {upper - lower}, m_row_count);
         }
 
         if (m_adjustment_value_changed_pending) {
                 m_adjustment_value_changed_pending = false;
 
-                widget()->notify_scroll_value_changed(m_screen->scroll_delta);
+                /* Subtract offset */
+                auto const lower = _vte_ring_delta (m_screen->row_data);
+                widget()->notify_scroll_value_changed(m_screen->scroll_delta - lower);
         }
 }
 
@@ -7624,6 +7626,10 @@ Terminal::set_size(long columns,
 void
 Terminal::set_scroll_value(double value)
 {
+        /* Add offset */
+        auto const lower = _vte_ring_delta (m_screen->row_data);
+        value += lower;
+
        /* Save the difference. */
        auto const dy = value - m_screen->scroll_delta;
 
diff --git a/src/widget.cc b/src/widget.cc
index 304700a8..520f101b 100644
--- a/src/widget.cc
+++ b/src/widget.cc
@@ -746,23 +746,21 @@ Widget::notify_scroll_bounds_changed(long lower,
         auto const freezer = vte::glib::FreezeObjectNotify{m_vadjustment.get()};
         auto changed = false;
 
-        auto dlower = double(lower);
-        auto dupper = double(upper);
+        auto dupper = double(upper - lower);
         auto dline = 1.;
         if (scroll_unit_pixels()) [[unlikely]] {
                 auto const factor = m_terminal->get_cell_height();
-                dlower *= factor;
                 dupper *= factor;
                 dline *= factor;
                 row_count *= factor;
         }
 
         auto current = gtk_adjustment_get_lower(m_vadjustment.get());
-        if (!_vte_double_equal(current, dlower)) {
+        if (!_vte_double_equal(current, 0.)) {
                 _vte_debug_print(VTE_DEBUG_ADJ,
                                  "Changing lower bound from %.0f to %f\n",
-                                 current, dlower);
-                gtk_adjustment_set_lower(m_vadjustment.get(), dlower);
+                                 current, 0.);
+                gtk_adjustment_set_lower(m_vadjustment.get(), 0.);
                 changed = true;
         }
 
@@ -776,19 +774,20 @@ Widget::notify_scroll_bounds_changed(long lower,
         }
 
         /* The step increment should always be one. */
-        auto v = gtk_adjustment_get_step_increment(m_vadjustment.get());
-        if (!_vte_double_equal(v, dline)) {
+        current = gtk_adjustment_get_step_increment(m_vadjustment.get());
+        if (!_vte_double_equal(current, dline)) {
                 _vte_debug_print(VTE_DEBUG_ADJ,
-                                 "Changing step increment from %.0lf to 1.0\n", v);
+                                 "Changing step increment from %.0f to %.0f\n",
+                                 current, dline);
                 gtk_adjustment_set_step_increment(m_vadjustment.get(), dline);
                 changed = true;
         }
 
-        v = gtk_adjustment_get_page_size(m_vadjustment.get());
-        if (!_vte_double_equal(v, row_count)) {
+        current = gtk_adjustment_get_page_size(m_vadjustment.get());
+        if (!_vte_double_equal(current, row_count)) {
                 _vte_debug_print(VTE_DEBUG_ADJ,
                                  "Changing page size from %.0f to %ld\n",
-                                 v, row_count);
+                                 current, row_count);
                 gtk_adjustment_set_page_size(m_vadjustment.get(), row_count);
                 changed = true;
         }
@@ -796,12 +795,12 @@ Widget::notify_scroll_bounds_changed(long lower,
         /* Clicking in the empty area should scroll exactly one screen,
          * so set the page size to the number of visible rows.
          */
-        v = gtk_adjustment_get_page_increment(m_vadjustment.get());
-        if (!_vte_double_equal(v, row_count)) {
+        current = gtk_adjustment_get_page_increment(m_vadjustment.get());
+        if (!_vte_double_equal(current, row_count)) {
                 _vte_debug_print(VTE_DEBUG_ADJ,
                                  "Changing page increment from "
                                  "%.0f to %ld\n",
-                                 v, row_count);
+                                 current, row_count);
                 gtk_adjustment_set_page_increment(m_vadjustment.get(), row_count);
                 changed = true;
         }


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