cedric pushed a commit to branch master.

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

commit b4b17993d5bf5bfb7281b0e78cbc2eacf954a53b
Author: Marcel Hollerbach <[email protected]>
Date:   Tue Aug 20 09:14:43 2019 +0200

    efl_ui_widget: skip custom focus parent logic
    
    asking for a parent provider only makes sense if we are having a custom
    focus parent provider, otherwise this will just result in the normal
    parent relation. Not doing this safes us a lot of time that we spent for
    nothing in the focus evalulation code.
    
    The gengrid change is needed as the parent provider should be applied
    after the constructor is called, otherwise there is no garantee that
    shared_win_data is not NULL.
    
    Reviewed-by: Cedric BAIL <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D9643
---
 src/lib/elementary/efl_ui_focus_parent_provider_gen.c |  4 ++++
 src/lib/elementary/efl_ui_widget.c                    | 17 ++++++++++++-----
 src/lib/elementary/elm_gengrid.c                      |  4 +++-
 src/lib/elementary/elm_priv.h                         |  2 +-
 4 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/lib/elementary/efl_ui_focus_parent_provider_gen.c 
b/src/lib/elementary/efl_ui_focus_parent_provider_gen.c
index 1ad1ab2ae1..cb6700cdd6 100644
--- a/src/lib/elementary/efl_ui_focus_parent_provider_gen.c
+++ b/src/lib/elementary/efl_ui_focus_parent_provider_gen.c
@@ -37,6 +37,10 @@ _efl_ui_focus_parent_provider_gen_container_set(Eo *obj, 
Efl_Ui_Focus_Parent_Pro
    EINA_SAFETY_ON_NULL_RETURN(efl_parent_get(pd->container));
 
    pd->provider = efl_provider_find(efl_parent_get(pd->container), 
EFL_UI_FOCUS_PARENT_PROVIDER_INTERFACE);
+
+   ELM_WIDGET_DATA_GET(pd->container, wid_pd);
+
+   ((Efl_Ui_Shared_Win_Data*)wid_pd->shared_win_data)->custom_parent_provider 
= EINA_TRUE;
 }
 
 EOLIAN static Efl_Ui_Widget*
diff --git a/src/lib/elementary/efl_ui_widget.c 
b/src/lib/elementary/efl_ui_widget.c
index 1e3ea74737..d4e272b339 100644
--- a/src/lib/elementary/efl_ui_widget.c
+++ b/src/lib/elementary/efl_ui_widget.c
@@ -452,14 +452,21 @@ _logical_parent_eval(Eo *obj EINA_UNUSED, 
Elm_Widget_Smart_Data *pd, Eina_Bool s
    Efl_Ui_Widget *parent;
    Efl_Ui_Focus_Parent_Provider *provider;
 
-   if (should)
+   if (((Efl_Ui_Shared_Win_Data*)pd->shared_win_data)->custom_parent_provider)
      {
-        provider = efl_provider_find(obj, 
EFL_UI_FOCUS_PARENT_PROVIDER_INTERFACE);
-        EINA_SAFETY_ON_NULL_RETURN_VAL(provider, NULL);
-        parent = efl_ui_focus_parent_provider_find_logical_parent(provider, 
obj);
+        if (should)
+          {
+             provider = efl_provider_find(obj, 
EFL_UI_FOCUS_PARENT_PROVIDER_INTERFACE);
+             EINA_SAFETY_ON_NULL_RETURN_VAL(provider, NULL);
+             parent = 
efl_ui_focus_parent_provider_find_logical_parent(provider, obj);
+          }
+        else
+          parent = NULL;
      }
    else
-     parent = NULL;
+     {
+        parent = efl_ui_widget_parent_get(obj);
+     }
 
 
    if (pd->logical.parent != parent)
diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c
index 9c0fb19767..210e46e4ba 100644
--- a/src/lib/elementary/elm_gengrid.c
+++ b/src/lib/elementary/elm_gengrid.c
@@ -4380,11 +4380,13 @@ _elm_gengrid_efl_object_constructor(Eo *obj, 
Elm_Gengrid_Data *sd)
 {
    legacy_efl_ui_focus_manager_widget_legacy_signals(obj, obj);
    sd->content_item_map = eina_hash_pointer_new(NULL);
+
+   obj = efl_constructor(efl_super(obj, MY_CLASS));
+
    sd->provider = efl_add(EFL_UI_FOCUS_PARENT_PROVIDER_GEN_CLASS, obj,
     efl_ui_focus_parent_provider_gen_container_set(efl_added, obj),
     efl_ui_focus_parent_provider_gen_content_item_map_set(efl_added, 
sd->content_item_map));
 
-   obj = efl_constructor(efl_super(obj, MY_CLASS));
    sd->obj = obj;
 
    efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h
index 543854c9ef..b2315e3f11 100644
--- a/src/lib/elementary/elm_priv.h
+++ b/src/lib/elementary/elm_priv.h
@@ -1043,7 +1043,7 @@ void efl_ui_scroll_connector_unbind(Eo *obj);
 
 typedef struct
 {
-
+   Eina_Bool custom_parent_provider;
 } Efl_Ui_Shared_Win_Data;
 
 Efl_Ui_Shared_Win_Data* efl_ui_win_shared_data_get(Efl_Ui_Win *win);

-- 


Reply via email to