fix layout switching (was broken because of workspace_layout)

For workspace containers, swayc_change_layout also changes ->layout alongside
->workspace_layout when it's a sensible thing to do. There is an additional test
for 'layout toggle' command which ensures that containers will be tiled
horizontally after toggling from tabbed or stacked.
This commit is contained in:
D.B 2016-11-17 06:49:12 +01:00 committed by Drew DeVault
parent 4762bcb3b9
commit 35b8d185ac
3 changed files with 5 additions and 2 deletions

View file

@ -324,7 +324,7 @@ void close_views(swayc_t *container);
/** /**
* Assign layout to a container. Needed due to workspace container specifics. * Assign layout to a container. Needed due to workspace container specifics.
* Workspace always needs L_HORIZ layout. * Workspace should always have either L_VERT or L_HORIZ layout.
*/ */
swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout); swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout);

View file

@ -49,7 +49,7 @@ struct cmd_results *cmd_layout(int argc, char **argv) {
} else if (strcasecmp(argv[0], "splitv") == 0) { } else if (strcasecmp(argv[0], "splitv") == 0) {
swayc_change_layout(parent, L_VERT); swayc_change_layout(parent, L_VERT);
} else if (strcasecmp(argv[0], "toggle") == 0 && argc == 2 && strcasecmp(argv[1], "split") == 0) { } else if (strcasecmp(argv[0], "toggle") == 0 && argc == 2 && strcasecmp(argv[1], "split") == 0) {
if (parent->layout == L_HORIZ) { if (parent->layout == L_HORIZ && (parent->workspace_layout == L_NONE || parent->workspace_layout == L_HORIZ)) {
swayc_change_layout(parent, L_VERT); swayc_change_layout(parent, L_VERT);
} else { } else {
swayc_change_layout(parent, L_HORIZ); swayc_change_layout(parent, L_HORIZ);

View file

@ -950,6 +950,9 @@ swayc_t *swayc_tabbed_stacked_parent(swayc_t *con) {
swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout) { swayc_t *swayc_change_layout(swayc_t *container, enum swayc_layouts layout) {
if (container->type == C_WORKSPACE) { if (container->type == C_WORKSPACE) {
container->workspace_layout = layout; container->workspace_layout = layout;
if (layout == L_HORIZ || layout == L_VERT) {
container->layout = layout;
}
} else { } else {
container->layout = layout; container->layout = layout;
} }