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
This commit is contained in:
Marcel Hollerbach 2018-07-02 20:14:17 +09:00 committed by Hermet Park
parent 27c677f1e0
commit add0611acc
1 changed files with 39 additions and 7 deletions

View File

@ -5,6 +5,7 @@
#include <Elementary.h>
#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);