elementary/win - [E-devel] [Patch][Elementary] Patch for elm_win to fix the focus chain issue in case of a widget added as a normal sub-object, not a resizable object
Current Issue: Currently when we add a widget to window as a sub-object, e.g. elm_notify_add(win) which internally calls elm_widget_sub_object_add then the focus chain using <TAB> includes only the first focusable subitem of the widget, not all. Whereas with elm_win_resize_object_add, it works fine and cycles to all focusable sub-items of the widget. Reason: The reason is that we are appending sub-object to the list in elm_win which is used for focus chain, only in case of elm_win_resize_object_add. Change Description: Added a new API: EAPI Eina_List *elm_widget_sub_object_list_get(const Evas_Object *obj); This API returns the list of sub-objects of an elementary widget (sd->subobjs) where sd is Smart_Data pointer obtainted using elm_widget_smart_data_get(obj). We have used this API in elm_win for focus_next_hook implementation. Signed-Off-By: RAJEEV RANJAN<rajeev.r>@samsumg.com> SVN revision: 69943
This commit is contained in:
parent
4a0a6b6362
commit
c35d5ac903
|
@ -1036,6 +1036,13 @@ elm_widget_sub_object_del(Evas_Object *obj,
|
||||||
evas_object_smart_callback_call(obj, "sub-object-del", sobj);
|
evas_object_smart_callback_call(obj, "sub-object-del", sobj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI const Eina_List *
|
||||||
|
elm_widget_sub_object_list_get(const Evas_Object *obj)
|
||||||
|
{
|
||||||
|
API_ENTRY return NULL;
|
||||||
|
return (const Eina_List *)sd->subobjs;
|
||||||
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
elm_widget_resize_object_set(Evas_Object *obj,
|
elm_widget_resize_object_set(Evas_Object *obj,
|
||||||
Evas_Object *sobj)
|
Evas_Object *sobj)
|
||||||
|
|
|
@ -328,6 +328,7 @@ EAPI void elm_widget_data_set(Evas_Object *obj, void *data);
|
||||||
EAPI void *elm_widget_data_get(const Evas_Object *obj);
|
EAPI void *elm_widget_data_get(const Evas_Object *obj);
|
||||||
EAPI void elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj);
|
EAPI void elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj);
|
||||||
EAPI void elm_widget_sub_object_del(Evas_Object *obj, Evas_Object *sobj);
|
EAPI void elm_widget_sub_object_del(Evas_Object *obj, Evas_Object *sobj);
|
||||||
|
EAPI const Eina_List *elm_widget_sub_object_list_get(const Evas_Object *obj);
|
||||||
EAPI void elm_widget_resize_object_set(Evas_Object *obj, Evas_Object *sobj);
|
EAPI void elm_widget_resize_object_set(Evas_Object *obj, Evas_Object *sobj);
|
||||||
EAPI void elm_widget_hover_object_set(Evas_Object *obj, Evas_Object *sobj);
|
EAPI void elm_widget_hover_object_set(Evas_Object *obj, Evas_Object *sobj);
|
||||||
EAPI void elm_widget_signal_emit(Evas_Object *obj, const char *emission, const char *source);
|
EAPI void elm_widget_signal_emit(Evas_Object *obj, const char *emission, const char *source);
|
||||||
|
|
|
@ -498,19 +498,20 @@ _elm_win_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_O
|
||||||
{
|
{
|
||||||
Elm_Win *wd = elm_widget_data_get(obj);
|
Elm_Win *wd = elm_widget_data_get(obj);
|
||||||
const Eina_List *items;
|
const Eina_List *items;
|
||||||
|
const Eina_List *list;
|
||||||
void *(*list_data_get) (const Eina_List *list);
|
void *(*list_data_get) (const Eina_List *list);
|
||||||
|
|
||||||
if (!wd)
|
if (!wd)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
list = elm_widget_sub_object_list_get(obj);
|
||||||
|
|
||||||
/* Focus chain */
|
/* Focus chain */
|
||||||
if (wd->subobjs)
|
if (list)
|
||||||
{
|
{
|
||||||
if (!(items = elm_widget_focus_custom_chain_get(obj)))
|
if (!(items = elm_widget_focus_custom_chain_get(obj)))
|
||||||
{
|
{
|
||||||
items = wd->subobjs;
|
if (!list) return EINA_FALSE;
|
||||||
if (!items)
|
items = list;
|
||||||
return EINA_FALSE;
|
|
||||||
}
|
}
|
||||||
list_data_get = eina_list_data_get;
|
list_data_get = eina_list_data_get;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue