[PATCH][weston] desktop-shell: fix minimization of fullscreen surfaces

Derek Foreman derekf at osg.samsung.com
Wed Sep 23 12:40:54 PDT 2015


Note: this email somehow confused patchwork and generated a new broken
patch entry.  I've deleted that, but replying here won't properly end up
in the old patch's thread...  sigh.

On 20/09/15 12:10 PM, Manuel Bachmann wrote:
> Hi folks,
> 
> Any news on this one ? (https://patchwork.freedesktop.org/patch/46001/)
> 
> Just tried, the problem still shows in latest master (if you fullscreen
> weston-terminal with [F11], and then minimize wih right-click ->
> "Minimize", the screen stays black).

Right, confirmed that this happens, and that your patch fixes it...

> If the implementation not seeming optimal is the root cause, I really
> think it is the best we can achieve with a few lines and while keeping
> the existing model. I am totally open to suggestions, though.
> 
> ---------------------------------
> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
> index f7c928e..073f187 100644
> --- a/desktop-shell/shell.c
> +++ b/desktop-shell/shell.c
> @@ -2667,6 +2667,11 @@  set_minimized(struct weston_surface *surface)
>      weston_layer_entry_remove(&view->layer_link);
>     
> weston_layer_entry_insert(&shsurf->shell->minimized_layer.view_list,
> &view->layer_link);
>  
> +    /* if this surface if fullscreen, we temporarily disable fullscreen
> +     * mode and reposition it to its previous x,y coordinates */
> +    if (shsurf->state.fullscreen)
> +        unset_fullscreen(shsurf);
> +
>
>      drop_focus_state(shsurf->shell, current_ws, view->surface);
>      wl_list_for_each(seat, &shsurf->shell->compositor->seat_list, link) {
>          if (!seat->keyboard)
> @@ -6016,8 +6021,14 @@  switcher_next(struct switcher *switcher)
>          view->alpha = 1.0;
>  
>      shsurf = get_shell_surface(switcher->current);
> -    if (shsurf && shsurf->state.fullscreen)
> -        shsurf->fullscreen.black_view->alpha = 1.0;
> +    if (shsurf && shsurf->state.fullscreen) {
> +        /* A fullscreen surface may not be centered anymore
> +                 * if unset_fullscreen() was called on it, e.g.
> +                 * when minimizing it. Make sure it is again. */
> +        center_on_output(shsurf->view, shsurf->fullscreen_output);
> +        if (shsurf->fullscreen.black_view)
> +            shsurf->fullscreen.black_view->alpha = 1.0;
> +    }

I'm not sure doing this in the switcher is really ok - does it get
display mode changes right if the fullscreen app was in a different mode
than the native mode?

In testing I get segmentation faults if I start a few weston terminals,
set one fullscreen, then minimize it with the right click menu.  Then
hold down meta and hit tab several times and let go.

It seems the compositor's output list has been corrupted somehow.

>  }
>  
>  static void
> 
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> 



More information about the wayland-devel mailing list