diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2014-05-04 13:47:06 -0700 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2014-05-04 13:47:06 -0700 |
commit | 47792415165888676078eb3eb98ac4b97ba34140 (patch) | |
tree | f5c3511d63d476af0174c6e18d66a64edd9e7669 /desktop-shell | |
parent | d7d71e8d962d7d82f0d1419a163e1fb6e024f749 (diff) | |
download | weston-47792415165888676078eb3eb98ac4b97ba34140.tar.gz |
xwayland: Fix fullscreen mode
With xdg_shell wl_shell starting to diverge in how they work, there's
less shared code in set_fullscreen(). The problem is that the xwayland
window manager calls into set_fulscreen() which now doesn't complete
the fullscreen transition. Add shell_interface_set_fullscreen() for
the shell interface set_fullscreen hook to use.
https://bugs.freedesktop.org/show_bug.cgi?id=78230
Diffstat (limited to 'desktop-shell')
-rw-r--r-- | desktop-shell/shell.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 00922352..a631c629 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2797,6 +2797,19 @@ set_xwayland(struct shell_surface *shsurf, int x, int y, uint32_t flags) shsurf->state_changed = true; } +static void +shell_interface_set_fullscreen(struct shell_surface *shsurf, + uint32_t method, + uint32_t framerate, + struct weston_output *output) +{ + surface_clear_next_states(shsurf); + set_fullscreen(shsurf, method, framerate, output); + + shsurf->next_state.fullscreen = true; + shsurf->state_changed = true; +} + static int shell_interface_move(struct shell_surface *shsurf, struct weston_seat *ws) { @@ -6113,7 +6126,7 @@ module_init(struct weston_compositor *ec, ec->shell_interface.get_primary_view = get_primary_view; ec->shell_interface.set_toplevel = set_toplevel; ec->shell_interface.set_transient = set_transient; - ec->shell_interface.set_fullscreen = set_fullscreen; + ec->shell_interface.set_fullscreen = shell_interface_set_fullscreen; ec->shell_interface.set_xwayland = set_xwayland; ec->shell_interface.move = shell_interface_move; ec->shell_interface.resize = surface_resize; |