diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index a5f2f71f..299b57f1 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -280,11 +280,11 @@ static void render_output(struct sway_output *output, struct timespec *when,
 
 	struct sway_container *workspace = output_get_active_workspace(output);
 
+	render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]);
+
 	if (workspace->sway_workspace->fullscreen) {
 		render_container(output, workspace->sway_workspace->fullscreen->swayc);
 	} else {
-		render_layer(output,
-				&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]);
 		render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]);
 
 		render_container(output, workspace);
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index 6d14c12c..a19f0752 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -84,19 +84,22 @@ static struct sway_container *container_at_cursor(struct sway_cursor *cursor,
 				ox, oy, sx, sy))) {
 		return ws;
 	}
+	if (ws->sway_workspace->fullscreen) {
+		struct wlr_surface *wlr_surface = ws->sway_workspace->fullscreen->surface;
+		if (wlr_surface_point_accepts_input(wlr_surface, ox, oy)) {
+			*sx = ox;
+			*sy = oy;
+			*surface = wlr_surface;
+			return ws->sway_workspace->fullscreen->swayc;
+		}
+		return NULL;
+	}
 	if ((*surface = layer_surface_at(output,
 				&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP],
 				ox, oy, sx, sy))) {
 		return ws;
 	}
 
-	if (ws->sway_workspace->fullscreen) {
-		*sx = ox;
-		*sy = oy;
-		*surface = ws->sway_workspace->fullscreen->surface;
-		return ws->sway_workspace->fullscreen->swayc;
-	}
-
 	struct sway_container *c;
 	if ((c = container_at(ws, cursor->cursor->x, cursor->cursor->y,
 					surface, sx, sy))) {