From: Shinwoo Kim Date: Tue, 18 Dec 2018 10:40:33 +0000 (+0000) Subject: efl_ui_win: make win work for evas_norender X-Git-Tag: submit/tizen/20190116.045417~33 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=29d81f85e287dce69851fc82e0359fee8b624f78;p=platform%2Fupstream%2Fefl.git efl_ui_win: make win work for evas_norender The evas_norender updates the canvas internal objects. But efl_ui_win does not evaluate its internal objects, when evas_norender is called before showing, after resizing as below. evas_object_resize(win, 300, 600); evas_norender(evas_object_evas_get(win)); evas_object_show(win); This problem could be verified by checking if a resize function of internal object is called or not. minw,h is 0 in _elm_win_resize_objects_eval but deferred_resize_job is TRUE. evas_norender -> _window_layout_stack -> _elm_win_resize_objects_eval So if _elm_win_resize_objects_eval does not return if deferred_resize_job is TRUE even if minw,h is 0, and calls _elm_win_resize_job, then it will work. _elm_win_resize_objects_eval -> _elm_win_resize_job -> evas_object_geometry_set -> _efl_canvas_group_group_need_recalculate_set -> _window_layout_stack -> evas_object_geometry_set -> resize function. I have checked this behavior without elementary. It seems that evas_norender works between resize and show in this case. Let me share examples. ecore_evas_resize(ee, 100, 100); evas_norender(evas); ecore_evas_show(ee); Differential Revision: https://phab.enlightenment.org/D7425 --- diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index dbf36cf..b4bef1b 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -4236,7 +4236,7 @@ _elm_win_resize_objects_eval(Evas_Object *obj, Eina_Bool force_resize) double wx, wy; evas_object_size_hint_combined_min_get(sd->legacy.edje, &minw, &minh); - if ((!minw) && (!minh)) return; + if ((!minw) && (!minh) && (!sd->deferred_resize_job)) return; // If content has a weight, make resizable efl_gfx_size_hint_weight_get(sd->legacy.edje, &wx, &wy); @@ -4282,10 +4282,8 @@ _elm_win_resize_objects_eval(Evas_Object *obj, Eina_Bool force_resize) sd->tmp_updating_hints = 0; _elm_win_size_hints_update(obj, sd); - // TIZEN_ONLY(20160216): if there are deferred resize job, do the job immediately - if (sd->deferred_resize_job) - _elm_win_resize_job(sd->obj); - // + /* do not need to go below. if you go, ee could become 0. */ + if ((!minw) && (!minh)) return; evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); w = ow;