ref and free desktops for .order files.

SVN revision: 30992
This commit is contained in:
Sebastian Dransfeld 2007-07-26 12:29:52 +00:00
parent 175c2ab88d
commit 6d53b0d420
2 changed files with 30 additions and 10 deletions

View File

@ -903,11 +903,6 @@ main(int argc, char **argv)
/* if we were flagged to restart, then restart. */ /* if we were flagged to restart, then restart. */
if (restart) if (restart)
{ {
/* selected shutdown */
#if 0
e_ipc_shutdown();
ecore_file_shutdown();
#endif
e_util_env_set("E_RESTART_OK", "1"); e_util_env_set("E_RESTART_OK", "1");
ecore_app_restart(); ecore_app_restart();
} }

View File

@ -68,10 +68,15 @@ e_order_update_callback_set(E_Order *eo, void (*cb)(void *data, E_Order *eo), vo
EAPI void EAPI void
e_order_remove(E_Order *eo, Efreet_Desktop *desktop) e_order_remove(E_Order *eo, Efreet_Desktop *desktop)
{ {
Evas_List *tmp;
E_OBJECT_CHECK(eo); E_OBJECT_CHECK(eo);
E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE);
eo->desktops = evas_list_remove(eo->desktops, desktop); tmp = evas_list_find_list(eo->desktops, desktop);
if (!tmp) return;
efreet_desktop_free(tmp->data);
eo->desktops = evas_list_remove_list(eo->desktops, tmp);
_e_order_save(eo); _e_order_save(eo);
} }
@ -81,6 +86,7 @@ e_order_append(E_Order *eo, Efreet_Desktop *desktop)
E_OBJECT_CHECK(eo); E_OBJECT_CHECK(eo);
E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE);
efreet_desktop_ref(desktop);
eo->desktops = evas_list_append(eo->desktops, desktop); eo->desktops = evas_list_append(eo->desktops, desktop);
_e_order_save(eo); _e_order_save(eo);
} }
@ -91,6 +97,7 @@ e_order_prepend_relative(E_Order *eo, Efreet_Desktop *desktop, Efreet_Desktop *b
E_OBJECT_CHECK(eo); E_OBJECT_CHECK(eo);
E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE);
efreet_desktop_ref(desktop);
eo->desktops = evas_list_prepend_relative(eo->desktops, desktop, before); eo->desktops = evas_list_prepend_relative(eo->desktops, desktop, before);
_e_order_save(eo); _e_order_save(eo);
} }
@ -144,7 +151,10 @@ e_order_clear(E_Order *eo)
E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE);
while (eo->desktops) while (eo->desktops)
eo->desktops = evas_list_remove_list(eo->desktops, eo->desktops); {
efreet_desktop_free(eo->desktops->data);
eo->desktops = evas_list_remove_list(eo->desktops, eo->desktops);
}
_e_order_save(eo); _e_order_save(eo);
} }
@ -152,7 +162,11 @@ e_order_clear(E_Order *eo)
static void static void
_e_order_free(E_Order *eo) _e_order_free(E_Order *eo)
{ {
evas_list_free(eo->desktops); while (eo->desktops)
{
efreet_desktop_free(eo->desktops->data);
eo->desktops = evas_list_remove_list(eo->desktops, eo->desktops);
}
if (eo->path) evas_stringshare_del(eo->path); if (eo->path) evas_stringshare_del(eo->path);
if (eo->monitor) ecore_file_monitor_del(eo->monitor); if (eo->monitor) ecore_file_monitor_del(eo->monitor);
orders = evas_list_remove(orders, eo); orders = evas_list_remove(orders, eo);
@ -177,7 +191,11 @@ _e_order_read(E_Order *eo)
FILE *f; FILE *f;
char *dir; char *dir;
eo->desktops = evas_list_free(eo->desktops); while (eo->desktops)
{
efreet_desktop_free(eo->desktops->data);
eo->desktops = evas_list_remove_list(eo->desktops, eo->desktops);
}
if (!eo->path) return; if (!eo->path) return;
dir = ecore_file_dir_get(eo->path); dir = ecore_file_dir_get(eo->path);
@ -208,7 +226,11 @@ _e_order_read(E_Order *eo)
if (!desktop) if (!desktop)
desktop = efreet_desktop_get(ecore_file_file_get(buf)); desktop = efreet_desktop_get(ecore_file_file_get(buf));
if (!desktop) if (!desktop)
desktop = efreet_util_desktop_file_id_find(ecore_file_file_get(buf)); {
desktop = efreet_util_desktop_file_id_find(ecore_file_file_get(buf));
/* Need to ref this as we only get a cache pointer from efreet_util */
if (desktop) efreet_desktop_ref(desktop);
}
if (desktop) eo->desktops = evas_list_append(eo->desktops, desktop); if (desktop) eo->desktops = evas_list_append(eo->desktops, desktop);
} }
} }
@ -283,6 +305,7 @@ _e_order_cb_efreet_desktop_change(void *data, int ev_type, void *ev)
{ {
if (l2->data == event->current) if (l2->data == event->current)
{ {
efreet_desktop_free(l2->data);
eo->desktops = evas_list_remove_list(eo->desktops, l2); eo->desktops = evas_list_remove_list(eo->desktops, l2);
changed = 1; changed = 1;
} }
@ -303,6 +326,8 @@ _e_order_cb_efreet_desktop_change(void *data, int ev_type, void *ev)
{ {
if (l2->data == event->previous) if (l2->data == event->previous)
{ {
efreet_desktop_free(l2->data);
efreet_desktop_ref(event->current);
l2->data = event->current; l2->data = event->current;
changed = 1; changed = 1;
} }