Initialize output->native_mode with the initially chosen mode for an output, so restore_output_mode() has something to work with and can switch back from temporary selected modes to the outputs native mode. Before, this was a no-op.
This allows an output to switch back to its default mode if a former toplevel fullscreen shell surface created via method WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER gets destroyed, or demoted to non-fullscreen, or if modesetting on the output failed. Also fix desktop-shell's activate method to only restore output mode on the output on which a shell surface gets activated. This way fullscreen windows can mode switch their output, but window switching and exposay still works in the expected way. Signed-off-by: Mario Kleiner <mario.kleiner...@gmail.com> --- desktop-shell/shell.c | 3 ++- src/compositor-drm.c | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 7d0e403..68846ed 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2962,6 +2962,7 @@ shell_configure_fullscreen(struct shell_surface *shsurf) output->y - surf_y); break; } else { + weston_log("shell: Can't switch to temporary mode.\n"); restore_output_mode(output); center_on_output(shsurf->view, output); } @@ -5089,7 +5090,7 @@ activate(struct desktop_shell *shell, struct weston_surface *es, if (shsurf->state.fullscreen && configure) shell_configure_fullscreen(shsurf); else - restore_all_output_modes(shell->compositor); + restore_output_mode(shsurf->output); /* Update the surface’s layer. This brings it to the top of the stacking * order as appropriate. */ diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 4a7baa1..9ddb6d6 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -2209,6 +2209,10 @@ create_output_for_connector(struct drm_compositor *ec, connector->count_modes == 0 ? ", built-in" : ""); + /* Initialize output->native_mode field, so restore_output_mode() works. */ + weston_output_mode_set_native(&output->base, output->base.current_mode, + output->base.current_scale); + return 0; err_output: -- 1.9.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel