diff --git a/sway/commands.c b/sway/commands.c index b7794087..cee8bf84 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -224,7 +224,8 @@ int cmd_fullscreen(struct sway_config *config, int argc, char **argv) { } swayc_t *container = get_focused_container(&root_container); - wlc_view_set_state(container->handle, WLC_BIT_FULLSCREEN, true); + bool current = (wlc_view_get_state(container->handle) & WLC_BIT_FULLSCREEN) > 0; + wlc_view_set_state(container->handle, WLC_BIT_FULLSCREEN, !current); arrange_windows(container, -1, -1); return 1; diff --git a/sway/layout.c b/sway/layout.c index affcb83e..faf25c8c 100644 --- a/sway/layout.c +++ b/sway/layout.c @@ -41,29 +41,6 @@ void arrange_windows(swayc_t *container, int width, int height) { } return; case C_VIEW: - // If the view is fullscreen, we need to tell wlc to draw it as such - if (wlc_view_get_state(container->handle) & WLC_BIT_FULLSCREEN) { - swayc_t *parent = container; - do { - parent = parent->parent; - } while(parent->type != C_OUTPUT); - - sway_log(L_DEBUG, "res %d %d", parent->width, parent->height); - struct wlc_geometry geometry = { - .origin = { - .x = 0, - .y = 0 - }, - .size = { - .w = parent->width, - .h = parent->height - } - }; - - wlc_view_set_geometry(container->handle, &geometry); - return; - } - sway_log(L_DEBUG, "Setting view to %d x %d @ %d, %d", width, height, container->x, container->y); struct wlc_geometry geometry = { .origin = { @@ -75,9 +52,21 @@ void arrange_windows(swayc_t *container, int width, int height) { .h = height } }; - wlc_view_set_geometry(container->handle, &geometry); - container->width = width; - container->height = height; + if (wlc_view_get_state(container->handle) & WLC_BIT_FULLSCREEN) { + swayc_t *parent = container; + while(parent->type != C_OUTPUT) { + parent = parent->parent; + } + geometry.origin.x = 0; + geometry.origin.y = 0; + geometry.size.w = parent->width; + geometry.size.h = parent->height; + wlc_view_set_geometry(container->handle, &geometry); + } else { + wlc_view_set_geometry(container->handle, &geometry); + container->width = width; + container->height = height; + } return; default: container->width = width;