commit cd0cdc28aa6578d0a8fb0a27c5dd07052320e734
parent 80ae2a7774457609cbcef0bd3dc6e1a651d9b5a2
Author: taiyu <taiyu.len@gmail.com>
Date: Sat, 15 Aug 2015 08:27:51 -0700
fixed focus
Diffstat:
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/sway/layout.c b/sway/layout.c
@@ -223,16 +223,20 @@ void unfocus_all(swayc_t *container) {
}
void focus_view(swayc_t *view) {
- sway_log(L_DEBUG, "Setting focus to %p", view);
- if (view->type == C_VIEW) {
- wlc_view_set_state(view->handle, WLC_BIT_ACTIVATED, true);
- wlc_view_bring_to_front(view->handle);
- wlc_view_focus(view->handle);
- }
- // Propagete focus up
- while (view != &root_container) {
- view->parent->focused = view;
- view = view->parent;
+ sway_log(L_DEBUG, "Setting focus for %p", view);
+ if (view == &root_container) {
+ // Propegate wayland focus down
+ swayc_t *child = view->focused;
+ while (child && child->type != C_VIEW) {
+ child = child->focused;
+ }
+ if (child) {
+ wlc_view_set_state(child->handle, WLC_BIT_ACTIVATED, true);
+ wlc_view_focus(child->handle);
+ }
+ return;
}
+ view->parent->focused = view;
+ focus_view(view->parent);
}