aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sway/input/seat.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c
index 3656d6b6..9f44955c 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -413,10 +413,23 @@ void seat_set_focus_warp(struct sway_seat *seat,
if (container) {
struct sway_seat_container *seat_con =
seat_container_from_container(seat, container);
- if (!seat_con) {
+ if (seat_con == NULL) {
return;
}
+ // put all the anscestors of this container on top of the focus stack
+ struct sway_seat_container *parent =
+ seat_container_from_container(seat,
+ seat_con->container->parent);
+ while (parent) {
+ wl_list_remove(&parent->link);
+ wl_list_insert(&seat->focus_stack, &parent->link);
+
+ parent =
+ seat_container_from_container(seat,
+ parent->container->parent);
+ }
+
wl_list_remove(&seat_con->link);
wl_list_insert(&seat->focus_stack, &seat_con->link);