fix deskpreview widget deletion for individual deskpreview objects

SVN revision: 73807
This commit is contained in:
Mike Blumenkrantz 2012-07-13 10:25:37 +00:00
parent 1e7efd8096
commit 35f14f24e1
1 changed files with 14 additions and 9 deletions

View File

@ -17,6 +17,7 @@ struct _E_Widget_Desk_Data
};
/* local function prototypes */
static void _e_wid_data_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__);
static void _e_wid_del_hook(Evas_Object *obj);
static void _e_wid_reconfigure(E_Widget_Data *wd);
static void _e_wid_desk_cb_config(void *data, Evas *evas, Evas_Object *obj, void *event);
@ -91,6 +92,7 @@ e_widget_deskpreview_desk_add(Evas_Object *obj, E_Zone *zone, int x, int y, int
evas_object_show(dd->icon);
evas_object_data_set(dd->icon, "desk_data", dd);
dd->configurable = EINA_TRUE;
evas_object_event_callback_add(dd->icon, EVAS_CALLBACK_FREE, _e_wid_data_del, dd);
evas_object_event_callback_add(dd->icon, EVAS_CALLBACK_MOUSE_DOWN,
_e_wid_desk_cb_config, dd);
dd->bg_upd_hdl = ecore_event_handler_add(E_EVENT_BG_UPDATE,
@ -119,6 +121,17 @@ e_widget_deskpreview_desk_configurable_set(Evas_Object *obj, Eina_Bool enable)
}
/* local function prototypes */
static void
_e_wid_data_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
E_Widget_Desk_Data *dd;
dd = data;
if (!dd) return;
if (dd->bg_upd_hdl) ecore_event_handler_del(dd->bg_upd_hdl);
if (dd->thumb) evas_object_del(dd->thumb);
E_FREE(dd);
}
static void
_e_wid_del_hook(Evas_Object *obj)
{
@ -128,15 +141,7 @@ _e_wid_del_hook(Evas_Object *obj)
if (!(wd = e_widget_data_get(obj))) return;
EINA_LIST_FREE(wd->desks, o)
{
E_Widget_Desk_Data *dd;
if (!(dd = evas_object_data_get(o, "desk_data"))) continue;
if (dd->bg_upd_hdl) ecore_event_handler_del(dd->bg_upd_hdl);
evas_object_del(dd->thumb);
evas_object_del(o);
E_FREE(dd);
}
evas_object_del(o);
E_FREE(wd);
}