derekf pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=c48ca81026b3c8f5b3a832419099696d0931f0f6
commit c48ca81026b3c8f5b3a832419099696d0931f0f6 Author: Derek Foreman <[email protected]> Date: Thu Nov 30 15:19:17 2017 -0600 ecore_wl2: Add ecore_wl2_surface_flush This removes all buffers from a surface. --- src/lib/ecore_wl2/Ecore_Wl2.h | 1 + src/lib/ecore_wl2/ecore_wl2_private.h | 1 + src/lib/ecore_wl2/ecore_wl2_surface.c | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index 5e60313a8c..a348357b25 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h @@ -2003,6 +2003,7 @@ EAPI void ecore_wl2_surface_reconfigure(Ecore_Wl2_Surface *surface, int w, int h EAPI void *ecore_wl2_surface_data_get(Ecore_Wl2_Surface *surface, int *w, int *h); EAPI int ecore_wl2_surface_assign(Ecore_Wl2_Surface *surface); EAPI void ecore_wl2_surface_post(Ecore_Wl2_Surface *surface, Eina_Rectangle *rects, unsigned int count); +EAPI void ecore_wl2_surface_flush(Ecore_Wl2_Surface *surface); # endif diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h index c8865bcb5a..0648bfcb30 100644 --- a/src/lib/ecore_wl2/ecore_wl2_private.h +++ b/src/lib/ecore_wl2/ecore_wl2_private.h @@ -559,6 +559,7 @@ typedef struct _Ecore_Wl2_Surface void *(*data_get)(Ecore_Wl2_Surface *surface, int *w, int *h); int (*assign)(Ecore_Wl2_Surface *surface); void (*post)(Ecore_Wl2_Surface *surface, Eina_Rectangle *rects, unsigned int count); + void (*flush)(Ecore_Wl2_Surface *surface); } funcs; } Ecore_Wl2_Surface; diff --git a/src/lib/ecore_wl2/ecore_wl2_surface.c b/src/lib/ecore_wl2/ecore_wl2_surface.c index 8fcf9c121c..cd810d21b5 100644 --- a/src/lib/ecore_wl2/ecore_wl2_surface.c +++ b/src/lib/ecore_wl2/ecore_wl2_surface.c @@ -148,6 +148,18 @@ _evas_dmabuf_surface_destroy(Ecore_Wl2_Surface *s) ecore_wl2_buffer_destroy(b); } +static void +_surface_flush(Ecore_Wl2_Surface *surface) +{ + Ecore_Wl2_Buffer *b; + + EINA_SAFETY_ON_NULL_RETURN(surface); + + EINA_LIST_FREE(surface->buffers, b) + ecore_wl2_buffer_destroy(b); +} + + EAPI void ecore_wl2_surface_destroy(Ecore_Wl2_Surface *surface) { @@ -191,6 +203,14 @@ ecore_wl2_surface_post(Ecore_Wl2_Surface *surface, Eina_Rectangle *rects, unsign surface->funcs.post(surface, rects, count); } +EAPI void +ecore_wl2_surface_flush(Ecore_Wl2_Surface *surface) +{ + EINA_SAFETY_ON_NULL_RETURN(surface); + + surface->funcs.flush(surface); +} + EAPI Ecore_Wl2_Surface * ecore_wl2_surface_create(Ecore_Wl2_Window *win, Eina_Bool alpha) { @@ -224,6 +244,7 @@ ecore_wl2_surface_create(Ecore_Wl2_Window *win, Eina_Bool alpha) out->funcs.data_get = _evas_dmabuf_surface_data_get; out->funcs.assign = _evas_dmabuf_surface_assign; out->funcs.post = _evas_dmabuf_surface_post; + out->funcs.flush = _surface_flush; win->wl2_surface = out; return out; --
