diff options
author | Christian Persch <chpe@src.gnome.org> | 2021-03-04 23:17:41 +0100 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2021-03-04 23:17:41 +0100 |
commit | 3f94dd1fb47616f42c60901efaaf1d9e467d97b3 (patch) | |
tree | 7a94a141f932ec98e9e2eae708143f779cff90f4 | |
parent | 4064ed10af877013b85185fc0009f404e9c6eb2c (diff) | |
download | vte-wip/issue-335.tar.gz |
widget: Make scroll adjustment range start at 0 alwayswip/issue-335
-rw-r--r-- | src/vte.cc | 10 | ||||
-rw-r--r-- | src/widget.cc | 29 |
2 files changed, 22 insertions, 17 deletions
@@ -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; } |