fix crash when restarting after editing shelves, also refill shelf list after deleting a shelf

SVN revision: 72878
This commit is contained in:
Mike Blumenkrantz 2012-06-26 11:50:12 +00:00
parent 2aba767650
commit 5c62163103
1 changed files with 17 additions and 1 deletions

View File

@ -21,6 +21,7 @@ struct _E_Config_Dialog_Data
Evas_Object *o_contents; Evas_Object *o_contents;
const char *cur_shelf; const char *cur_shelf;
Eina_List *shelves;
E_Config_Dialog *cfd; E_Config_Dialog *cfd;
}; };
@ -62,6 +63,12 @@ _create_data(E_Config_Dialog *cfd)
static void static void
_free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
{ {
E_Shelf *es;
EINA_LIST_FREE(cfdata->shelves, es)
{
evas_object_data_del(es->o_base, "cfdata");
e_object_del_func_set(E_OBJECT(es), NULL);
}
E_FREE(cfdata); E_FREE(cfdata);
} }
@ -190,6 +197,7 @@ _ilist_item_new(E_Config_Dialog_Data *cfdata, Eina_Bool append, E_Shelf *es)
else else
e_widget_ilist_prepend(cfdata->o_list, ob, buf, e_widget_ilist_prepend(cfdata->o_list, ob, buf,
_ilist_cb_selected, cfdata, buf); _ilist_cb_selected, cfdata, buf);
cfdata->shelves = eina_list_append(cfdata->shelves, es);
} }
static void static void
@ -200,7 +208,9 @@ _ilist_empty(E_Config_Dialog_Data *cfdata)
E_Desk *desk; E_Desk *desk;
E_Zone *zone; E_Zone *zone;
if ((!cfdata) || (!cfdata->cfd) || (!cfdata->cfd->con) || (!cfdata->cfd->con->manager)) return;
zone = e_util_zone_current_get(cfdata->cfd->con->manager); zone = e_util_zone_current_get(cfdata->cfd->con->manager);
if (!zone) return;
desk = e_desk_current_get(zone); desk = e_desk_current_get(zone);
EINA_LIST_FOREACH(e_shelf_list(), l, es) EINA_LIST_FOREACH(e_shelf_list(), l, es)
{ {
@ -215,14 +225,19 @@ _ilist_empty(E_Config_Dialog_Data *cfdata)
if ((desk->x == sd->x) && (desk->y == sd->y)) if ((desk->x == sd->x) && (desk->y == sd->y))
{ {
e_object_del_func_set(E_OBJECT(es), NULL); e_object_del_func_set(E_OBJECT(es), NULL);
evas_object_data_del(es->o_base, "cfdata");
break; break;
} }
} }
} }
else else
e_object_del_func_set(E_OBJECT(es), NULL); {
e_object_del_func_set(E_OBJECT(es), NULL);
evas_object_data_del(es->o_base, "cfdata");
}
} }
e_widget_ilist_clear(cfdata->o_list); e_widget_ilist_clear(cfdata->o_list);
cfdata->shelves = eina_list_free(cfdata->shelves);
} }
static void static void
@ -414,6 +429,7 @@ _cb_dialog_destroy(void *data)
d = data; d = data;
e_object_unref(E_OBJECT(d->es)); e_object_unref(E_OBJECT(d->es));
_ilist_empty(d->cfdata); _ilist_empty(d->cfdata);
_ilist_fill(d->cfdata);
E_FREE(d); E_FREE(d);
} }