aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2018-04-18 08:35:28 +1000
committerRyan Dwyer <ryandwyer1@gmail.com>2018-04-18 08:35:28 +1000
commit35ccdd67a89280c1d906ed914d67918cfb382e1f (patch)
tree6800043b2527e9f9baf9dba0f811d6a97a5e2ea3
parent72beae209b03815e39d0aaa11348fa17c8a7bca9 (diff)
downloadsway-35ccdd67a89280c1d906ed914d67918cfb382e1f.tar.xz
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).
-rw-r--r--sway/desktop/output.c10
-rw-r--r--sway/input/cursor.c8
-rw-r--r--sway/tree/layout.c4
3 files changed, 15 insertions, 7 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index 361a92d0..a5f2f71f 100644
--- 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
index 15a61cbf..6d14c12c 100644
--- 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
index d931c4dc..56d4e1d2 100644
--- 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;