From 5515a4d037213b96801ba311a0656dbac27a320a Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Tue, 19 Dec 2017 20:37:25 +0900 Subject: [PATCH] win: Show windows created by efl_add with a job This fixes efl_add(WIN) on wayland, using an internal API. Test scenario: ELM_DISPLAY=wl elementary_test -to "Part Shadow" --- src/lib/elementary/efl_ui_win.c | 13 +++++++++++++ src/lib/evas/Evas_Internal.h | 2 ++ src/lib/evas/canvas/evas_render.c | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 82dbd1a..d4f064f 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -5378,6 +5378,14 @@ _indicator_del(Efl_Ui_Win_Data *sd) _elm_win_frame_style_update(sd, 0, 1); } +static Eina_Value +_win_finalize_job_cb(void *data, const Eina_Value value) +{ + Evas *eo_e = evas_object_evas_get(data); + evas_render_pending_objects_flush(eo_e); + return value; +} + static Eo * _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_Ui_Win_Type type) { @@ -6107,6 +6115,11 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_U _elm_win_resize_job(obj); _elm_win_move(sd->ee); } + else + { + eina_future_then_easy(efl_loop_job(efl_loop_get(obj)), + .success = _win_finalize_job_cb, .data = obj); + } // All normal windows are "standard" windows with EO API if (!sd->legacy.ctor) diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h index 09cc2c8..5dcf351 100644 --- a/src/lib/evas/Evas_Internal.h +++ b/src/lib/evas/Evas_Internal.h @@ -46,6 +46,8 @@ EAPI Evas_Engine_Info *efl_canvas_output_engine_info_get(Efl_Canvas_Output *outp EAPI Eina_Bool efl_canvas_output_lock(Efl_Canvas_Output *output); EAPI Eina_Bool efl_canvas_output_unlock(Efl_Canvas_Output *output); +EAPI void evas_render_pending_objects_flush(Evas *eo_evas); + EAPI void efl_input_pointer_finalize(Efl_Input_Pointer *obj); static inline void diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index f166407..5961ff8 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -2895,6 +2895,14 @@ evas_render_pre(Evas *eo_e, Evas_Public_Data *evas) eina_evlog("-render_pre_objects_finalize", eo_e, 0.0, NULL); } +EAPI void +evas_render_pending_objects_flush(Evas *eo_e) +{ + Evas_Public_Data *evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); + EINA_SAFETY_ON_NULL_RETURN(evas); + evas_render_pre(eo_e, evas); +} + static Eina_Bool evas_render_updates_internal_loop(Evas *eo_e, Evas_Public_Data *evas, void *output, void *surface, void *context, -- 2.7.4