From 9b828939e5147300bef99820180b7c8de3ba260d Mon Sep 17 00:00:00 2001
From: Ryan Dwyer <ryandwyer1@gmail.com>
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 cffceaaec..659ec89bb 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.