ecore-wayland: Fix issue of efl/elm apps not setting opaque & input regions

Summary: Since evas handles surface damage & surface commit roles now,
we no longer are calling ecore_wl_commit inside ecore_evas. This was
causing the surface opaque & input regions to no longer be set. We fix
that here by creating and setting opaque/input regions whenever the
appropriate ecore_wl region functions are called.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2015-04-27 13:00:07 -04:00
parent f93cc6fe3b
commit f03cf3dba3
2 changed files with 23 additions and 40 deletions

View File

@ -117,9 +117,6 @@ struct _Ecore_Wl_Window
int ivi_surface_id;
# endif
struct wl_region *opaque_region;
struct wl_region *input_region;
struct xdg_surface *xdg_surface;
struct xdg_popup *xdg_popup;
Eina_Bool focused : 1;

View File

@ -99,12 +99,6 @@ ecore_wl_window_new(Ecore_Wl_Window *parent, int x, int y, int w, int h, int buf
win->opaque.w = w;
win->opaque.h = h;
win->opaque_region =
wl_compositor_create_region(_ecore_wl_compositor_get());
win->input_region =
wl_compositor_create_region(_ecore_wl_compositor_get());
win->title = NULL;
win->class_name = NULL;
@ -140,9 +134,6 @@ ecore_wl_window_free(Ecore_Wl_Window *win)
if (win->subsurfs) _ecore_wl_subsurfs_del_all(win);
if (win->input_region) wl_region_destroy(win->input_region);
if (win->opaque_region) wl_region_destroy(win->opaque_region);
#ifdef USE_IVI_SHELL
if (win->ivi_surface) ivi_surface_destroy(win->ivi_surface);
win->ivi_surface = NULL;
@ -240,18 +231,6 @@ ecore_wl_window_commit(Ecore_Wl_Window *win)
if (!win) return;
if (win->opaque_region)
{
if (win->surface)
wl_surface_set_opaque_region(win->surface, win->opaque_region);
}
if (win->input_region)
{
if (win->surface)
wl_surface_set_input_region(win->surface, win->input_region);
}
if ((win->surface) && (win->has_buffer))
wl_surface_commit(win->surface);
}
@ -834,21 +813,29 @@ ecore_wl_window_input_region_set(Ecore_Wl_Window *win, int x, int y, int w, int
if (win->type != ECORE_WL_WINDOW_TYPE_DND)
{
struct wl_region *region;
region = wl_compositor_create_region(_ecore_wl_compositor_get());
if (!region) return;
switch (win->rotation)
{
case 0:
wl_region_add(win->input_region, x, y, w, h);
wl_region_add(region, x, y, w, h);
break;
case 180:
wl_region_add(win->input_region, x, x + y, w, h);
wl_region_add(region, x, x + y, w, h);
break;
case 90:
wl_region_add(win->input_region, y, x, h, w);
wl_region_add(region, y, x, h, w);
break;
case 270:
wl_region_add(win->input_region, x + y, x, h, w);
wl_region_add(region, x + y, x, h, w);
break;
}
wl_surface_set_input_region(win->surface, region);
wl_region_destroy(region);
}
}
@ -856,6 +843,8 @@ ecore_wl_window_input_region_set(Ecore_Wl_Window *win, int x, int y, int w, int
EAPI void
ecore_wl_window_opaque_region_set(Ecore_Wl_Window *win, int x, int y, int w, int h)
{
struct wl_region *region;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
if (!win) return;
@ -867,30 +856,27 @@ ecore_wl_window_opaque_region_set(Ecore_Wl_Window *win, int x, int y, int w, int
if ((win->transparent) || (win->alpha)) return;
region = wl_compositor_create_region(_ecore_wl_compositor_get());
if (!region) return;
switch (win->rotation)
{
case 0:
wl_region_add(win->opaque_region, x, y, w, h);
wl_region_add(region, x, y, w, h);
break;
case 180:
wl_region_add(win->opaque_region, x, x + y, w, h);
wl_region_add(region, x, x + y, w, h);
break;
case 90:
wl_region_add(win->opaque_region, y, x, h, w);
wl_region_add(region, y, x, h, w);
break;
case 270:
wl_region_add(win->opaque_region, x + y, x, h, w);
wl_region_add(region, x + y, x, h, w);
break;
}
/* if ((w > 0) && (h > 0)) */
/* { */
/* if ((win->opaque.w == w) && (win->opaque.h == h)) */
/* return; */
/* win->opaque.w = w; */
/* win->opaque.h = h; */
/* } */
wl_surface_set_opaque_region(win->surface, region);
wl_region_destroy(region);
}
/* @since 1.8 */