Evas masking: Fix another memory leak

When the mask is hidden, free its surface.
This will fix leaks in, say, a genlist full of masked
objects.
This commit is contained in:
Jean-Philippe Andre 2015-01-22 17:43:23 +09:00
parent 5cd200194e
commit bc436ba95f
1 changed files with 21 additions and 0 deletions

View File

@ -1261,6 +1261,27 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
}
EINA_COW_STATE_WRITE_END(obj, state_write, cur);
if (obj->mask->is_mask)
{
if (obj->mask->surface ||
obj->mask->x || obj->mask->y || obj->mask->w || obj->mask->h ||
obj->mask->is_alpha || obj->mask->redraw)
{
EINA_COW_WRITE_BEGIN(evas_object_mask_cow, obj->mask,
Evas_Object_Mask_Data, mask)
mask->redraw = EINA_FALSE;
mask->is_alpha = EINA_FALSE;
mask->x = mask->y = mask->w = mask->h = 0;
if (mask->surface)
{
obj->layer->evas->engine.func->image_map_surface_free
(obj->layer->evas->engine.data.output, mask->surface);
mask->surface = NULL;
}
EINA_COW_WRITE_END(evas_object_mask_cow, obj->mask, mask);
}
}
evas_object_change(eo_obj, obj);
evas_object_clip_dirty(eo_obj, obj);
if (obj->layer->evas && !(obj->layer->evas->is_frozen))