From d361ce656d314f24dd34a76387f105b94bc3fb1f Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sun, 13 Dec 2015 07:58:00 -0500 Subject: [PATCH] Track the fullscreen view on a workspace swayc_t --- include/container.h | 4 ++++ sway/commands.c | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/include/container.h b/include/container.h index 157b996a..d027f369 100644 --- a/include/container.h +++ b/include/container.h @@ -97,6 +97,10 @@ struct sway_container { * Which of this container's children has focus. */ struct sway_container *focused; + /** + * If this container's children include a fullscreen view, this is that view. + */ + struct sway_container *fullscreen; }; enum visibility_mask { diff --git a/sway/commands.c b/sway/commands.c index 205798ec..74b307e6 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -1349,15 +1349,18 @@ static struct cmd_results *cmd_fullscreen(int argc, char **argv) { return error; } swayc_t *container = get_focused_view(&root_container); + swayc_t *workspace = swayc_parent_by_type(container, C_WORKSPACE); bool current = swayc_is_fullscreen(container); wlc_view_set_state(container->handle, WLC_BIT_FULLSCREEN, !current); // Resize workspace if going from fullscreen -> notfullscreen // otherwise just resize container if (current) { - container = swayc_parent_by_type(container, C_WORKSPACE); + arrange_windows(workspace, -1, -1); + workspace->fullscreen = container; + } else { + arrange_windows(container, -1, -1); + workspace->fullscreen = NULL; } - // Only resize container when going into fullscreen - arrange_windows(container, -1, -1); return cmd_results_new(CMD_SUCCESS, NULL, NULL); }