aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/container.h4
-rw-r--r--sway/commands.c9
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);
}