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;
 

-- 


Reply via email to