naviframe: Fix to set only top view to be focusable

Summary:
Previously, all views were focusable except during transition.
         Now, only top view is focusable.

Reviewers: seoz

CC: Hermet

Differential Revision: https://phab.enlightenment.org/D554
This commit is contained in:
Jaehyun Cho 2014-02-17 21:03:01 +09:00 committed by Carsten Haitzler (Rasterman)
parent 0e6364aeef
commit 934113bc20
2 changed files with 13 additions and 17 deletions

View File

@ -517,13 +517,6 @@ _item_del_pre_hook(Elm_Object_Item *it)
if (evas_object_data_get(VIEW(nit), "out_of_list"))
goto end;
//FIXME: Really need?
if (!sd->on_deletion)
{
nit->unfocusable = elm_widget_tree_unfocusable_get(VIEW(nit));
elm_widget_tree_unfocusable_set(VIEW(nit), EINA_TRUE);
}
sd->stack = eina_inlist_remove(sd->stack, EINA_INLIST_GET(nit));
if (top && !sd->on_deletion) /* must raise another one */
@ -533,6 +526,9 @@ _item_del_pre_hook(Elm_Object_Item *it)
Elm_Naviframe_Item);
if (!prev_it) goto end;
elm_widget_tree_unfocusable_set(VIEW(prev_it), EINA_FALSE);
elm_widget_tree_unfocusable_set(VIEW(nit), EINA_TRUE);
if (sd->freeze_events)
evas_object_freeze_events_set(VIEW(prev_it), EINA_FALSE);
_resize_object_reset(WIDGET(prev_it), prev_it);
@ -1081,8 +1077,6 @@ _on_item_push_finished(void *data,
evas_object_hide(VIEW(it));
elm_widget_tree_unfocusable_set(VIEW(it), it->unfocusable);
if (sd->freeze_events)
evas_object_freeze_events_set(VIEW(it), EINA_FALSE);
}
@ -1100,7 +1094,7 @@ _on_item_pop_finished(void *data,
ELM_NAVIFRAME_DATA_GET(WIDGET(it), sd);
if (sd->preserve)
elm_widget_tree_unfocusable_set(VIEW(it), it->unfocusable);
elm_widget_tree_unfocusable_set(VIEW(it), EINA_FALSE);
sd->popping = eina_list_remove(sd->popping, it);
elm_widget_item_del(data);
@ -1121,8 +1115,6 @@ _on_item_show_finished(void *data,
elm_object_signal_emit(VIEW(it), "elm,state,visible", "elm");
elm_widget_tree_unfocusable_set(VIEW(it), it->unfocusable);
_prev_page_focus_recover(it);
if (sd->freeze_events)
@ -1546,7 +1538,6 @@ _item_push(Eo *obj, void *_pd, va_list *list)
edje_object_message_signal_process(elm_layout_edje_get(VIEW(prev_it)));
edje_object_message_signal_process(elm_layout_edje_get(VIEW(it)));
prev_it->unfocusable = elm_widget_tree_unfocusable_get(VIEW(prev_it));
elm_widget_tree_unfocusable_set(VIEW(prev_it), EINA_TRUE);
ecore_animator_del(it->animator);
@ -1611,6 +1602,8 @@ _item_insert_before(Eo *obj, void *_pd, va_list *list)
(sd->stack, EINA_INLIST_GET(it),
EINA_INLIST_GET(((Elm_Naviframe_Item *)before)));
elm_widget_tree_unfocusable_set(VIEW(it), EINA_TRUE);
elm_layout_sizing_eval(obj);
*ret = (Elm_Object_Item *)it;
@ -1662,6 +1655,7 @@ _item_insert_after(Eo *obj, void *_pd, va_list *list)
if (top_inserted)
{
elm_widget_focused_object_clear(VIEW(after));
elm_widget_tree_unfocusable_set(VIEW(after), EINA_TRUE);
_resize_object_reset(obj, it);
evas_object_show(VIEW(it));
evas_object_hide(VIEW(after));
@ -1729,9 +1723,6 @@ _item_pop(Eo *obj, void *_pd, va_list *list)
evas_object_data_set(VIEW(it), "out_of_list", (void *)1);
it->unfocusable = elm_widget_tree_unfocusable_get(VIEW(it));
elm_widget_tree_unfocusable_set(VIEW(it), EINA_TRUE);
if (sd->stack->last->prev)
prev_it = EINA_INLIST_CONTAINER_GET
(sd->stack->last->prev, Elm_Naviframe_Item);
@ -1740,6 +1731,9 @@ _item_pop(Eo *obj, void *_pd, va_list *list)
if (prev_it)
{
elm_widget_tree_unfocusable_set(VIEW(prev_it), EINA_FALSE);
elm_widget_tree_unfocusable_set(VIEW(it), EINA_TRUE);
if (sd->freeze_events)
{
evas_object_freeze_events_set(VIEW(it), EINA_TRUE);
@ -1828,6 +1822,9 @@ elm_naviframe_item_promote(Elm_Object_Item *it)
elm_widget_focused_object_clear(VIEW(nit));
_resize_object_reset(WIDGET(it), nit);
elm_widget_tree_unfocusable_set(VIEW(nit), EINA_FALSE);
elm_widget_tree_unfocusable_set(VIEW(prev_it), EINA_TRUE);
if (sd->freeze_events)
{
evas_object_freeze_events_set(VIEW(it), EINA_TRUE);

View File

@ -57,7 +57,6 @@ struct _Elm_Naviframe_Item
int ref;
Eina_Bool title_enabled : 1;
Eina_Bool unfocusable : 1;
Eina_Bool popping : 1; /**< a flag to notify the item is on poping. this flag is set true at the start of item pop. */
Eina_Bool delete_me : 1; /**< a flag to notify the item is on deletion. this flag is set true at the start of item deletion. */
};