if (!ee) return;
wdata = ee->engine.data;
+ if (wdata->anim_callback)
+ wl_callback_destroy(wdata->anim_callback);
if (wdata->win) ecore_wl_window_free(wdata->win);
wdata->win = NULL;
free(wdata);
return rend;
}
+static void
+_anim_cb_animate(void *data, struct wl_callback *callback, uint32_t serial EINA_UNUSED)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata = data;
+
+ if ((wdata->anim_callback) && (callback != wdata->anim_callback)) return;
+
+ wl_callback_destroy(callback);
+ wdata->anim_callback = NULL;
+}
+
+static const struct wl_callback_listener _anim_listener =
+{
+ _anim_cb_animate
+};
+
void
_ecore_evas_wl_common_render_updates(void *data, Evas *evas EINA_UNUSED, void *event)
{
ee->in_async_render = EINA_FALSE;
- _ecore_evas_wl_common_render_updates_process(ee, ev->updated_area);
+ if (_ecore_evas_wl_common_render_updates_process(ee, ev->updated_area))
+ {
+ Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
+
+ wdata->anim_callback = wl_surface_frame(ecore_wl_window_surface_get(wdata->win));
+ wl_callback_add_listener(wdata->anim_callback, &_anim_listener, wdata);
+ }
if (ee->delayed.alpha_changed)
{