mirror of
https://github.com/swaywm/sway.git
synced 2025-11-04 13:29:52 -05:00
cleanup in auto layouts
- added L_AUTO_FIRST/LAST instead of using explicit layouts. - when switching between auto layout that don't share the same major axis, invert the width/height of their child views to preserve their relative proportions.
This commit is contained in:
parent
2b0e3c212a
commit
a0aa8d9780
6 changed files with 70 additions and 18 deletions
|
|
@ -56,24 +56,12 @@ struct cmd_results *cmd_layout(int argc, char **argv) {
|
|||
swayc_change_layout(parent, L_HORIZ);
|
||||
}
|
||||
} else if (strcasecmp(argv[0], "auto_left") == 0) {
|
||||
if (parent->type != C_CONTAINER && !swayc_is_empty_workspace(parent)){
|
||||
parent = new_container(parent, L_AUTO_LEFT);
|
||||
}
|
||||
swayc_change_layout(parent, L_AUTO_LEFT);
|
||||
} else if (strcasecmp(argv[0], "auto_right") == 0) {
|
||||
if (parent->type != C_CONTAINER && !swayc_is_empty_workspace(parent)){
|
||||
parent = new_container(parent, L_AUTO_RIGHT);
|
||||
}
|
||||
swayc_change_layout(parent, L_AUTO_RIGHT);
|
||||
} else if (strcasecmp(argv[0], "auto_top") == 0) {
|
||||
if (parent->type != C_CONTAINER && !swayc_is_empty_workspace(parent)){
|
||||
parent = new_container(parent, L_AUTO_TOP);
|
||||
}
|
||||
swayc_change_layout(parent, L_AUTO_TOP);
|
||||
} else if (strcasecmp(argv[0], "auto_bot") == 0) {
|
||||
if (parent->type != C_CONTAINER && !swayc_is_empty_workspace(parent)){
|
||||
parent = new_container(parent, L_AUTO_BOTTOM);
|
||||
}
|
||||
swayc_change_layout(parent, L_AUTO_BOTTOM);
|
||||
} else if (strcasecmp(argv[0], "incnmaster") == 0) {
|
||||
if ((error = checkarg(argc, "layout incnmaster",
|
||||
|
|
@ -105,6 +93,42 @@ struct cmd_results *cmd_layout(int argc, char **argv) {
|
|||
((int)container->parent->nb_slave_groups + inc >= 1)) {
|
||||
container->parent->nb_slave_groups += inc;
|
||||
}
|
||||
} else if (strcasecmp(argv[0], "auto") == 0) {
|
||||
if ((error = checkarg(argc, "auto", EXPECTED_EQUAL_TO, 2))) {
|
||||
return error;
|
||||
}
|
||||
swayc_t *container = get_focused_view(swayc_active_workspace());
|
||||
swayc_t *parent = container->parent;
|
||||
enum swayc_layouts layout;
|
||||
if (strcasecmp(argv[1], "next") == 0) {
|
||||
if (is_auto_layout(parent->layout) && parent->layout < L_AUTO_LAST) {
|
||||
layout = parent->layout + 1;
|
||||
} else {
|
||||
layout = L_AUTO_FIRST;
|
||||
}
|
||||
} else if (strcasecmp(argv[1], "prev") == 0) {
|
||||
if (is_auto_layout(parent->layout) && parent->layout > L_AUTO_FIRST) {
|
||||
layout = parent->layout - 1;
|
||||
} else {
|
||||
layout = L_AUTO_FIRST;
|
||||
}
|
||||
} else {
|
||||
return cmd_results_new(CMD_FAILURE, "layout auto",
|
||||
"Must be one of <prev|next>.");
|
||||
}
|
||||
swayc_change_layout(parent, layout);
|
||||
} else if (strcasecmp(argv[0], "promote") == 0) {
|
||||
// swap first child in auto layout with currently focused child
|
||||
swayc_t *container = get_focused_view(swayc_active_workspace());
|
||||
swayc_t *parent = container->parent;
|
||||
if (is_auto_layout(parent->layout)) {
|
||||
int focused_idx = index_child(container);
|
||||
swayc_t *first = parent->children->items[0];
|
||||
if (focused_idx > 0) {
|
||||
list_swap(parent->children, 0, focused_idx);
|
||||
swap_geometry(first, container);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue