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

19
grid.c
View file

@ -25,3 +25,22 @@ grid_swap_row(struct grid *grid, int row_a, int row_b)
grid->rows[real_a]->dirty = true;
grid->rows[real_b]->dirty = true;
}
struct row *
grid_row_alloc(int cols)
{
struct row *row = malloc(sizeof(*row));
row->cells = calloc(cols, sizeof(row->cells[0]));
row->dirty = false; /* TODO: parameter? */
return row;
}
void
grid_row_free(struct row *row)
{
if (row == NULL)
return;
free(row->cells);
free(row);
}