summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <mail@marcel-hollerbach.de>2018-11-13 17:36:31 +0100
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2018-11-20 20:50:42 +0100
commita81540ead5feb2123ff55a3cb3a530d380e5813d (patch)
tree0a92877971c042360df09996d6f8a1b2049d3ab3
parent9c1c35b9b878243d1952f328c415860fde43f21f (diff)
downloadefl-a81540ead5feb2123ff55a3cb3a530d380e5813d.tar.gz
elm_gengrid: enable focus api for none realized items
this ensures that the item is focused once the item is realized. The last_focused_item point is not NULLed anymore, it will be overridden anyways a few lines below, if the 'if' below is not going to be executed, then we should not NULL out the field at all, since we want to remember the item when we are restoring focus in _elm_gengrid_efl_ui_focus_manager_setup_on_first_touch. This resolved the latest comment in D7230 This also resolves T7391. Differential Revision: https://phab.enlightenment.org/D7271
-rw-r--r--src/lib/elementary/elm_gengrid.c38
-rw-r--r--src/lib/elementary/elm_widget_gengrid.h1
2 files changed, 33 insertions, 6 deletions
diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c
index 34836ca774..31e204d80c 100644
--- a/src/lib/elementary/elm_gengrid.c
+++ b/src/lib/elementary/elm_gengrid.c
@@ -99,6 +99,7 @@ static void _item_position_update(Eina_Inlist *list, int idx);
static void _item_mouse_callbacks_add(Elm_Gen_Item *it, Evas_Object *view);
static void _item_mouse_callbacks_del(Elm_Gen_Item *it, Evas_Object *view);
static void _calc_job(void *data);
+static void _elm_gengrid_item_focused(Elm_Object_Item *eo_it);
static const Elm_Action key_actions[] = {
{"move", _key_action_move},
@@ -107,6 +108,20 @@ static const Elm_Action key_actions[] = {
{NULL, NULL}
};
+static void
+_flush_focus_on_realization(Eo *widget, Elm_Gen_Item *it)
+{
+ ELM_GENGRID_DATA_GET_OR_RETURN(widget, sd);
+
+ if (sd->focus_on_realization == it)
+ {
+ _elm_gengrid_item_focused(EO_OBJ(it));
+ efl_ui_focus_manager_focus_set(WIDGET(it), EO_OBJ(it));
+ sd->focus_on_realization = NULL;
+ }
+}
+
+
//-- item cache handle routine --//
// push item cache into caches
@@ -1936,6 +1951,7 @@ _item_place(Elm_Gen_Item *it,
_elm_gengrid_item_index_update(it);
efl_event_callback_legacy_call
(WIDGET(it), ELM_GENGRID_EVENT_REALIZED, EO_OBJ(it));
+ _flush_focus_on_realization(WIDGET(it), it);
}
if (it->parent)
{
@@ -2143,6 +2159,7 @@ _group_item_place(Elm_Gengrid_Pan_Data *psd)
_elm_gengrid_item_index_update(it);
efl_event_callback_legacy_call
(WIDGET(it), ELM_GENGRID_EVENT_REALIZED, EO_OBJ(it));
+ _flush_focus_on_realization(WIDGET(it), it);
}
evas_object_move
(VIEW(it), GG_IT(it)->gx,
@@ -3816,10 +3833,18 @@ _elm_gengrid_item_elm_widget_item_item_focus_set(Eo *eo_it, Elm_Gen_Item *it, Ei
{
if (sd->focused_item)
_elm_gengrid_item_unfocused(sd->focused_item);
- _elm_gengrid_item_focused(eo_it);
+ if (it->realized)
+ {
+ _elm_gengrid_item_focused(eo_it);
+ sd->focus_on_realization = NULL;
+ efl_ui_focus_manager_focus_set(obj, eo_it);
+ }
+ else
+ {
+ sd->focus_on_realization = it;
+ }
}
- efl_ui_focus_manager_focus_set(obj, eo_it);
}
else
{
@@ -4220,16 +4245,18 @@ _elm_gengrid_efl_ui_focus_manager_setup_on_first_touch(Eo *obj, Elm_Gengrid_Data
eo_it = elm_gengrid_last_item_get(obj);
}
}
-
eo_it = _elm_gengrid_nearest_visible_item_get(obj, eo_it);
-
if (eo_it)
{
if (!_elm_config->item_select_on_focus_disable &&
eo_it != pd->last_selected_item)
elm_gengrid_item_selected_set(eo_it, EINA_TRUE);
else
- efl_ui_focus_manager_focus_set(obj, eo_it);
+ {
+ ELM_GENGRID_ITEM_DATA_GET(eo_it, pd);
+ if (pd->realized)
+ efl_ui_focus_manager_focus_set(obj, eo_it);
+ }
}
else
{
@@ -4253,7 +4280,6 @@ _gengrid_element_focused(void *data, const Efl_Event *ev)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(old_item, ELM_GENGRID_ITEM_CLASS));
_elm_gengrid_item_unfocused(old_item);
- pd->last_focused_item = NULL;
}
if (item)
diff --git a/src/lib/elementary/elm_widget_gengrid.h b/src/lib/elementary/elm_widget_gengrid.h
index 8f728b1c9a..b995ed07ea 100644
--- a/src/lib/elementary/elm_widget_gengrid.h
+++ b/src/lib/elementary/elm_widget_gengrid.h
@@ -52,6 +52,7 @@ struct _Elm_Gengrid_Data
Eina_Hash *content_item_map;
Eo *provider;
+ Elm_Gen_Item *focus_on_realization;
Ecore_Job *calc_job;
int walking;