commit 35ccdd67a89280c1d906ed914d67918cfb382e1f
parent 72beae209b03815e39d0aaa11348fa17c8a7bca9
Author: Ryan Dwyer <ryandwyer1@gmail.com>
Date: Wed, 18 Apr 2018 08:35:28 +1000
More fullscreen fixes.
* Render fullscreen views without wlr function, which makes popups and
lockscreen work.
* Don't allow input events to surfaces behind fullscreen views.
* Use correct output dimensions (for rotated outputs).
Diffstat:
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
@@ -229,7 +229,11 @@ static void render_container_iterator(struct sway_container *con,
static void render_container(struct sway_output *output,
struct sway_container *con) {
- container_descendants(con, C_VIEW, render_container_iterator, output);
+ if (con->type == C_VIEW) { // Happens if a view is fullscreened
+ render_container_iterator(con, output);
+ } else {
+ container_descendants(con, C_VIEW, render_container_iterator, output);
+ }
}
static struct sway_container *output_get_active_workspace(
@@ -277,10 +281,8 @@ static void render_output(struct sway_output *output, struct timespec *when,
struct sway_container *workspace = output_get_active_workspace(output);
if (workspace->sway_workspace->fullscreen) {
- wlr_output_set_fullscreen_surface(wlr_output,
- workspace->sway_workspace->fullscreen->surface);
+ render_container(output, workspace->sway_workspace->fullscreen->swayc);
} else {
- wlr_output_set_fullscreen_surface(wlr_output, NULL);
render_layer(output,
&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]);
render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]);
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
@@ -12,6 +12,7 @@
#include "sway/layers.h"
#include "sway/output.h"
#include "sway/tree/view.h"
+#include "sway/tree/workspace.h"
#include "wlr-layer-shell-unstable-v1-protocol.h"
static struct wlr_surface *layer_surface_at(struct sway_output *output,
@@ -89,6 +90,13 @@ static struct sway_container *container_at_cursor(struct sway_cursor *cursor,
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))) {
diff --git a/sway/tree/layout.c b/sway/tree/layout.c
@@ -598,10 +598,8 @@ void arrange_windows(struct sway_container *container,
if (container->type == C_WORKSPACE
&& container->sway_workspace->fullscreen) {
- struct wlr_output *wlr_output
- = container->parent->sway_output->wlr_output;
view_configure(container->sway_workspace->fullscreen, 0, 0,
- wlr_output->width, wlr_output->height);
+ container->parent->width, container->parent->height);
}
double x = 0, y = 0;