diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-04-18 08:35:28 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-04-18 08:35:28 +1000 |
commit | 35ccdd67a89280c1d906ed914d67918cfb382e1f (patch) | |
tree | 6800043b2527e9f9baf9dba0f811d6a97a5e2ea3 | |
parent | 72beae209b03815e39d0aaa11348fa17c8a7bca9 (diff) | |
download | sway-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.c | 10 | ||||
-rw-r--r-- | sway/input/cursor.c | 8 | ||||
-rw-r--r-- | sway/tree/layout.c | 4 |
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; |