Refactoring focus_cycle_next_get and copies

SVN revision: 52813
This commit is contained in:
Tiago Rezende Campos Falcao 2010-09-27 21:13:25 +00:00
parent d55fddf914
commit a276bb071a
3 changed files with 24 additions and 10 deletions

View File

@ -56,6 +56,7 @@ static Eina_Bool
_elm_panel_focus_cycle_hook(Evas_Object *obj, Elm_Focus_Direction dir, Eina_Bool circular)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *cur;
if ((!wd) || (!wd->content))
return EINA_FALSE;
@ -63,14 +64,18 @@ _elm_panel_focus_cycle_hook(Evas_Object *obj, Elm_Focus_Direction dir, Eina_Bool
if (wd->hidden)
return EINA_FALSE;
cur = wd->content;
/* Try Focus cycle in subitem */
if (elm_widget_focus_cycle(wd->content, dir, circular))
if (elm_widget_focus_cycle(cur, dir, circular))
return EINA_TRUE;
/* Ignore focused subitem */
if (elm_widget_focus_get(cur) && (!circular))
return EINA_FALSE;
/* Try give the focus to sub item*/
else if (elm_widget_can_focus_get(wd->content) &&
((!elm_widget_focus_get(wd->content)) || circular))
if (elm_widget_can_focus_get(cur))
{
elm_widget_focus_steal(wd->content);
elm_widget_focus_steal(cur);
return EINA_TRUE;
}

View File

@ -108,17 +108,23 @@ static Eina_Bool
_elm_scroller_focus_cycle_hook(Evas_Object *obj, Elm_Focus_Direction dir, Eina_Bool circular)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *cur;
if ((!wd) || (!wd->content))
return EINA_FALSE;
cur = wd->content;
/* Try Focus cycle in subitem */
if (elm_widget_focus_cycle(wd->content, dir, circular))
if (elm_widget_focus_cycle(cur, dir, circular))
return EINA_TRUE;
/* Ignore focused subitem */
if (elm_widget_focus_get(cur) && (!circular))
return EINA_FALSE;
/* Try give the focus to sub item*/
else if (elm_widget_can_focus_get(wd->content) &&
((!elm_widget_focus_get(wd->content)) || circular))
if (elm_widget_can_focus_get(cur))
{
elm_widget_focus_steal(wd->content);
elm_widget_focus_steal(cur);
return EINA_TRUE;
}

View File

@ -757,12 +757,15 @@ elm_widget_focus_cycle_next_get(Evas_Object *obj, Eina_List *items, void *(*list
for (;l; l = list_next(l))
{
cur = list_data_get(l);
/* Try Focus cycle in subitem */
if (elm_widget_focus_cycle(cur, dir, child_circular))
break;
/* Ignore focused subitem */
if (elm_widget_focus_get(cur) && (!child_circular))
continue;
/* Try give the focus to sub item*/
else if (elm_widget_can_focus_get(cur) &&
((!elm_widget_focus_get(cur)) || child_circular))
if (elm_widget_can_focus_get(cur))
{
elm_widget_focus_steal(cur);
break;