commit 103a302fa409cf9ba88f5163280d73fbf886bca2
parent a66fd74a547f1d6fa6b752314ddd674eb44b6da7
Author: Brian Ashworth <bosrsf04@gmail.com>
Date: Mon, 28 May 2018 21:37:29 -0400
Fix moving out of a tabbed/stacked workspace
Diffstat:
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/sway/tree/layout.c b/sway/tree/layout.c
@@ -313,15 +313,24 @@ static void move_out_of_tabs_stacks(struct sway_container *container,
struct sway_container *current, enum movement_direction move_dir,
int offs) {
wlr_log(L_DEBUG, "Moving out of tab/stack into a split");
+ bool is_workspace = current->parent->type == C_WORKSPACE;
struct sway_container *old_parent = current->parent->parent;
struct sway_container *new_parent = container_split(current->parent,
move_dir == MOVE_LEFT || move_dir == MOVE_RIGHT ? L_HORIZ : L_VERT);
- container_insert_child(new_parent, container, offs < 0 ? 0 : 1);
- container_reap_empty_recursive(new_parent->parent);
- container_flatten(new_parent->parent);
- wl_signal_emit(¤t->events.reparent, old_parent);
+ if (is_workspace) {
+ container_insert_child(new_parent->parent, container, offs < 0 ? 0 : 1);
+ } else {
+ container_insert_child(new_parent, container, offs < 0 ? 0 : 1);
+ container_reap_empty_recursive(new_parent->parent);
+ container_flatten(new_parent->parent);
+ }
+ wl_signal_emit(&container->events.reparent, old_parent);
container_create_notify(new_parent);
- arrange_children_of(new_parent);
+ if (is_workspace) {
+ arrange_workspace(new_parent->parent);
+ } else {
+ arrange_children_of(new_parent);
+ }
}
void container_move(struct sway_container *container,