diff --git a/src/bin/e_border.c b/src/bin/e_border.c index e63a399b5..826a8da33 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -885,11 +885,12 @@ _e_border_free(E_Border *bd) ECORE_X_MODIFIER_ALT, 0); ecore_x_window_del(bd->win); + bd->container->clients = evas_list_remove(bd->container->clients, bd); - borders = evas_list_remove(borders, bd); - bd->zone->clients = evas_list_remove(bd->zone->clients, bd); bd->desk->clients = evas_list_remove(bd->desk->clients, bd); + borders = evas_list_remove(borders, bd); + free(bd); } diff --git a/src/bin/e_object.c b/src/bin/e_object.c index eb70ff2f7..2fcb1c9a8 100644 --- a/src/bin/e_object.c +++ b/src/bin/e_object.c @@ -44,9 +44,10 @@ void e_object_del(E_Object *obj) { E_OBJECT_CHECK(obj); - obj->deleted = 1; + if (obj->deleted) return; if (obj->del_att_func) obj->del_att_func(obj); if (obj->del_func) obj->del_func(obj); + obj->deleted = 1; e_object_unref(obj); }