[vte] emulation: Set scrollback lines on both screens
- From: Egmont Koblinger <egmontkob src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte] emulation: Set scrollback lines on both screens
- Date: Sun, 27 Jul 2014 13:57:34 +0000 (UTC)
commit 645c499d98c49c042ffa36f05b43a2814e9393c5
Author: Egmont Koblinger <egmont gmail com>
Date: Sun Jul 27 15:55:16 2014 +0200
emulation: Set scrollback lines on both screens
https://bugzilla.gnome.org/show_bug.cgi?id=731205#c8
src/vte.c | 55 ++++++++++++++++++++++++++-----------------------------
1 files changed, 26 insertions(+), 29 deletions(-)
---
diff --git a/src/vte.c b/src/vte.c
index 2cd9fad..437139c 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -12188,7 +12188,7 @@ vte_terminal_set_scrollback_lines(VteTerminal *terminal, glong lines)
{
VteTerminalPrivate *pvt;
GObject *object;
- glong scroll_delta;
+ glong scroll_delta, low, high, next;
VteScreen *screen;
g_return_if_fail(VTE_IS_TERMINAL(terminal));
@@ -12211,38 +12211,35 @@ vte_terminal_set_scrollback_lines(VteTerminal *terminal, glong lines)
"Setting scrollback lines to %ld\n", lines);
pvt->scrollback_lines = lines;
- screen = pvt->screen;
- scroll_delta = screen->scroll_delta;
-
- /* The main screen gets the full scrollback buffer, but the
- * alternate screen isn't allowed to scroll at all. */
- if (screen == &terminal->pvt->normal_screen) {
- glong low, high, next;
- /* We need at least as many lines as are visible */
- lines = MAX (lines, terminal->pvt->row_count);
- next = MAX (screen->cursor_current.row + 1,
- _vte_ring_next (screen->row_data));
- _vte_ring_resize (screen->row_data, lines);
- low = _vte_ring_delta (screen->row_data);
- high = lines + MIN (G_MAXLONG - lines, low - terminal->pvt->row_count + 1);
- screen->insert_delta = CLAMP (screen->insert_delta, low, high);
- scroll_delta = CLAMP (scroll_delta, low, screen->insert_delta);
- next = MIN (next, screen->insert_delta + terminal->pvt->row_count);
- if (_vte_ring_next (screen->row_data) > next){
- _vte_ring_shrink (screen->row_data, next - low);
- }
- } else {
- _vte_ring_resize (screen->row_data, terminal->pvt->row_count);
- scroll_delta = _vte_ring_delta (screen->row_data);
- screen->insert_delta = _vte_ring_delta (screen->row_data);
- if (_vte_ring_next (screen->row_data) > screen->insert_delta + terminal->pvt->row_count){
- _vte_ring_shrink (screen->row_data, terminal->pvt->row_count);
- }
- }
+
+ /* The main screen gets the full scrollback buffer. */
+ screen = &terminal->pvt->normal_screen;
+ lines = MAX (lines, terminal->pvt->row_count);
+ next = MAX (screen->cursor_current.row + 1,
+ _vte_ring_next (screen->row_data));
+ _vte_ring_resize (screen->row_data, lines);
+ low = _vte_ring_delta (screen->row_data);
+ high = lines + MIN (G_MAXLONG - lines, low - terminal->pvt->row_count + 1);
+ screen->insert_delta = CLAMP (screen->insert_delta, low, high);
+ screen->scroll_delta = CLAMP (screen->scroll_delta, low, screen->insert_delta);
+ next = MIN (next, screen->insert_delta + terminal->pvt->row_count);
+ if (_vte_ring_next (screen->row_data) > next){
+ _vte_ring_shrink (screen->row_data, next - low);
+ }
+
+ /* The alternate screen isn't allowed to scroll at all. */
+ screen = &terminal->pvt->alternate_screen;
+ _vte_ring_resize (screen->row_data, terminal->pvt->row_count);
+ screen->scroll_delta = _vte_ring_delta (screen->row_data);
+ screen->insert_delta = _vte_ring_delta (screen->row_data);
+ if (_vte_ring_next (screen->row_data) > screen->insert_delta + terminal->pvt->row_count){
+ _vte_ring_shrink (screen->row_data, terminal->pvt->row_count);
+ }
/* Adjust the scrollbar to the new location. */
/* Hack: force a change in scroll_delta even if the value remains, so that
vte_term_q_adj_val_changed() doesn't shortcut to no-op, see bug 676075. */
+ scroll_delta = terminal->pvt->screen->scroll_delta;
terminal->pvt->screen->scroll_delta = -1;
vte_terminal_queue_adjustment_value_changed (terminal, scroll_delta);
_vte_terminal_adjust_adjustments_full (terminal);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]