ecore_wl2: Add ecore_wl2_surface_flush
authorDerek Foreman <derekf@osg.samsung.com>
Thu, 30 Nov 2017 21:19:17 +0000 (15:19 -0600)
committerDerek Foreman <derekf@osg.samsung.com>
Fri, 1 Dec 2017 16:58:44 +0000 (10:58 -0600)
This removes all buffers from a surface.

src/lib/ecore_wl2/Ecore_Wl2.h
src/lib/ecore_wl2/ecore_wl2_private.h
src/lib/ecore_wl2/ecore_wl2_surface.c

index 5e60313..a348357 100644 (file)
@@ -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
 
index c8865bc..0648bfc 100644 (file)
@@ -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;
 
index 8fcf9c1..cd810d2 100644 (file)
@@ -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;