diff options
-rw-r--r-- | sway/desktop/transaction.c | 12 | ||||
-rw-r--r-- | sway/tree/container.c | 3 |
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; } |