} Elm_Widget_Item_Static_Focus_Data;
static void
-_realized_cb(void *data, const Efl_Event *ev)
+_realized_set(Elm_Widget_Item_Static_Focus *f)
{
- Elm_Widget_Item_Static_Focus_Data *pd = efl_data_scope_get(data, MY_CLASS);
+ Elm_Widget_Item_Static_Focus_Data *pd = efl_data_scope_get(f, MY_CLASS);
+ pd->realized = EINA_TRUE;
+}
+
+static void
+_list_realized_cb(void *data, const Efl_Event *ev)
+{
if (ev->info != data) return;
- pd->realized = EINA_TRUE;
- efl_ui_focus_object_prepare_logical(data);
+ _realized_set(data);
+
+ if (!elm_object_item_disabled_get(data) &&
+ elm_genlist_item_type_get(data) != ELM_GENLIST_ITEM_GROUP)
+ efl_ui_focus_object_prepare_logical(data);
+}
+
+static void
+_grid_realized_cb(void *data, const Efl_Event *ev)
+{
+ const Elm_Gen_Item_Class *itc;
+ Eina_Bool is_group = EINA_FALSE;
+
+ if (ev->info != data) return;
+
+ _realized_set(data);
+
+ itc = elm_gengrid_item_item_class_get(data);
+
+ is_group = (itc && itc->item_style && !strcmp(itc->item_style, "group_index"));
+
+ if (!elm_object_item_disabled_get(data) && !is_group)
+ efl_ui_focus_object_prepare_logical(data);
}
static void
if (efl_isa(wpd->widget, ELM_GENLIST_CLASS))
{
- efl_event_callback_add(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _realized_cb, obj);
+ efl_event_callback_add(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _list_realized_cb, obj);
efl_event_callback_add(wpd->widget, ELM_GENLIST_EVENT_UNREALIZED, _unrealized_cb, obj);
}
else
{
- efl_event_callback_add(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _realized_cb, obj);
+ efl_event_callback_add(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _grid_realized_cb, obj);
efl_event_callback_add(wpd->widget, ELM_GENGRID_EVENT_UNREALIZED, _unrealized_cb, obj);
}
return ret;
Elm_Widget_Item_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS);
if (efl_isa(wpd->widget, ELM_GENLIST_CLASS))
{
- efl_event_callback_del(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _realized_cb, obj);
+ efl_event_callback_del(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _list_realized_cb, obj);
efl_event_callback_del(wpd->widget, ELM_GENLIST_EVENT_UNREALIZED, _unrealized_cb, obj);
}
else
{
- efl_event_callback_del(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _realized_cb, obj);
+ efl_event_callback_del(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _grid_realized_cb, obj);
efl_event_callback_del(wpd->widget, ELM_GENGRID_EVENT_UNREALIZED, _unrealized_cb, obj);
}