2017-10-15 06:35:42 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <Elementary.h>
|
|
|
|
#include "elm_priv.h"
|
2019-03-05 14:00:37 -08:00
|
|
|
#include "efl_ui_focus_parent_provider_gen_eo.h"
|
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
2018-07-02 04:14:17 -07:00
|
|
|
#include "efl_ui_focus_composition_adapter.eo.h"
|
2017-10-15 06:35:42 -07:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
Eina_Hash *map;
|
2018-01-07 20:55:35 -08:00
|
|
|
Efl_Ui_Widget *container;
|
2017-10-15 06:35:42 -07:00
|
|
|
Efl_Ui_Focus_Parent_Provider *provider;
|
|
|
|
} Efl_Ui_Focus_Parent_Provider_Gen_Data;
|
|
|
|
|
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_focus_parent_provider_gen_content_item_map_set(Eo *obj, Efl_Ui_Focus_Parent_Provider_Gen_Data *pd, Eina_Hash *map)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_TRUE_RETURN(efl_finalized_get(obj));
|
|
|
|
|
|
|
|
pd->map = map;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Hash*
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_focus_parent_provider_gen_content_item_map_get(const Eo *obj EINA_UNUSED, Efl_Ui_Focus_Parent_Provider_Gen_Data *pd)
|
2017-10-15 06:35:42 -07:00
|
|
|
{
|
|
|
|
return pd->map;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2018-01-07 20:55:35 -08:00
|
|
|
_efl_ui_focus_parent_provider_gen_container_set(Eo *obj, Efl_Ui_Focus_Parent_Provider_Gen_Data *pd, Efl_Ui_Widget *container)
|
2017-10-15 06:35:42 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_TRUE_RETURN(efl_finalized_get(obj));
|
|
|
|
|
|
|
|
pd->container = container;
|
|
|
|
|
|
|
|
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);
|
2019-08-20 00:14:43 -07:00
|
|
|
|
|
|
|
ELM_WIDGET_DATA_GET(pd->container, wid_pd);
|
|
|
|
|
2019-08-27 03:27:01 -07:00
|
|
|
if (wid_pd->shared_win_data)
|
|
|
|
((Efl_Ui_Shared_Win_Data*)wid_pd->shared_win_data)->custom_parent_provider = EINA_TRUE;
|
2017-10-15 06:35:42 -07:00
|
|
|
}
|
|
|
|
|
2018-01-07 20:55:35 -08:00
|
|
|
EOLIAN static Efl_Ui_Widget*
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_focus_parent_provider_gen_container_get(const Eo *obj EINA_UNUSED, Efl_Ui_Focus_Parent_Provider_Gen_Data *pd)
|
2017-10-15 06:35:42 -07:00
|
|
|
{
|
|
|
|
return pd->container;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EOLIAN static Efl_Ui_Focus_Object*
|
|
|
|
_efl_ui_focus_parent_provider_gen_efl_ui_focus_parent_provider_find_logical_parent(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Parent_Provider_Gen_Data *pd EINA_UNUSED, Efl_Ui_Focus_Object *widget)
|
|
|
|
{
|
|
|
|
//first check if this item is in the map
|
2017-10-19 04:29:03 -07:00
|
|
|
Elm_Widget_Item *item, *above_gengrid = widget;
|
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
2018-07-02 04:14:17 -07:00
|
|
|
Efl_Ui_Widget *parent;
|
2017-10-15 06:35:42 -07:00
|
|
|
|
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
2018-07-02 04:14:17 -07:00
|
|
|
if (efl_isa(widget, EFL_UI_FOCUS_COMPOSITION_ADAPTER_CLASS))
|
2018-06-12 01:40:38 -07:00
|
|
|
{
|
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
2018-07-02 04:14:17 -07:00
|
|
|
item = efl_parent_get(widget);
|
2018-06-12 01:40:38 -07:00
|
|
|
|
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
2018-07-02 04:14:17 -07:00
|
|
|
if (efl_isa(item, ELM_WIDGET_ITEM_CLASS))
|
2018-06-12 01:40:38 -07:00
|
|
|
return item;
|
|
|
|
}
|
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
2018-07-02 04:14:17 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
parent = elm_widget_parent_widget_get(widget);
|
|
|
|
|
|
|
|
if (parent == pd->container)
|
|
|
|
{
|
|
|
|
item = eina_hash_find(pd->map, &above_gengrid);
|
2019-02-21 12:46:32 -08:00
|
|
|
efl_ui_focus_object_setup_order(pd->container);
|
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
2018-07-02 04:14:17 -07:00
|
|
|
|
|
|
|
if (item)
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
}
|
2018-06-12 01:40:38 -07:00
|
|
|
|
|
|
|
// We dont have a map entry
|
|
|
|
return efl_ui_focus_parent_provider_find_logical_parent(pd->provider, widget);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Efl_Ui_Widget*
|
2018-06-13 08:37:40 -07:00
|
|
|
_efl_ui_focus_parent_provider_gen_item_fetch(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Parent_Provider_Gen_Data *pd, Efl_Ui_Widget *widget)
|
2018-06-12 01:40:38 -07:00
|
|
|
{
|
|
|
|
//first check if this item is in the map
|
|
|
|
Elm_Widget_Item *item, *above_gengrid = widget;
|
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
2018-07-02 04:14:17 -07:00
|
|
|
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))
|
|
|
|
{
|
2019-02-21 12:46:32 -08:00
|
|
|
efl_ui_focus_object_setup_order(pd->container);
|
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
2018-07-02 04:14:17 -07:00
|
|
|
return item;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
parent = item;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
parent = elm_widget_parent_widget_get(widget);
|
|
|
|
}
|
|
|
|
|
2018-06-12 01:40:38 -07:00
|
|
|
|
2018-01-31 06:04:26 -08:00
|
|
|
//move forward so we get the last widget above the gengrid level,
|
|
|
|
//this may be the widget out of the map
|
|
|
|
while (parent && parent != pd->container)
|
2017-10-19 04:29:03 -07:00
|
|
|
{
|
2018-01-31 06:04:26 -08:00
|
|
|
above_gengrid = parent;
|
|
|
|
parent = elm_widget_parent_widget_get(above_gengrid);
|
2017-10-19 04:29:03 -07:00
|
|
|
}
|
|
|
|
item = eina_hash_find(pd->map, &above_gengrid);
|
2017-10-15 06:35:42 -07:00
|
|
|
|
2019-02-21 12:46:32 -08:00
|
|
|
efl_ui_focus_object_setup_order(pd->container);
|
2017-10-15 06:35:42 -07:00
|
|
|
|
2018-06-12 01:40:38 -07:00
|
|
|
return item;
|
2017-10-15 06:35:42 -07:00
|
|
|
}
|
|
|
|
|
2019-03-05 14:00:37 -08:00
|
|
|
#include "efl_ui_focus_parent_provider_gen_eo.c"
|