Bugfix: Switch layout mode after initializing all containers in a new row

This commit is contained in:
Michael Stapelberg 2009-11-04 22:10:26 +01:00
parent 7b0dec7c16
commit 2a0278b519
1 changed files with 13 additions and 6 deletions

View File

@ -50,7 +50,7 @@ void init_table() {
TAILQ_INSERT_TAIL(workspaces, c_ws, workspaces); TAILQ_INSERT_TAIL(workspaces, c_ws, workspaces);
} }
static void new_container(Workspace *workspace, Container **container, int col, int row) { static void new_container(Workspace *workspace, Container **container, int col, int row, bool skip_layout_switch) {
Container *new; Container *new;
new = *container = calloc(sizeof(Container), 1); new = *container = calloc(sizeof(Container), 1);
CIRCLEQ_INIT(&(new->clients)); CIRCLEQ_INIT(&(new->clients));
@ -59,6 +59,7 @@ static void new_container(Workspace *workspace, Container **container, int col,
new->col = col; new->col = col;
new->row = row; new->row = row;
new->workspace = workspace; new->workspace = workspace;
if (!skip_layout_switch)
switch_layout_mode(global_conn, new, config.container_mode); switch_layout_mode(global_conn, new, config.container_mode);
new->stack_limit = config.container_stack_limit; new->stack_limit = config.container_stack_limit;
new->stack_limit_value = config.container_stack_limit_value; new->stack_limit_value = config.container_stack_limit_value;
@ -76,8 +77,14 @@ void expand_table_rows(Workspace *workspace) {
for (int c = 0; c < workspace->cols; c++) { for (int c = 0; c < workspace->cols; c++) {
workspace->table[c] = realloc(workspace->table[c], sizeof(Container*) * workspace->rows); workspace->table[c] = realloc(workspace->table[c], sizeof(Container*) * workspace->rows);
new_container(workspace, &(workspace->table[c][workspace->rows-1]), c, workspace->rows-1); new_container(workspace, &(workspace->table[c][workspace->rows-1]), c, workspace->rows-1, true);
} }
/* We need to switch the layout in a separate step because it could
* happen that render_layout() (being called by switch_layout_mode())
* would access containers which were not yet initialized. */
for (int c = 0; c < workspace->cols; c++)
switch_layout_mode(global_conn, workspace->table[c][workspace->rows-1], config.container_mode);
} }
/* /*
@ -109,7 +116,7 @@ void expand_table_rows_at_head(Workspace *workspace) {
} }
for (int cols = 0; cols < workspace->cols; cols++) for (int cols = 0; cols < workspace->cols; cols++)
new_container(workspace, &(workspace->table[cols][0]), cols, 0); new_container(workspace, &(workspace->table[cols][0]), cols, 0, false);
} }
/* /*
@ -125,7 +132,7 @@ void expand_table_cols(Workspace *workspace) {
workspace->table = realloc(workspace->table, sizeof(Container**) * workspace->cols); workspace->table = realloc(workspace->table, sizeof(Container**) * workspace->cols);
workspace->table[workspace->cols-1] = calloc(sizeof(Container*) * workspace->rows, 1); workspace->table[workspace->cols-1] = calloc(sizeof(Container*) * workspace->rows, 1);
for (int c = 0; c < workspace->rows; c++) for (int c = 0; c < workspace->rows; c++)
new_container(workspace, &(workspace->table[workspace->cols-1][c]), workspace->cols-1, c); new_container(workspace, &(workspace->table[workspace->cols-1][c]), workspace->cols-1, c, false);
} }
/* /*
@ -157,7 +164,7 @@ void expand_table_cols_at_head(Workspace *workspace) {
} }
for (int rows = 0; rows < workspace->rows; rows++) for (int rows = 0; rows < workspace->rows; rows++)
new_container(workspace, &(workspace->table[0][rows]), 0, rows); new_container(workspace, &(workspace->table[0][rows]), 0, rows, false);
} }
/* /*