From add0611acc4c07def47101c66562e196db93866c Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Mon, 2 Jul 2018 20:14:17 +0900 Subject: [PATCH] efl_ui_focus_parent_provider_gen: provide results for adapters Summary: a adapter is used whenno real widget is created during realization, when a adapter is used, the parent cannot be fetched via elm_widget_parent_get, there we need efl_parent_get Reviewers: ManMower, devilhorns, stephenmhouston, zmike, Hermet Reviewed By: Hermet Subscribers: Hermet, cedric, #committers, zmike Tags: #efl Differential Revision: https://phab.enlightenment.org/D6339 --- .../efl_ui_focus_parent_provider_gen.c | 46 ++++++++++++++++--- 1 file changed, 39 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 af6c300d5f..34ac71aedc 100644 --- a/src/lib/elementary/efl_ui_focus_parent_provider_gen.c +++ b/src/lib/elementary/efl_ui_focus_parent_provider_gen.c @@ -5,6 +5,7 @@ #include #include "elm_priv.h" #include "efl_ui_focus_parent_provider_gen.eo.h" +#include "efl_ui_focus_composition_adapter.eo.h" typedef struct { Eina_Hash *map; @@ -50,16 +51,28 @@ _efl_ui_focus_parent_provider_gen_efl_ui_focus_parent_provider_find_logical_pare { //first check if this item is in the map Elm_Widget_Item *item, *above_gengrid = widget; - Efl_Ui_Widget *parent = elm_widget_parent_widget_get(widget); + Efl_Ui_Widget *parent; - if (parent == pd->container) + if (efl_isa(widget, EFL_UI_FOCUS_COMPOSITION_ADAPTER_CLASS)) { - item = eina_hash_find(pd->map, &above_gengrid); - efl_ui_focus_object_prepare_logical(pd->container); + item = efl_parent_get(widget); - if (item) + if (efl_isa(item, ELM_WIDGET_ITEM_CLASS)) return item; } + else + { + parent = elm_widget_parent_widget_get(widget); + + if (parent == pd->container) + { + item = eina_hash_find(pd->map, &above_gengrid); + efl_ui_focus_object_prepare_logical(pd->container); + + if (item) + return item; + } + } // We dont have a map entry return efl_ui_focus_parent_provider_find_logical_parent(pd->provider, widget); @@ -70,7 +83,27 @@ _efl_ui_focus_parent_provider_gen_item_fetch(Eo *obj EINA_UNUSED, Efl_Ui_Focus_P { //first check if this item is in the map Elm_Widget_Item *item, *above_gengrid = widget; - Efl_Ui_Widget *parent = elm_widget_parent_widget_get(widget); + Efl_Ui_Widget *parent; + + if (efl_isa(widget, EFL_UI_FOCUS_COMPOSITION_ADAPTER_CLASS)) + { + item = efl_parent_get(widget); + + if (efl_isa(item, ELM_WIDGET_ITEM_CLASS)) + { + efl_ui_focus_object_prepare_logical(pd->container); + return item; + } + else + { + parent = item; + } + } + else + { + parent = elm_widget_parent_widget_get(widget); + } + //move forward so we get the last widget above the gengrid level, //this may be the widget out of the map @@ -79,7 +112,6 @@ _efl_ui_focus_parent_provider_gen_item_fetch(Eo *obj EINA_UNUSED, Efl_Ui_Focus_P above_gengrid = parent; parent = elm_widget_parent_widget_get(above_gengrid); } - item = eina_hash_find(pd->map, &above_gengrid); efl_ui_focus_object_prepare_logical(pd->container);