From 2f89b7084de2ba97bf9369376ab341f715b47c1a Mon Sep 17 00:00:00 2001
From: Drew DeVault <sir@cmpwn.com>
Date: Sun, 13 Dec 2015 08:18:12 -0500
Subject: [PATCH] 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.
---
 sway/layout.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/sway/layout.c b/sway/layout.c
index e89402ede..333c1928d 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;