}
+static void
+_edje_box_child_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child __UNUSED__, void *einfo __UNUSED__)
+{
+ Edje_Real_Part *rp = data;
+ rp->edje->dirty = 1;
+ _edje_recalc(rp->edje);
+}
+
+static void
+_edje_box_child_add(Edje_Real_Part *rp, Evas_Object *child)
+{
+ evas_object_event_callback_add
+ (child, EVAS_CALLBACK_DEL, _edje_box_child_del_cb, rp);
+
+ rp->edje->dirty = 1;
+ _edje_recalc(rp->edje);
+}
+
+static void
+_edje_box_child_remove(Edje_Real_Part *rp, Evas_Object *child)
+{
+ evas_object_event_callback_del_full
+ (child, EVAS_CALLBACK_DEL, _edje_box_child_del_cb, rp);
+
+ rp->edje->dirty = 1;
+ _edje_recalc(rp->edje);
+}
+
Evas_Bool
_edje_real_part_box_append(Edje_Real_Part *rp, Evas_Object *child_obj)
{
opt = evas_object_box_append(rp->object, child_obj);
if (!opt) return 0;
+ _edje_box_child_add(rp, child_obj);
+
return 1;
}
opt = evas_object_box_prepend(rp->object, child_obj);
if (!opt) return 0;
+ _edje_box_child_add(rp, child_obj);
+
return 1;
}
opt = evas_object_box_insert_before(rp->object, child_obj, ref);
if (!opt) return 0;
+ _edje_box_child_add(rp, child_obj);
+
return 1;
}
opt = evas_object_box_insert_at(rp->object, child_obj, pos);
if (!opt) return 0;
+ _edje_box_child_add(rp, child_obj);
+
return 1;
}
_edje_real_part_box_remove(Edje_Real_Part *rp, Evas_Object *child_obj)
{
if (evas_object_data_get(child_obj, "\377 edje.box_item")) return NULL;
- if (evas_object_box_remove(rp->object, child_obj))
- return child_obj;
- return NULL;
+ if (!evas_object_box_remove(rp->object, child_obj)) return NULL;
+ _edje_box_child_remove(rp, child_obj);
+ return child_obj;
}
Evas_Object *
if (!opt) return NULL;
child_obj = opt->obj;
if (evas_object_data_get(child_obj, "\377 edje.box_item")) return NULL;
- if (evas_object_box_remove_at(rp->object, pos))
- return child_obj;
- return NULL;
+ if (!evas_object_box_remove_at(rp->object, pos)) return NULL;
+ _edje_box_child_remove(rp, child_obj);
+ return child_obj;
}
Evas_Bool
Eina_List *children;
int i;
- if (eina_list_count(rp->items) == 0)
- return evas_object_box_remove_all(rp->object, clear);
i = 0;
children = evas_object_box_children_get(rp->object);
while (children)
{
Evas_Object *child_obj = children->data;
+ _edje_box_child_remove(rp, child_obj);
if (evas_object_data_get(child_obj, "\377 edje.box_item"))
i++;
else
return 1;
}
+static void
+_edje_table_child_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child __UNUSED__, void *einfo __UNUSED__)
+{
+ Edje_Real_Part *rp = data;
+ rp->edje->dirty = 1;
+ _edje_recalc(rp->edje);
+}
+
+static void
+_edje_table_child_add(Edje_Real_Part *rp, Evas_Object *child)
+{
+ evas_object_event_callback_add
+ (child, EVAS_CALLBACK_DEL, _edje_table_child_del_cb, rp);
+
+ rp->edje->dirty = 1;
+ _edje_recalc(rp->edje);
+}
+
+static void
+_edje_table_child_remove(Edje_Real_Part *rp, Evas_Object *child)
+{
+ evas_object_event_callback_del_full
+ (child, EVAS_CALLBACK_DEL, _edje_table_child_del_cb, rp);
+
+ rp->edje->dirty = 1;
+ _edje_recalc(rp->edje);
+}
+
/** Packs an object into the table
* @param obj A valid Evas_Object handle
* @param part The part name
Evas_Bool
_edje_real_part_table_pack(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan)
{
- return evas_object_table_pack(rp->object, child_obj, col, row, colspan, rowspan);
+ Evas_Bool ret = evas_object_table_pack(rp->object, child_obj, col, row, colspan, rowspan);
+
+ _edje_table_child_add(rp, child_obj);
+
+ return ret;
}
Evas_Bool
_edje_real_part_table_unpack(Edje_Real_Part *rp, Evas_Object *child_obj)
{
- return evas_object_table_unpack(rp->object, child_obj);
+ Evas_Bool ret = evas_object_table_unpack(rp->object, child_obj);
+
+ if (ret)
+ _edje_table_child_remove(rp, child_obj);
+
+ return ret;
}
void
{
Eina_List *children;
- if (eina_list_count(rp->items) == 0)
- {
- evas_object_table_clear(rp->object, clear);
- return;
- }
children = evas_object_table_children_get(rp->object);
while (children)
{
Evas_Object *child_obj = children->data;
+ _edje_table_child_remove(rp, child_obj);
if (!evas_object_data_get(child_obj, "\377 edje.table_item"))
{
evas_object_table_unpack(rp->object, child_obj);