bu5hm4n pushed a commit to branch master.

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

commit b9e0d25a4c44cbeae5e2a18380113181281c9f3e
Author: Cedric BAIL <cedric.b...@free.fr>
Date:   Fri Nov 15 10:55:09 2019 -0800

    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 <sh10233....@samsung.com>
    Reviewed-by: Marcel Hollerbach <m...@marcel-hollerbach.de>
    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);
      }
 

-- 


Reply via email to