This patch series fixes https://bugs.freedesktop.org/show_bug.cgi?id=77347 for 
me

U. Artie Eoff

> -----Original Message-----
> From: wayland-devel [mailto:wayland-devel-boun...@lists.freedesktop.org] On 
> Behalf Of Ander Conselvan de Oliveira
> Sent: Monday, April 14, 2014 5:48 AM
> To: wayland-devel@lists.freedesktop.org
> Cc: Conselvan De Oliveira, Ander
> Subject: [PATCH weston 3/3] shell: Destroy a previous input panel animation 
> when showing it again
> 
> From: Ander Conselvan de Oliveira <ander.conselvan.de.olive...@intel.com>
> 
> It is possible that an input panel will be shown quickly, hidden and
> shown again, before the animation for the first appeareance finished.
> In that case, another animation would be created and the effect of the
> two combined could cause the panel to not appear in the screen.
> 
> This patch fixes this by keeping a reference to the previous animation
> and deleting it when a new one is created.
> ---
>  desktop-shell/input-panel.c | 48 
> ++++++++++++++++++++++++++++++++-------------
>  1 file changed, 34 insertions(+), 14 deletions(-)
> 
> diff --git a/desktop-shell/input-panel.c b/desktop-shell/input-panel.c
> index 12fe686..601b289 100644
> --- a/desktop-shell/input-panel.c
> +++ b/desktop-shell/input-panel.c
> @@ -43,11 +43,41 @@ struct input_panel_surface {
>       struct weston_view *view;
>       struct wl_listener surface_destroy_listener;
> 
> +     struct weston_view_animation *anim;
> +
>       struct weston_output *output;
>       uint32_t panel;
>  };
> 
>  static void
> +input_panel_slide_done(struct weston_view_animation *animation, void *data)
> +{
> +     struct input_panel_surface *ipsurf = data;
> +
> +     ipsurf->anim = NULL;
> +}
> +
> +static void
> +show_input_panel_surface(struct input_panel_surface *ipsurf)
> +{
> +     struct desktop_shell *shell = ipsurf->shell;
> +
> +     wl_list_insert(&shell->input_panel_layer.view_list,
> +                    &ipsurf->view->layer_link);
> +     weston_view_geometry_dirty(ipsurf->view);
> +     weston_view_update_transform(ipsurf->view);
> +     weston_surface_damage(ipsurf->surface);
> +
> +     if (ipsurf->anim)
> +             weston_view_animation_destroy(ipsurf->anim);
> +
> +     ipsurf->anim =
> +             weston_slide_run(ipsurf->view,
> +                              ipsurf->surface->height * 0.9, 0,
> +                              input_panel_slide_done, ipsurf);
> +}
> +
> +static void
>  show_input_panels(struct wl_listener *listener, void *data)
>  {
>       struct desktop_shell *shell =
> @@ -70,13 +100,8 @@ show_input_panels(struct wl_listener *listener, void 
> *data)
>                             &shell->input_panel.surfaces, link) {
>               if (ipsurf->surface->width == 0)
>                       continue;
> -             wl_list_insert(&shell->input_panel_layer.view_list,
> -                            &ipsurf->view->layer_link);
> -             weston_view_geometry_dirty(ipsurf->view);
> -             weston_view_update_transform(ipsurf->view);
> -             weston_surface_damage(ipsurf->surface);
> -             weston_slide_run(ipsurf->view, ipsurf->surface->height * 0.9,
> -                              0, NULL, NULL);
> +
> +             show_input_panel_surface(ipsurf);
>       }
>  }
> 
> @@ -135,13 +160,8 @@ input_panel_configure(struct weston_surface *surface, 
> int32_t sx, int32_t sy)
> 
>       weston_view_set_position(ip_surface->view, x, y);
> 
> -     if (!weston_surface_is_mapped(surface) && shell->showing_input_panels) {
> -             wl_list_insert(&shell->input_panel_layer.view_list,
> -                            &ip_surface->view->layer_link);
> -             weston_view_update_transform(ip_surface->view);
> -             weston_surface_damage(surface);
> -             weston_slide_run(ip_surface->view, 
> ip_surface->view->surface->height * 0.9, 0, NULL, NULL);
> -     }
> +     if (!weston_surface_is_mapped(surface) && shell->showing_input_panels)
> +             show_input_panel_surface(ip_surface);
>  }
> 
>  static void
> --
> 1.8.3.2
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to