edje: Fix rare issue with map

In the following sequence, the swallowed object map property is
never reset as it should have been:

- swallow object
- start program, change state to have a map
- do something
- start program, change state to have no map
    but before render, unswallow the object

At this point, the object will never be un-mapped. This is weird.
Somehow edje_calc avoids calling evas_object_map_[enable_]_set
excessively, but I believe the issue is that the object does not
need recalc. Its container needed recalc, not the child (which is
mapped). I'm not 100% sure.

Test case:
  elementary_test -to "Genlist Decorate Item Mode"
  Click on rotate, select a few items, scroll up and down. Enjoy.

Ref T1551

@fix
This commit is contained in:
Jean-Philippe Andre 2017-03-13 23:34:22 +09:00
parent 635b4ad8f3
commit 7072fbc2bf
1 changed files with 9 additions and 0 deletions

View File

@ -6279,6 +6279,15 @@ _edje_real_part_swallow_clear(Edje *ed, Edje_Real_Part *rp)
if ((rp->type != EDJE_RP_TYPE_SWALLOW) ||
(!rp->typedata.swallow)) return;
if (!rp->typedata.swallow->swallowed_object) return;
if (rp->chosen_description->map.on ||
(rp->invalidate
#ifdef HAVE_EPHYSICS
&& rp->prev_description && rp->prev_description->map.on
#endif
))
{
evas_object_map_enable_set(rp->typedata.swallow->swallowed_object, EINA_FALSE);
}
_eo_unparent_helper(rp->typedata.swallow->swallowed_object, ed->obj);
evas_object_smart_member_del(rp->typedata.swallow->swallowed_object);
evas_object_event_callback_del_full(rp->typedata.swallow->swallowed_object,