|
|
@ -292,9 +292,11 @@ static bool cmd_layout(struct sway_config *config, int argc, char **argv) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
swayc_t *parent = get_focused_container(&root_container);
|
|
|
|
swayc_t *parent = get_focused_container(&root_container);
|
|
|
|
|
|
|
|
|
|
|
|
while (parent->type == C_VIEW) {
|
|
|
|
while (parent->type == C_VIEW) {
|
|
|
|
parent = parent->parent;
|
|
|
|
parent = parent->parent;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (strcasecmp(argv[0], "splith") == 0) {
|
|
|
|
if (strcasecmp(argv[0], "splith") == 0) {
|
|
|
|
parent->layout = L_HORIZ;
|
|
|
|
parent->layout = L_HORIZ;
|
|
|
|
} else if (strcasecmp(argv[0], "splitv") == 0) {
|
|
|
|
} else if (strcasecmp(argv[0], "splitv") == 0) {
|
|
|
@ -343,19 +345,17 @@ static bool _do_split(struct sway_config *config, int argc, char **argv, int lay
|
|
|
|
}
|
|
|
|
}
|
|
|
|
swayc_t *focused = get_focused_container(&root_container);
|
|
|
|
swayc_t *focused = get_focused_container(&root_container);
|
|
|
|
|
|
|
|
|
|
|
|
/* Case that focus is on an workspace with 0/1 children.change its layout */
|
|
|
|
|
|
|
|
if (focused->type == C_WORKSPACE && focused->children->length <= 1) {
|
|
|
|
if (focused->type == C_WORKSPACE && focused->children->length <= 1) {
|
|
|
|
|
|
|
|
/* Case that focus is on an workspace with 0/1 children.change its layout */
|
|
|
|
sway_log(L_DEBUG, "changing workspace layout");
|
|
|
|
sway_log(L_DEBUG, "changing workspace layout");
|
|
|
|
focused->layout = layout;
|
|
|
|
focused->layout = layout;
|
|
|
|
}
|
|
|
|
} else if (focused->type != C_WORKSPACE && focused->parent->children->length == 1) {
|
|
|
|
/* Case of no siblings. change parent layout */
|
|
|
|
/* Case of no siblings. change parent layout */
|
|
|
|
else if (focused->type != C_WORKSPACE && focused->parent->children->length == 1) {
|
|
|
|
|
|
|
|
sway_log(L_DEBUG, "changing container layout");
|
|
|
|
sway_log(L_DEBUG, "changing container layout");
|
|
|
|
focused->parent->layout = layout;
|
|
|
|
focused->parent->layout = layout;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
/* regular case where new split container is build around focused container
|
|
|
|
/* regular case where new split container is build around focused container
|
|
|
|
* or in case of workspace, container inherits its children */
|
|
|
|
* or in case of workspace, container inherits its children */
|
|
|
|
else {
|
|
|
|
|
|
|
|
sway_log(L_DEBUG, "Adding new container around current focused container");
|
|
|
|
sway_log(L_DEBUG, "Adding new container around current focused container");
|
|
|
|
swayc_t *parent = new_container(focused, layout);
|
|
|
|
swayc_t *parent = new_container(focused, layout);
|
|
|
|
set_focused_container(focused);
|
|
|
|
set_focused_container(focused);
|
|
|
@ -369,6 +369,7 @@ static bool cmd_split(struct sway_config *config, int argc, char **argv) {
|
|
|
|
if (!checkarg(argc, "split", EXPECTED_EQUAL_TO, 1)) {
|
|
|
|
if (!checkarg(argc, "split", EXPECTED_EQUAL_TO, 1)) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (strcasecmp(argv[0], "v") == 0 || strcasecmp(argv[0], "vertical") == 0) {
|
|
|
|
if (strcasecmp(argv[0], "v") == 0 || strcasecmp(argv[0], "vertical") == 0) {
|
|
|
|
_do_split(config, argc - 1, argv + 1, L_VERT);
|
|
|
|
_do_split(config, argc - 1, argv + 1, L_VERT);
|
|
|
|
} else if (strcasecmp(argv[0], "h") == 0 || strcasecmp(argv[0], "horizontal") == 0) {
|
|
|
|
} else if (strcasecmp(argv[0], "h") == 0 || strcasecmp(argv[0], "horizontal") == 0) {
|
|
|
@ -377,6 +378,7 @@ static bool cmd_split(struct sway_config *config, int argc, char **argv) {
|
|
|
|
sway_log(L_ERROR, "Invalid split command (expected either horiziontal or vertical).");
|
|
|
|
sway_log(L_ERROR, "Invalid split command (expected either horiziontal or vertical).");
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|