From 9b828939e5147300bef99820180b7c8de3ba260d Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 20 Oct 2018 08:49:51 +1000 Subject: [PATCH] Fix crash when ending tiling drag If the container being dragged has a parent that needs to be reaped, it must be reaped after we've reinserted the dragging container into the tree. During reaping, handle_seat_node_destroy tries to refocus the dragging container which isn't possible while it's detached. --- sway/input/seat.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sway/input/seat.c b/sway/input/seat.c index cffceaae..659ec89b 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -1110,9 +1110,6 @@ static void seat_end_move_tiling(struct sway_seat *seat) { int after = edge != WLR_EDGE_TOP && edge != WLR_EDGE_LEFT; container_detach(con); - if (old_parent) { - container_reap_empty(old_parent); - } // Moving container into empty workspace if (target_node->type == N_WORKSPACE && edge == WLR_EDGE_NONE) { @@ -1135,6 +1132,10 @@ static void seat_end_move_tiling(struct sway_seat *seat) { workspace_insert_tiling(new_ws, con, after); } + if (old_parent) { + container_reap_empty(old_parent); + } + // This is a bit dirty, but we'll set the dimensions to that of a sibling. // I don't think there's any other way to make it consistent without // changing how we auto-size containers.