desktop-shell: Allow fullscreen windows to mode-switch their output.

Fix desktop-shell's activate() method to only restore the output
mode on the single output on which a shell surface gets activated.

This way toplevel fullscreen surfaces can mode-switch their output
via method WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER and that
temporary mode properly persists until the surface loses its
fullscreen status, but effects like window switching and exposay
still work in the expected way.

v2: Split into a separate patch from original patch
    "Allow restore_output_mode() to work properly.",
    as suggested by Derek Foreman.

Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Cc: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
Mario Kleiner 2015-06-21 21:25:12 +02:00 committed by Pekka Paalanen
parent c8a1ff0ac1
commit 492c12fb8b
1 changed files with 2 additions and 1 deletions

View File

@ -2963,6 +2963,7 @@ shell_configure_fullscreen(struct shell_surface *shsurf)
output->y - surf_y); output->y - surf_y);
break; break;
} else { } else {
weston_log("shell: Can't switch to temporary mode.\n");
restore_output_mode(output); restore_output_mode(output);
center_on_output(shsurf->view, output); center_on_output(shsurf->view, output);
} }
@ -5069,7 +5070,7 @@ activate(struct desktop_shell *shell, struct weston_surface *es,
if (shsurf->state.fullscreen && configure) if (shsurf->state.fullscreen && configure)
shell_configure_fullscreen(shsurf); shell_configure_fullscreen(shsurf);
else else
restore_all_output_modes(shell->compositor); restore_output_mode(shsurf->output);
/* Update the surfaces layer. This brings it to the top of the stacking /* Update the surfaces layer. This brings it to the top of the stacking
* order as appropriate. */ * order as appropriate. */