grid: don't pre-allocate the entire grid (with all scrollback lines)

The row array may now contain NULL pointers. This means the
corresponding row hasn't yet been allocated and initialized.

On a resize, we explicitly allocate the visible rows.

Uninitialized rows are then allocated the first time they are
referenced.
This commit is contained in:
Daniel Eklöf 2019-07-10 16:27:55 +02:00
parent 8f0d574dcb
commit 1ff1b3a71e
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
7 changed files with 68 additions and 45 deletions

View file

@ -26,7 +26,7 @@ cmd_scrollback_up(struct terminal *term, int rows)
assert(new_view < term->grid->num_rows);
/* Avoid scrolling in uninitialized rows */
while (!term->grid->rows[new_view]->initialized)
while (term->grid->rows[new_view] == NULL)
new_view = (new_view + 1) % term->grid->num_rows;
if (new_view == term->grid->view) {
@ -87,7 +87,7 @@ cmd_scrollback_down(struct terminal *term, int rows)
for (int i = 0; i < term->rows; i++) {
int row_no = (new_view + i) % term->grid->num_rows;
if (!term->grid->rows[row_no]->initialized) {
if (term->grid->rows[row_no] == NULL) {
all_initialized = false;
new_view--;
break;