diff options
Diffstat (limited to 'sway/tree/view.c')
-rw-r--r-- | sway/tree/view.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c index fa27ec36..b92c7099 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -91,13 +91,29 @@ void view_set_fullscreen(struct sway_view *view, bool fullscreen) { | |||
91 | view->is_fullscreen = fullscreen; | 91 | view->is_fullscreen = fullscreen; |
92 | 92 | ||
93 | if (fullscreen) { | 93 | if (fullscreen) { |
94 | if (workspace->sway_workspace->fullscreen) { | ||
95 | view_set_fullscreen(workspace->sway_workspace->fullscreen, false); | ||
96 | } | ||
94 | workspace->sway_workspace->fullscreen = view; | 97 | workspace->sway_workspace->fullscreen = view; |
95 | view_configure(view, 0, 0, output->wlr_output->width, output->wlr_output->height); | 98 | |
99 | struct sway_seat *seat; | ||
100 | struct sway_container *focus, *focus_ws; | ||
101 | wl_list_for_each(seat, &input_manager->seats, link) { | ||
102 | focus = seat_get_focus(seat); | ||
103 | focus_ws = focus; | ||
104 | if (focus_ws->type != C_WORKSPACE) { | ||
105 | focus_ws = container_parent(focus_ws, C_WORKSPACE); | ||
106 | } | ||
107 | seat_set_focus(seat, view->swayc); | ||
108 | if (focus_ws != workspace) { | ||
109 | seat_set_focus(seat, focus); | ||
110 | } | ||
111 | } | ||
96 | } else { | 112 | } else { |
97 | workspace->sway_workspace->fullscreen = NULL; | 113 | workspace->sway_workspace->fullscreen = NULL; |
98 | arrange_windows(workspace, -1, -1); | ||
99 | } | 114 | } |
100 | 115 | ||
116 | arrange_windows(workspace, -1, -1); | ||
101 | output_damage_whole(output); | 117 | output_damage_whole(output); |
102 | 118 | ||
103 | ipc_event_window(view->swayc, "fullscreen_mode"); | 119 | ipc_event_window(view->swayc, "fullscreen_mode"); |