# include "config.h"
#endif
-#define LOGFNS 1
+//#define LOGFNS 1
#ifdef LOGFNS
# include <stdio.h>
static void _ecore_evas_wl_iconified_set(Ecore_Evas *ee, int iconify);
static void _ecore_evas_wl_maximized_set(Ecore_Evas *ee, int max);
static void _ecore_evas_wl_fullscreen_set(Ecore_Evas *ee, int full);
+static void _ecore_evas_wl_ignore_events_set(Ecore_Evas *ee, int ignore);
+static void _ecore_evas_wl_alpha_set(Ecore_Evas *ee, int alpha);
+static void _ecore_evas_wl_transparent_set(Ecore_Evas *ee, int transparent);
static int _ecore_evas_wl_render(Ecore_Evas *ee);
static void _ecore_evas_wl_screen_geometry_get(const Ecore_Evas *ee __UNUSED__, int *x, int *y, int *w, int *h);
NULL, // func avoid_damage set
NULL, // func withdrawn set
NULL, // func sticky set
- NULL, // func ignore_events set
- NULL, // func alpha set
- NULL, // func transparent set
+ _ecore_evas_wl_ignore_events_set,
+ _ecore_evas_wl_alpha_set,
+ _ecore_evas_wl_transparent_set,
NULL,
NULL,
NULL,
ee->prop.request_pos = 0;
ee->prop.sticky = 0;
ee->prop.draw_frame = frame;
+ ee->alpha = EINA_FALSE;
ee->evas = evas_new();
evas_data_attach_set(ee->evas, ee);
if (parent)
p = ecore_wl_window_find(parent);
+ /* FIXME: Get if parent is alpha, and set */
+
ee->engine.wl.parent = p;
ee->engine.wl.win =
ecore_wl_window_new(p, x, y, w, h, ECORE_WL_WINDOW_BUFFER_TYPE_EGL_WINDOW);
if ((einfo = (Evas_Engine_Info_Wayland_Egl *)evas_engine_info_get(ee->evas)))
{
einfo->info.display = ecore_wl_display_get();
+ einfo->info.destination_alpha = EINA_FALSE;
einfo->info.rotation = ee->rotation;
if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
{
if ((!ee) || (ee->visible)) return;
if (ee->engine.wl.win)
- ecore_wl_window_show(ee->engine.wl.win);
+ {
+ ecore_wl_window_show(ee->engine.wl.win);
+ ecore_wl_flush();
+ }
einfo = (Evas_Engine_Info_Wayland_Egl *)evas_engine_info_get(ee->evas);
if (!einfo)
ERR("Failed to get Evas Engine Info for '%s'", ee->driver);
return;
}
+
einfo->info.surface = ecore_wl_window_surface_get(ee->engine.wl.win);
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_object_resize(ee->engine.wl.frame, ee->w, ee->h);
}
- ecore_wl_flush();
-
/* ecore_wl_window_buffer_attach(ee->engine.wl.win, ee->engine.wl.buffer, 0, 0); */
ee->visible = 1;
if ((!ee) || (!ee->visible)) return;
- if (ee->engine.wl.win) ecore_wl_window_hide(ee->engine.wl.win);
+ if (ee->engine.wl.win)
+ {
+ ecore_wl_window_hide(ee->engine.wl.win);
+ ecore_wl_flush();
+ }
einfo = (Evas_Engine_Info_Wayland_Egl *)evas_engine_info_get(ee->evas);
- if ((einfo) && (einfo->info.surface))
+ if (einfo)
{
einfo->info.surface = NULL;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
ecore_wl_window_fullscreen_set(ee->engine.wl.win, full);
}
+static void
+_ecore_evas_wl_ignore_events_set(Ecore_Evas *ee, int ignore)
+{
+ LOGFN(__FILE__, __LINE__, __FUNCTION__);
+
+ if (!ee) return;
+ ee->ignore_events = ignore;
+ /* NB: Hmmm, may need to pass this to ecore_wl_window in the future */
+}
+
+static void
+_ecore_evas_wl_alpha_set(Ecore_Evas *ee, int alpha)
+{
+ Evas_Engine_Info_Wayland_Egl *einfo;
+
+ LOGFN(__FILE__, __LINE__, __FUNCTION__);
+
+ if (!ee) return;
+ if ((ee->alpha == alpha)) return;
+ ee->alpha = alpha;
+ if ((einfo = (Evas_Engine_Info_Wayland_Egl *)evas_engine_info_get(ee->evas)))
+ {
+ einfo->info.destination_alpha = alpha;
+ if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
+ ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
+ evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
+ }
+}
+
+static void
+_ecore_evas_wl_transparent_set(Ecore_Evas *ee, int transparent)
+{
+ Evas_Engine_Info_Wayland_Egl *einfo;
+
+ LOGFN(__FILE__, __LINE__, __FUNCTION__);
+
+ if (!ee) return;
+ if ((ee->transparent == transparent)) return;
+ ee->transparent = transparent;
+ if (!ee->visible) return;
+ if ((einfo = (Evas_Engine_Info_Wayland_Egl *)evas_engine_info_get(ee->evas)))
+ {
+ einfo->info.destination_alpha = transparent;
+ if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
+ ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
+ evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
+ }
+}
+
static int
_ecore_evas_wl_render(Ecore_Evas *ee)
{