elementary/naviframe - Keep the smart members of the naviframe views whenever resize object is changed.

This prevents the dangling view objects of the naviframe and keep the layer consistency.
This commit is contained in:
ChunEon Park 2013-06-11 18:08:10 +09:00
parent 06c869eece
commit 2368f82e31
3 changed files with 46 additions and 22 deletions

View File

@ -1414,3 +1414,9 @@
2013-06-05 Ryuan Choi (ryuan) 2013-06-05 Ryuan Choi (ryuan)
* Fix colorselector send "changed" signal twice when pressed color bar. * Fix colorselector send "changed" signal twice when pressed color bar.
2013-06-11 ChunEon Park (Hermet)
* Keep the smart members of the naviframe views whenever resize object is changed.
This prevents the dangling view objects of the naviframe and keep the layer
consistency.

View File

@ -243,6 +243,7 @@ Fixes:
* Up/down step of hour decimal of elm_clock is changed to 12 not to touch hour unit at editing mode. * Up/down step of hour decimal of elm_clock is changed to 12 not to touch hour unit at editing mode.
* Remove the keyboard area in the conformant if the keyboard state is off. * Remove the keyboard area in the conformant if the keyboard state is off.
* Fix colorselector send "changed" signal twice when pressed color bar. * Fix colorselector send "changed" signal twice when pressed color bar.
* Keep the smart members of the naviframe views whenever resize object is changed. This prevents the dangling view objects of the naviframe and keep the layer consistency.
Removals: Removals:

View File

@ -36,6 +36,24 @@ static const char SIG_CLICKED[] = "clicked";
static void _on_item_back_btn_clicked(void *data, Evas_Object *obj, void *event_info __UNUSED__); static void _on_item_back_btn_clicked(void *data, Evas_Object *obj, void *event_info __UNUSED__);
static void
_resize_object_reset(Evas_Object *obj, Elm_Naviframe_Item *it,
Elm_Naviframe_Item *prev_it, Eina_Bool dummy)
{
ELM_NAVIFRAME_DATA_GET(obj, sd);
if (it) elm_widget_resize_object_set(obj, VIEW(it));
//Recover previous smart members.
if (prev_it)
{
elm_widget_sub_object_add(obj, VIEW(prev_it));
evas_object_smart_member_add(VIEW(prev_it), obj);
}
else if (dummy)
evas_object_smart_member_add(sd->dummy_edje, obj);
}
static void static void
_prev_page_focus_recover(Elm_Naviframe_Item *it) _prev_page_focus_recover(Elm_Naviframe_Item *it)
{ {
@ -478,7 +496,6 @@ _item_del_pre_hook(Elm_Object_Item *it)
} }
sd->stack = eina_inlist_remove(sd->stack, EINA_INLIST_GET(nit)); sd->stack = eina_inlist_remove(sd->stack, EINA_INLIST_GET(nit));
if (!sd->stack) elm_widget_resize_object_set(WIDGET(it), sd->dummy_edje);
if (top && !sd->on_deletion) /* must raise another one */ if (top && !sd->on_deletion) /* must raise another one */
{ {
@ -488,10 +505,9 @@ _item_del_pre_hook(Elm_Object_Item *it)
if (!prev_it) goto end; if (!prev_it) goto end;
if (sd->freeze_events) if (sd->freeze_events)
{ evas_object_freeze_events_set(VIEW(prev_it), EINA_FALSE);
evas_object_freeze_events_set(VIEW(prev_it), EINA_FALSE); _resize_object_reset(WIDGET(prev_it), prev_it, NULL,
} EINA_FALSE);
elm_widget_resize_object_set(WIDGET(prev_it), VIEW(prev_it));
evas_object_show(VIEW(prev_it)); evas_object_show(VIEW(prev_it));
evas_object_raise(VIEW(prev_it)); evas_object_raise(VIEW(prev_it));
@ -501,6 +517,8 @@ _item_del_pre_hook(Elm_Object_Item *it)
} }
end: end:
if (!sd->stack)
_resize_object_reset(WIDGET(it), NULL, NULL, EINA_TRUE);
_item_free(nit); _item_free(nit);
@ -1141,6 +1159,7 @@ _item_new(Evas_Object *obj,
//item base layout //item base layout
VIEW(it) = elm_layout_add(obj); VIEW(it) = elm_layout_add(obj);
evas_object_data_set(VIEW(it), "_elm_leaveme", (void *) EINA_TRUE);
evas_object_smart_member_add(VIEW(it), obj); evas_object_smart_member_add(VIEW(it), obj);
evas_object_event_callback_add evas_object_event_callback_add
@ -1349,6 +1368,7 @@ _elm_naviframe_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
} }
sd->on_deletion = EINA_FALSE; sd->on_deletion = EINA_FALSE;
evas_object_del(sd->dummy_edje);
eo_do_super(obj, MY_CLASS, evas_obj_smart_del()); eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
} }
@ -1471,13 +1491,10 @@ _item_push(Eo *obj, void *_pd, va_list *list)
if (!it) return; if (!it) return;
evas_object_show(VIEW(it)); evas_object_show(VIEW(it));
elm_widget_resize_object_set(obj, VIEW(it));
if (prev_it)
{
elm_widget_focused_object_clear(VIEW(prev_it));
elm_widget_sub_object_add(obj, VIEW(prev_it));
}
if (prev_it) elm_widget_focused_object_clear(VIEW(prev_it));
_resize_object_reset(obj, it, prev_it,
(prev_it ? : EINA_FALSE, EINA_TRUE));
if (prev_it) if (prev_it)
{ {
if (sd->freeze_events) if (sd->freeze_events)
@ -1602,9 +1619,9 @@ _item_insert_after(Eo *obj, void *_pd, va_list *list)
if (top_inserted) if (top_inserted)
{ {
elm_widget_resize_object_set(obj, VIEW(it));
elm_widget_focused_object_clear(VIEW(after)); elm_widget_focused_object_clear(VIEW(after));
elm_widget_sub_object_add(obj, VIEW(after)); _resize_object_reset(obj, it, (Elm_Naviframe_Item *)after,
EINA_FALSE);
evas_object_show(VIEW(it)); evas_object_show(VIEW(it));
evas_object_hide(VIEW(after)); evas_object_hide(VIEW(after));
elm_object_focus_set(VIEW(it), EINA_TRUE); elm_object_focus_set(VIEW(it), EINA_TRUE);
@ -1664,7 +1681,6 @@ _item_pop(Eo *obj, void *_pd, va_list *list)
(sd->stack->last->prev, Elm_Naviframe_Item); (sd->stack->last->prev, Elm_Naviframe_Item);
sd->stack = eina_inlist_remove(sd->stack, EINA_INLIST_GET(it)); sd->stack = eina_inlist_remove(sd->stack, EINA_INLIST_GET(it));
if (!sd->stack) elm_widget_resize_object_set(obj, sd->dummy_edje);
if (prev_it) if (prev_it)
{ {
@ -1674,7 +1690,7 @@ _item_pop(Eo *obj, void *_pd, va_list *list)
evas_object_freeze_events_set(VIEW(prev_it), EINA_TRUE); evas_object_freeze_events_set(VIEW(prev_it), EINA_TRUE);
} }
elm_widget_resize_object_set(obj, VIEW(prev_it)); _resize_object_reset(obj, prev_it, NULL, EINA_FALSE);
evas_object_raise(VIEW(prev_it)); evas_object_raise(VIEW(prev_it));
/* these 2 signals MUST take place simultaneously */ /* these 2 signals MUST take place simultaneously */
@ -1690,7 +1706,11 @@ _item_pop(Eo *obj, void *_pd, va_list *list)
sd->popping = eina_list_append(sd->popping, it); sd->popping = eina_list_append(sd->popping, it);
} }
else else
elm_widget_item_del(it); {
if (!sd->stack)
_resize_object_reset(obj, NULL, NULL, EINA_TRUE);
elm_widget_item_del(it);
}
*ret = content; *ret = content;
} }
@ -1750,16 +1770,13 @@ elm_naviframe_item_promote(Elm_Object_Item *it)
/* remember, last is 1st on the naviframe, push it to last pos. */ /* remember, last is 1st on the naviframe, push it to last pos. */
sd->stack = eina_inlist_demote(sd->stack, EINA_INLIST_GET(nit)); sd->stack = eina_inlist_demote(sd->stack, EINA_INLIST_GET(nit));
elm_widget_resize_object_set(WIDGET(it), VIEW(nit));
elm_widget_focused_object_clear(VIEW(prev_top));
elm_widget_sub_object_add(WIDGET(it), VIEW(prev_top));
/* this was the previous top one */ /* this was the previous top one */
prev_it = EINA_INLIST_CONTAINER_GET prev_it = EINA_INLIST_CONTAINER_GET
(sd->stack->last->prev, Elm_Naviframe_Item); (sd->stack->last->prev, Elm_Naviframe_Item);
prev_it->unfocusable = elm_widget_tree_unfocusable_get(VIEW(prev_it)); elm_widget_focused_object_clear(VIEW(nit));
elm_widget_tree_unfocusable_set(VIEW(prev_it), EINA_TRUE); _resize_object_reset(WIDGET(it), nit, prev_it,
(prev_it ? EINA_FALSE : EINA_TRUE));
if (sd->freeze_events) if (sd->freeze_events)
{ {