From 0f7936735cfc8224f9926199b7e807e95d86d900 Mon Sep 17 00:00:00 2001
From: emersion <contact@emersion.fr>
Date: Sat, 31 Mar 2018 10:56:49 -0400
Subject: [PATCH] Fix unmanaged views rendering on all outputs

---
 sway/desktop/output.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index c248b29e..24c0bf40 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -243,14 +243,23 @@ static void render_output(struct sway_output *output, struct timespec *when,
 	struct sway_view *view;
 	wl_list_for_each(view, &root_container.sway_root->unmanaged_views,
 			unmanaged_view_link) {
-		if (view->type == SWAY_XWAYLAND_VIEW) {
-			// the only kind of unamanged view right now is xwayland override
-			// redirect
-			int view_x = view->wlr_xwayland_surface->x;
-			int view_y = view->wlr_xwayland_surface->y;
-			render_surface(view->surface, wlr_output, &output->last_frame,
-					view_x, view_y, 0);
+		if (view->type != SWAY_XWAYLAND_VIEW) {
+			continue;
 		}
+
+		const struct wlr_box view_box = {
+			.x = view->wlr_xwayland_surface->x,
+			.y = view->wlr_xwayland_surface->y,
+			.width = view->wlr_xwayland_surface->width,
+			.height = view->wlr_xwayland_surface->height,
+		};
+		struct wlr_box intersection;
+		if (!wlr_box_intersection(&view_box, output_box, &intersection)) {
+			continue;
+		}
+
+		render_surface(view->surface, wlr_output, &output->last_frame,
+			view_box.x - output_box->x, view_box.y - output_box->y, 0);
 	}
 
 	// TODO: Consider revising this when fullscreen windows are supported