mirror of
https://github.com/swaywm/sway.git
synced 2024-12-29 00:16:22 +01:00
Remove move_out_of_tabs_stacks
This fixes the following. Create these layouts and run move right: (Initial layout -> expected result -> actual result) * `H[S[unfocused focused] unfocused]` -> `H[S[unfocused] focused unfocused]` -> `H[H[S[unfocused] focused] unfocused]` * `H[S[unfocused focused] V[unfocused]]` -> `H[S[unfocused] V[unfocused focused]]` -> `H[H[S[unfocused] focused] V[unfocused]]` move_out_of_tabs_stacks was originally made to allow views to move out of the tabbed/stacked container in the parallel direction, but at some point this has started working using the regular logic.
This commit is contained in:
parent
68395f34f6
commit
93624599b3
1 changed files with 2 additions and 47 deletions
|
@ -270,39 +270,6 @@ static void workspace_rejigger(struct sway_workspace *ws,
|
|||
child->width = child->height = 0;
|
||||
}
|
||||
|
||||
static void move_out_of_tabs_stacks(struct sway_container *container,
|
||||
struct sway_container *current, enum movement_direction move_dir,
|
||||
int offs) {
|
||||
enum sway_container_layout layout = move_dir ==
|
||||
MOVE_LEFT || move_dir == MOVE_RIGHT ? L_HORIZ : L_VERT;
|
||||
list_t *siblings = container_get_siblings(container);
|
||||
if (container == current && siblings->length == 1) {
|
||||
wlr_log(WLR_DEBUG, "Changing layout of parent");
|
||||
if (container->parent) {
|
||||
container->parent->layout = layout;
|
||||
container_update_representation(container);
|
||||
} else {
|
||||
container->workspace->layout = layout;
|
||||
workspace_update_representation(container->workspace);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
wlr_log(WLR_DEBUG, "Moving out of tab/stack into a split");
|
||||
if (current->parent) {
|
||||
struct sway_container *new_parent =
|
||||
container_split(current->parent, layout);
|
||||
container_insert_child(new_parent, container, offs < 0 ? 0 : 1);
|
||||
container_reap_empty(new_parent);
|
||||
container_flatten(new_parent);
|
||||
} else {
|
||||
// Changing a workspace
|
||||
struct sway_workspace *workspace = container->workspace;
|
||||
workspace_split(workspace, layout);
|
||||
workspace_insert_tiling(workspace, container, offs < 0 ? 0 : 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Returns true if moved
|
||||
static bool container_move_in_direction(struct sway_container *container,
|
||||
enum movement_direction move_dir) {
|
||||
|
@ -334,7 +301,6 @@ static bool container_move_in_direction(struct sway_container *container,
|
|||
int offs = move_dir == MOVE_LEFT || move_dir == MOVE_UP ? -1 : 1;
|
||||
|
||||
while (current) {
|
||||
struct sway_container *parent = current->parent;
|
||||
list_t *siblings = container_get_siblings(current);
|
||||
enum sway_container_layout layout = container_parent_layout(current);
|
||||
int index = list_find(siblings, current);
|
||||
|
@ -343,15 +309,8 @@ static bool container_move_in_direction(struct sway_container *container,
|
|||
if (is_parallel(layout, move_dir)) {
|
||||
if (desired == -1 || desired == siblings->length) {
|
||||
if (current->parent == container->parent) {
|
||||
if (!(parent && parent->is_fullscreen) &&
|
||||
(layout == L_TABBED || layout == L_STACKED)) {
|
||||
move_out_of_tabs_stacks(container, current,
|
||||
move_dir, offs);
|
||||
return true;
|
||||
} else {
|
||||
current = current->parent;
|
||||
continue;
|
||||
}
|
||||
current = current->parent;
|
||||
continue;
|
||||
} else {
|
||||
// Special case
|
||||
if (current->parent) {
|
||||
|
@ -369,10 +328,6 @@ static bool container_move_in_direction(struct sway_container *container,
|
|||
siblings->items[desired], move_dir);
|
||||
return true;
|
||||
}
|
||||
} else if (!(parent && parent->is_fullscreen) &&
|
||||
(layout == L_TABBED || layout == L_STACKED)) {
|
||||
move_out_of_tabs_stacks(container, current, move_dir, offs);
|
||||
return true;
|
||||
}
|
||||
|
||||
current = current->parent;
|
||||
|
|
Loading…
Reference in a new issue