aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sway/desktop/transaction.c12
-rw-r--r--sway/tree/container.c3
2 files changed, 14 insertions, 1 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c
index 1316a80d..145c5f92 100644
--- a/sway/desktop/transaction.c
+++ b/sway/desktop/transaction.c
@@ -121,7 +121,17 @@ static void copy_pending_state(struct sway_container *container,
struct sway_seat *seat = input_manager_current_seat(input_manager);
state->focused = seat_get_focus(seat) == container;
- if (container->type != C_VIEW) {
+ if (container->type == C_WORKSPACE) {
+ // Set focused_inactive_child to the direct tiling child
+ struct sway_container *focus =
+ seat_get_focus_inactive_tiling(seat, container);
+ if (focus && focus->type > C_WORKSPACE) {
+ while (focus->parent->type != C_WORKSPACE) {
+ focus = focus->parent;
+ }
+ }
+ state->focused_inactive_child = focus;
+ } else if (container->type != C_VIEW) {
state->focused_inactive_child =
seat_get_active_child(seat, container);
}
diff --git a/sway/tree/container.c b/sway/tree/container.c
index ee019098..520b4566 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -173,6 +173,9 @@ struct sway_container *container_reap_empty(struct sway_container *con) {
}
if (con && con->type == C_WORKSPACE) {
workspace_consider_destroy(con);
+ if (con->destroying) {
+ con = con->parent;
+ }
}
return con;
}