When maximized or fullscreen window is on destroyed output, compositor can't change these windows to normal window without notify client, otherwise maximize or F11 buttion lose its effect after output unplug.
Instead we keep these window as maximized or fullscreen, just change it's size to target output. Signed-off-by: Xiong Zhang <[email protected]> --- desktop-shell/shell.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 9ecd15a..c5d722a 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2307,7 +2307,8 @@ set_fullscreen(struct shell_surface *shsurf, shsurf->type = SHELL_SURFACE_TOPLEVEL; /* Save shsurf's gemometry and size.*/ - set_full_output(shsurf); + if (!shsurf->saved_size_valid) + set_full_output(shsurf); shsurf->client->send_configure(shsurf->surface, 0, shsurf->output->width, @@ -2430,7 +2431,8 @@ set_maximized(struct shell_surface *shsurf, shsurf->type = SHELL_SURFACE_TOPLEVEL; /* Save shsurf's geometry and size.*/ - set_full_output(shsurf); + if (!shsurf->saved_size_valid) + set_full_output(shsurf); shell = shell_surface_get_shell(shsurf); panel_height = get_output_panel_height(shell, shsurf->output); @@ -5529,6 +5531,8 @@ shell_reposition_view_on_output_destroy(struct weston_view *view) x = first_output->x + first_output->width / 4; y = first_output->y + first_output->height / 4; + + output = first_output; } weston_view_set_position(view, x, y); @@ -5537,9 +5541,23 @@ shell_reposition_view_on_output_destroy(struct weston_view *view) if (shsurf) { shsurf->saved_position_valid = false; - shsurf->next_state.maximized = false; - shsurf->next_state.fullscreen = false; - shsurf->state_changed = true; + + /* Resize maxmized window to target output. */ + if (shsurf->state.maximized) + set_maximized(shsurf, output); + + /* Resize fullscreen window to target output. */ + if (shsurf->state.fullscreen) { + weston_surface_destroy(shsurf->fullscreen.black_view->surface); + shsurf->fullscreen.black_view = NULL; + + set_fullscreen(shsurf, + shsurf->fullscreen.type, + shsurf->fullscreen.framerate, + output); + } + + shsurf->state_changed = false; } } -- 1.8.3.2 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
