summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2021-03-04 23:17:41 +0100
committerChristian Persch <chpe@src.gnome.org>2021-03-04 23:17:41 +0100
commit3f94dd1fb47616f42c60901efaaf1d9e467d97b3 (patch)
tree7a94a141f932ec98e9e2eae708143f779cff90f4
parent4064ed10af877013b85185fc0009f404e9c6eb2c (diff)
downloadvte-wip/issue-335.tar.gz
widget: Make scroll adjustment range start at 0 alwayswip/issue-335
-rw-r--r--src/vte.cc10
-rw-r--r--src/widget.cc29
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;
}