summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2017-08-14 17:07:31 -0500
committerDerek Foreman <derekf@osg.samsung.com>2017-08-18 14:27:31 -0500
commite3b9fbaed8e5e5f3730d3a8aa406873f8df60744 (patch)
treef241826d5e6388a86ca41ba3e5392cdb886da689
parentccc4ffc80d0ca401dd58fc4fc573ab110f5cbd8e (diff)
downloadefl-e3b9fbaed8e5e5f3730d3a8aa406873f8df60744.tar.gz
wayland: Put Ecore_Wl2_Win instead of wl_surface into the engines
We'll need to track some state in a common way, so attaching it to the window seems like a good idea.
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c10
-rw-r--r--src/modules/evas/engines/wayland_common/Evas_Engine_Wayland.h2
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_engine.c12
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_engine.h2
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_wl_main.c9
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_dmabuf.c2
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_engine.c6
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_outbuf.c5
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_shm.c2
9 files changed, 31 insertions, 19 deletions
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
index ad307edd51..51a55e417b 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
@@ -136,7 +136,7 @@ _ee_display_unset(Ecore_Evas *ee)
if (!einfo) return;
einfo->info.wl_display = NULL;
- einfo->info.wl_surface = NULL;
+ einfo->info.wl2_win = NULL;
wdata = ee->engine.data;
if (!strcmp(ee->driver, "wayland_egl"))
@@ -1663,7 +1663,7 @@ _ecore_evas_wl_common_render_flush_pre(void *data, Evas *evas, void *event EINA_
einfo = (Evas_Engine_Info_Wayland *)evas_engine_info_get(evas);
if (!einfo) return;
- surf = einfo->info.wl_surface;
+ surf = ecore_wl2_window_surface_get(einfo->info.wl2_win);
if (!surf) return;
wdata = ee->engine.data;
@@ -2018,7 +2018,7 @@ _ecore_evas_wl_common_show(Ecore_Evas *ee)
einfo = (Evas_Engine_Info_Wayland *)evas_engine_info_get(ee->evas);
if (einfo)
{
- einfo->info.wl_surface = ecore_wl2_window_surface_get(wdata->win);
+ einfo->info.wl2_win = wdata->win;
einfo->info.hidden = wdata->win->pending.configure; //EINA_FALSE;
einfo->www_avail = !!wdata->win->www_surface;
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
@@ -2147,7 +2147,7 @@ _ee_cb_sync_done(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
ecore_wl2_display_compositor_version_get(wdata->display);
einfo->info.destination_alpha = EINA_TRUE;
einfo->info.rotation = ee->rotation;
- einfo->info.wl_surface = ecore_wl2_window_surface_get(wdata->win);
+ einfo->info.wl2_win = wdata->win;
if (wdata->reset_pending)
{
@@ -2447,7 +2447,7 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, unsigned int parent, i
einfo->info.destination_alpha = EINA_TRUE;
einfo->info.rotation = ee->rotation;
einfo->info.depth = 32;
- einfo->info.wl_surface = ecore_wl2_window_surface_get(wdata->win);
+ einfo->info.wl2_win = wdata->win;
einfo->info.wl_dmabuf = ecore_wl2_display_dmabuf_get(ewd);
einfo->info.wl_shm = ecore_wl2_display_shm_get(ewd);
einfo->info.compositor_version =
diff --git a/src/modules/evas/engines/wayland_common/Evas_Engine_Wayland.h b/src/modules/evas/engines/wayland_common/Evas_Engine_Wayland.h
index 4a3ca6b690..7be7e2e9c9 100644
--- a/src/modules/evas/engines/wayland_common/Evas_Engine_Wayland.h
+++ b/src/modules/evas/engines/wayland_common/Evas_Engine_Wayland.h
@@ -18,7 +18,7 @@ struct _Evas_Engine_Info_Wayland
struct wl_shm *wl_shm;
struct zwp_linux_dmabuf_v1 *wl_dmabuf;
struct wl_display *wl_display;
- struct wl_surface *wl_surface;
+ Ecore_Wl2_Window *wl2_win;
int depth, rotation, edges;
int compositor_version;
Eina_Bool destination_alpha : 1;
diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c
index 02766aaf1d..1e329836d4 100644
--- a/src/modules/evas/engines/wayland_egl/evas_engine.c
+++ b/src/modules/evas/engines/wayland_egl/evas_engine.c
@@ -279,11 +279,13 @@ evgl_eng_native_window_create(void *data)
Render_Engine *re;
Outbuf *ob;
struct wl_egl_window *win;
+ struct wl_surface *wls;
if (!(re = (Render_Engine *)data)) return NULL;
if (!(ob = eng_get_ob(re))) return NULL;
- if (!(win = wl_egl_window_create(ob->info->info.wl_surface, 1, 1)))
+ wls = ecore_wl2_window_surface_get(ob->info->info.wl2_win);
+ if (!(win = wl_egl_window_create(wls, 1, 1)))
{
ERR("Could not create wl_egl window");
return NULL;
@@ -671,6 +673,7 @@ static int
eng_update(void *engine EINA_UNUSED, void *data, void *info, unsigned int w, unsigned int h)
{
Evas_Engine_Info_Wayland *inf = info;
+ struct wl_surface *wls;
Render_Engine *re = data;
Outbuf *ob;
@@ -689,13 +692,14 @@ eng_update(void *engine EINA_UNUSED, void *data, void *info, unsigned int w, uns
return 1;
}
- if (!inf->info.wl_surface && (ob->egl_surface != EGL_NO_SURFACE))
+ wls = ecore_wl2_window_surface_get(inf->info.wl2_win);
+ if (!wls && (ob->egl_surface != EGL_NO_SURFACE))
{
eglDestroySurface(ob->egl_disp, ob->egl_surface);
eglMakeCurrent(ob->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE,
EGL_NO_CONTEXT);
ob->egl_surface = EGL_NO_SURFACE;
- ob->surface = NULL;
+ ob->wl2_win = NULL;
evas_render_engine_software_generic_update(&re->generic.software,
NULL, w, h);
return 1;
@@ -705,7 +709,7 @@ eng_update(void *engine EINA_UNUSED, void *data, void *info, unsigned int w, uns
{
ob->info = inf;
if ((ob->info->info.wl_display != ob->disp) ||
- (ob->info->info.wl_surface != ob->surface) ||
+ (ob->info->info.wl2_win != ob->wl2_win) ||
/* FIXME: comment out below line.
* since there is no place set the info->info.win for now,
* it causes renew the window unnecessarily.
diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.h b/src/modules/evas/engines/wayland_egl/evas_engine.h
index 3d88285b1e..c25e072bce 100644
--- a/src/modules/evas/engines/wayland_egl/evas_engine.h
+++ b/src/modules/evas/engines/wayland_egl/evas_engine.h
@@ -57,7 +57,7 @@ struct _Outbuf
{
struct wl_display *disp;
struct wl_egl_window *win;
- struct wl_surface *surface;
+ Ecore_Wl2_Window *wl2_win;
int w, h;
int depth, screen, rot, alpha;
diff --git a/src/modules/evas/engines/wayland_egl/evas_wl_main.c b/src/modules/evas/engines/wayland_egl/evas_wl_main.c
index 90f3d403bf..9cfd52bba2 100644
--- a/src/modules/evas/engines/wayland_egl/evas_wl_main.c
+++ b/src/modules/evas/engines/wayland_egl/evas_wl_main.c
@@ -29,10 +29,10 @@ eng_window_new(Evas_Engine_Info_Wayland *einfo, int w, int h, Render_Engine_Swap
gw->h = h;
gw->swap_mode = swap_mode;
gw->disp = einfo->info.wl_display;
+ gw->wl2_win = einfo->info.wl2_win;
if (display && (display != gw->disp))
context = EGL_NO_CONTEXT;
display = gw->disp;
- gw->surface = einfo->info.wl_surface;
gw->depth = einfo->info.depth;
gw->alpha = einfo->info.destination_alpha;
gw->rot = einfo->info.rotation;
@@ -277,15 +277,18 @@ eng_window_unsurf(Outbuf *gw)
void
eng_window_resurf(Outbuf *gw)
{
+ struct wl_surface *wls;
+
if (gw->surf) return;
if (getenv("EVAS_GL_INFO")) printf("resurf %p\n", gw);
if ((!gw->w) || (!gw->h)) return;
if (!gw->win)
{
+ wls = ecore_wl2_window_surface_get(gw->wl2_win);
if ((gw->rot == 0) || (gw->rot == 180))
- gw->win = wl_egl_window_create(gw->surface, gw->w, gw->h);
+ gw->win = wl_egl_window_create(wls, gw->w, gw->h);
else if ((gw->rot == 90) || (gw->rot == 270))
- gw->win = wl_egl_window_create(gw->surface, gw->h, gw->w);
+ gw->win = wl_egl_window_create(wls, gw->h, gw->w);
}
gw->egl_surface =
diff --git a/src/modules/evas/engines/wayland_shm/evas_dmabuf.c b/src/modules/evas/engines/wayland_shm/evas_dmabuf.c
index ca253ce609..2bc5e7ba4a 100644
--- a/src/modules/evas/engines/wayland_shm/evas_dmabuf.c
+++ b/src/modules/evas/engines/wayland_shm/evas_dmabuf.c
@@ -788,7 +788,7 @@ _evas_dmabuf_surface_create(Surface *s, int w, int h, int num_buff)
surf->surface = s;
surf->wl_display = s->info->info.wl_display;
surf->dmabuf = s->info->info.wl_dmabuf;
- surf->wl_surface = s->info->info.wl_surface;
+ surf->wl_surface = ecore_wl2_window_surface_get(s->info->info.wl2_win);
surf->alpha = s->info->info.destination_alpha;
surf->compositor_version = s->info->info.compositor_version;
diff --git a/src/modules/evas/engines/wayland_shm/evas_engine.c b/src/modules/evas/engines/wayland_shm/evas_engine.c
index a5f72c50db..14c1ede348 100644
--- a/src/modules/evas/engines/wayland_shm/evas_engine.c
+++ b/src/modules/evas/engines/wayland_shm/evas_engine.c
@@ -175,10 +175,12 @@ eng_update(void *engine, void *data, void *info, unsigned int w, unsigned int h)
{
Evas_Engine_Info_Wayland *einfo = info;
Render_Engine *re = data;
+ struct wl_surface *surf;
- if (!einfo->info.wl_surface) return 0;
+ surf = ecore_wl2_window_surface_get(einfo->info.wl2_win);
+ if (!surf) return 0;
- _evas_outbuf_surface_set(re->generic.ob, einfo->info.wl_shm, einfo->info.wl_dmabuf, einfo->info.wl_surface);
+ _evas_outbuf_surface_set(re->generic.ob, einfo->info.wl_shm, einfo->info.wl_dmabuf, surf);
eng_output_resize(engine, data, w, h);
diff --git a/src/modules/evas/engines/wayland_shm/evas_outbuf.c b/src/modules/evas/engines/wayland_shm/evas_outbuf.c
index b76efadca1..7aed71f450 100644
--- a/src/modules/evas/engines/wayland_shm/evas_outbuf.c
+++ b/src/modules/evas/engines/wayland_shm/evas_outbuf.c
@@ -639,8 +639,11 @@ _evas_outbuf_update_region_free(Outbuf *ob EINA_UNUSED, RGBA_Image *update EINA_
void
_evas_outbuf_redraws_clear(Outbuf *ob)
{
+ struct wl_surface *wls;
+
if (!ob->priv.rect_count) return;
- if (ob->info->info.wl_surface)
+ wls = ecore_wl2_window_surface_get(ob->info->info.wl2_win);
+ if (wls)
ob->surface->funcs.post(ob->surface, ob->priv.rects, ob->priv.rect_count, ob->hidden);
free(ob->priv.rects);
ob->priv.rect_count = 0;
diff --git a/src/modules/evas/engines/wayland_shm/evas_shm.c b/src/modules/evas/engines/wayland_shm/evas_shm.c
index 28feb3fdbd..df08f90dfa 100644
--- a/src/modules/evas/engines/wayland_shm/evas_shm.c
+++ b/src/modules/evas/engines/wayland_shm/evas_shm.c
@@ -596,7 +596,7 @@ _evas_shm_surface_create(Surface *s, int w, int h, int num_buff)
surf->h = h;
surf->disp = s->info->info.wl_display;
surf->shm = s->info->info.wl_shm;
- surf->surface = s->info->info.wl_surface;
+ surf->surface = ecore_wl2_window_surface_get(s->info->info.wl2_win);
surf->num_buff = num_buff;
surf->alpha = s->info->info.destination_alpha;
surf->compositor_version = s->info->info.compositor_version;