jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=0f1469280dbe28386013147e5b043138d6fbeb7d

commit 0f1469280dbe28386013147e5b043138d6fbeb7d
Author: Jean-Philippe Andre <[email protected]>
Date:   Tue Dec 19 20:37:25 2017 +0900

    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 926e4249b8..bcb75c9d30 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -4735,6 +4735,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)
 {
@@ -5421,6 +5429,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 09cc2c8f4e..5dcf351066 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 2a46387737..8da9ed8116 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -2892,6 +2892,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,

-- 


Reply via email to