From 3e61718053a7e2cdd94c64f5613c6bdf28e35c8e Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Wed, 4 Apr 2018 18:52:38 -0400 Subject: try to fix focus-inactive --- sway/input/seat.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'sway/input') diff --git a/sway/input/seat.c b/sway/input/seat.c index 4a99e9eb..078cb8b8 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -467,22 +467,18 @@ struct sway_container *sway_seat_get_focus(struct sway_seat *seat) { struct sway_container *seat_get_focus_by_type(struct sway_seat *seat, struct sway_container *container, enum sway_container_type type) { + if (container->type == C_VIEW || container->children->length == 0) { + return container; + } + struct sway_seat_container *current = NULL; - struct sway_container *parent = NULL; wl_list_for_each(current, &seat->focus_stack, link) { - parent = current->container->parent; - - if (current->container == container && - (type == C_TYPES || container->type == type)) { - return current->container; + if (type != C_TYPES && container->type != type) { + continue; } - while (parent) { - if (parent == container && (type == C_TYPES || - current->container->type == type)) { - return current->container; - } - parent = parent->parent; + if (container_has_child(container, current->container)) { + return current->container; } } -- cgit v1.2.3 From deda37469ad4e21ad86b7c83c7c8a966301b9d5e Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Wed, 4 Apr 2018 22:31:10 -0400 Subject: fix focus child --- sway/input/seat.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'sway/input') diff --git a/sway/input/seat.c b/sway/input/seat.c index 078cb8b8..50134aae 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -123,7 +123,7 @@ static void handle_seat_container_destroy(struct wl_listener *listener, static struct sway_seat_container *seat_container_from_container( struct sway_seat *seat, struct sway_container *con) { - if (con->type < C_WORKSPACE) { + if (con->type == C_ROOT || con->type == C_OUTPUT) { // these don't get seat containers ever return NULL; } @@ -473,7 +473,7 @@ struct sway_container *seat_get_focus_by_type(struct sway_seat *seat, struct sway_seat_container *current = NULL; wl_list_for_each(current, &seat->focus_stack, link) { - if (type != C_TYPES && container->type != type) { + if (current->container->type != type && type != C_TYPES) { continue; } -- cgit v1.2.3