aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2015-12-13 08:18:12 -0500
committerDrew DeVault <sir@cmpwn.com>2015-12-13 08:18:12 -0500
commit2f89b7084de2ba97bf9369376ab341f715b47c1a (patch)
treefe4a17c9277a3c2b2491682bd9312d67fd63f1a7 /sway
parentd361ce656d314f24dd34a76387f105b94bc3fb1f (diff)
Correctly handle moving between fullscreen views
If focus would move in an output with a fullscreen view, it always leaves the output. If focus would enter an output with a fullscreen view, it always focuses the fullscreened view.
Diffstat (limited to 'sway')
-rw-r--r--sway/layout.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sway/layout.c b/sway/layout.c
index e89402ed..333c1928 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -579,6 +579,19 @@ swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_directio
// output might border to multiple outputs).
struct wlc_point abs_pos;
get_absolute_center_position(container, &abs_pos);
+
+ if (container->type == C_VIEW && swayc_is_fullscreen(container)) {
+ sway_log(L_DEBUG, "Moving from fullscreen view, skipping to output");
+ container = swayc_parent_by_type(container, C_OUTPUT);
+ get_absolute_center_position(container, &abs_pos);
+ return swayc_adjacent_output(container, dir, &abs_pos, true);
+ }
+
+ if (container->type == C_WORKSPACE && container->fullscreen) {
+ sway_log(L_DEBUG, "Moving to fullscreen view");
+ return container->fullscreen;
+ }
+
while (true) {
// Test if we can even make a difference here
bool can_move = false;