From b9e0d25a4c44cbeae5e2a18380113181281c9f3e Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 15 Nov 2019 10:55:09 -0800 Subject: [PATCH] elementary: reduce event generation during object creation by Efl.Ui.WidgetFactory. We can not freeze the canvas in all scenario as we are sometime building widget fully asynchronously which prevent holding events on the canvas. Still it is better to do it for the case we can. Reviewed-by: SangHyeon Jade Lee Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D10685 --- src/lib/elementary/efl_ui_widget_factory.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_widget_factory.c b/src/lib/elementary/efl_ui_widget_factory.c index 5ab9477a85..43c9d27c5e 100644 --- a/src/lib/elementary/efl_ui_widget_factory.c +++ b/src/lib/elementary/efl_ui_widget_factory.c @@ -279,6 +279,10 @@ _efl_ui_widget_factory_efl_ui_factory_create(Eo *obj, Efl_Ui_Widget_Factory_Data { Efl_Ui_Widget *w = NULL; Eina_Value r; + Evas *e; + + e = evas_object_evas_get(obj); + evas_event_freeze(e); eina_value_array_setup(&r, EINA_VALUE_TYPE_OBJECT, 4); @@ -286,11 +290,19 @@ _efl_ui_widget_factory_efl_ui_factory_create(Eo *obj, Efl_Ui_Widget_Factory_Data { w = _efl_ui_widget_create(obj, pd->klass, pd->parenting_widget, model); - if (!w) return efl_loop_future_rejected(obj, ENOMEM); + if (!w) + { + evas_event_thaw(e); + evas_event_thaw_eval(e); + return efl_loop_future_rejected(obj, ENOMEM); + } eina_value_array_append(&r, w); } eina_iterator_free(models); + evas_event_thaw(e); + evas_event_thaw_eval(e); + return efl_loop_future_resolved(obj, r); }