return EINA_TRUE;
}
-static void
-_e_video_hwc_render_job(void *data)
+static Eina_Bool
+_e_video_hwc_idle_enterer(void *data)
{
E_Video_Hwc *evh;
E_Client *topmost;
Eina_Bool render_fail = EINA_FALSE;
evh = data;
- evh->render.job = NULL;
if (e_object_is_del(E_OBJECT(evh->ec)))
- return;
+ goto end;
if (evh->render.map)
{
evh->backend.destroy(evh);
}
}
+
+end:
+ /* The idle enterer will get deleted as a result of returning
+ * ECORE_CALLBACK_CANCEL. */
+ evh->render.idle_enterer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
}
static void
_e_video_hwc_render_queue(E_Video_Hwc *evh)
{
- if (evh->render.job)
- ecore_job_del(evh->render.job);
+ if (evh->render.idle_enterer)
+ return;
- evh->render.job = ecore_job_add(_e_video_hwc_render_job, evh);
+ /* The reason that ecore_idle_enterer_*before*_add is used here is to give
+ * a chance to deal with its jobs prior to the hwc output dealing with its
+ * job with idle entererer as well. */
+ evh->render.idle_enterer =
+ ecore_idle_enterer_before_add(_e_video_hwc_idle_enterer, evh);
}
static void
_e_video_hwc_client_event_deinit(evh);
- E_FREE_FUNC(evh->render.job, ecore_job_del);
+ E_FREE_FUNC(evh->render.idle_enterer, ecore_idle_enterer_del);
if (evh->render_fail.walking)
{