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

12
main.c
View file

@ -624,15 +624,11 @@ out:
if (term.kbd.xkb != NULL)
xkb_context_unref(term.kbd.xkb);
for (int row = 0; row < term.normal.num_rows; row++) {
free(term.normal.rows[row]->cells);
free(term.normal.rows[row]);
}
for (int row = 0; row < term.normal.num_rows; row++)
grid_row_free(term.normal.rows[row]);
free(term.normal.rows);
for (int row = 0; row < term.alt.num_rows; row++) {
free(term.alt.rows[row]->cells);
free(term.alt.rows[row]);
}
for (int row = 0; row < term.alt.num_rows; row++)
grid_row_free(term.alt.rows[row]);
free(term.alt.rows);
for (size_t i = 0; i < sizeof(term.fonts) / sizeof(term.fonts[0]); i++) {