<div dir="ltr">Yeah. I'll do a destroy fade out animation in orbital now that this is in.<div><br></div><div>Giulio</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/8/14 Kristian Høgsberg <span dir="ltr"><<a href="mailto:hoegsberg@gmail.com" target="_blank">hoegsberg@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Tue, Aug 13, 2013 at 11:10:14PM +0200, Giulio Camuffo wrote:<br>
> this allows a surface to live on after its resource has been<br>
> destroyed if the ref-count was increased by some code that needs<br>
> to use the surface after the end of its life, like a destroy<br>
> animation.<br>
<br>
</div>That looks fine.  If you're up for it, it would be interesting to see<br>
a window destroy animation for weston that uses this.  I broke the<br>
commit message into a couple of sentences, otherwise applied as is.<br>
<br>
Kristian<br>
<div><div class="h5"><br>
> ---<br>
>  src/compositor.c | 8 ++++++--<br>
>  src/compositor.h | 1 +<br>
>  2 files changed, 7 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/src/compositor.c b/src/compositor.c<br>
> index 3213a7b..8da348a 100644<br>
> --- a/src/compositor.c<br>
> +++ b/src/compositor.c<br>
> @@ -287,6 +287,7 @@ weston_surface_create(struct weston_compositor *compositor)<br>
><br>
>       surface->compositor = compositor;<br>
>       surface->alpha = 1.0;<br>
> +     surface->ref_count = 1;<br>
><br>
>       if (compositor->renderer->create_surface(surface) < 0) {<br>
>               free(surface);<br>
> @@ -1003,11 +1004,14 @@ struct weston_frame_callback {<br>
>  WL_EXPORT void<br>
>  weston_surface_destroy(struct weston_surface *surface)<br>
>  {<br>
> -     wl_signal_emit(&surface->destroy_signal, &surface->resource);<br>
> -<br>
>       struct weston_compositor *compositor = surface->compositor;<br>
>       struct weston_frame_callback *cb, *next;<br>
><br>
> +     if (--surface->ref_count > 0)<br>
> +             return;<br>
> +<br>
> +     wl_signal_emit(&surface->destroy_signal, &surface->resource);<br>
> +<br>
>       assert(wl_list_empty(&surface->geometry.child_list));<br>
>       assert(wl_list_empty(&surface->subsurface_list_pending));<br>
>       assert(wl_list_empty(&surface->subsurface_list));<br>
> diff --git a/src/compositor.h b/src/compositor.h<br>
> index 7600ce3..6db3c61 100644<br>
> --- a/src/compositor.h<br>
> +++ b/src/compositor.h<br>
> @@ -709,6 +709,7 @@ struct weston_surface {<br>
>       struct wl_list layer_link;<br>
>       float alpha;                     /* part of geometry, see below */<br>
>       struct weston_plane *plane;<br>
> +     int32_t ref_count;<br>
><br>
>       void *renderer_state;<br>
><br>
> --<br>
> 1.8.3.4<br>
><br>
</div></div>> _______________________________________________<br>
> wayland-devel mailing list<br>
> <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</blockquote></div><br></div>