aboutsummaryrefslogtreecommitdiff
path: root/sway/layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/layout.c')
-rw-r--r--sway/layout.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/sway/layout.c b/sway/layout.c
index 20b5999c..a6d6fcbb 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -238,15 +238,17 @@ void unfocus_all(swayc_t *container) {
void focus_view(swayc_t *view) {
sway_log(L_DEBUG, "Setting focus for %p", view);
- while (view != &root_container) {
- view->parent->focused = view;
- view = view->parent;
+ swayc_t *c = view;
+ //Set focus from root to view
+ while (c != &root_container) {
+ c->parent->focused = c;
+ c = c->parent;
}
+ //Set output
+ wlc_output_focus(c->focused->handle);
+ //get focus for views focused window
while (view && view->type != C_VIEW) {
view = view->focused;
- if (view && view->type == C_OUTPUT) {
- wlc_output_focus(view->handle);
- }
}
if (view) {
wlc_view_set_state(view->handle, WLC_BIT_ACTIVATED, true);
@@ -254,3 +256,20 @@ void focus_view(swayc_t *view) {
}
}
+void focus_view_for(swayc_t *top, swayc_t *view) {
+ swayc_t *find = view;
+ //Make sure top is a ancestor of view
+ while (find != top) {
+ if (find == &root_container) {
+ return;
+ }
+ find = find->parent;
+ }
+ //Set focus for top to go to view
+ while (view != top) {
+ view->parent->focused = view;
+ view = view->parent;
+ }
+}
+
+