From a76bbea7c2ce93f46f6922d7a427974ebea36f8c Mon Sep 17 00:00:00 2001 From: ccdunder Date: Wed, 13 Nov 2024 23:11:45 -0800 Subject: [PATCH] Make move_to_container insert at the correct index. --- sway/commands/move.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/sway/commands/move.c b/sway/commands/move.c index 8891514c..407d1ecc 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -256,7 +256,26 @@ static void container_move_to_container(struct sway_container *container, if (destination->view) { container_add_sibling(destination, container, 1); } else { - container_add_child(destination, container); + /* For split containers, we use the currently focused container within it. + * This allows setting marks on, e.g., tabbed containers which will move + * con to a new tab behind the focused tab. */ + sway_log(SWAY_DEBUG, "target is a split container, descending to the currently focused child."); + struct sway_node *focused = seat_get_active_tiling_child( + config->handler_context.seat, &destination->node); + if (!focused || focused == &destination->node) { + // The container has no children + container_add_child(destination, container); + return; + } + struct sway_container *target = focused->sway_container; + int index = container_sibling_index(target) + 1; + if (target->pending.parent) { + container_insert_child(target->pending.parent, container, index); + } else { + // TODO: This branch is unreachable until workspaces can be marked. + // Issue url: https://github.com/swaywm/sway/issues/8474 + workspace_insert_tiling(target->pending.workspace, container, index); + } } if (container->view) {