From b170c9ffe00cb94de1760b3bb9eb207c9c674540 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 21 Oct 2008 01:10:42 +0000 Subject: [PATCH] fix losing config! SVN revision: 36899 --- src/modules/ibar/e_mod_main.c | 75 ++++++++++++++++++++++++---- src/modules/ibox/e_mod_main.c | 64 ++++++++++++++++++++---- src/modules/temperature/e_mod_main.c | 5 ++ 3 files changed, 124 insertions(+), 20 deletions(-) diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index b5f1228ce..7a51a78eb 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -236,6 +236,10 @@ _gc_id_new(void) static void _gc_id_del(const char *id) { +/* yes - don't do this. on shutdown gadgets are deleted and this means config + * for them is deleted - that means empty config is saved. keep them around + * as if u add a gadget back it can pick up its old config again + * Config_Item *ci; ci = _ibar_config_item_get(id); @@ -244,6 +248,7 @@ _gc_id_del(const char *id) if (ci->id) eina_stringshare_del(ci->id); ibar_config->items = evas_list_remove(ibar_config->items, ci); } + */ } /**/ @@ -459,12 +464,17 @@ _ibar_config_item_get(const char *id) for (l = ibar_config->items; l; l = l->next) { ci = l->data; - if ((ci->id) && (ci->dir) && (!strcmp(ci->id, id))) - return ci; + if ((ci->id) && (!strcmp(ci->id, id))) + { + if (!ci->dir) + ci->dir = eina_stringshare_add("default"); + return ci; + } } } ci = E_NEW(Config_Item, 1); ci->id = eina_stringshare_add(id); + ci->dir = eina_stringshare_add("default"); ci->show_label = 1; ci->eap_label = 0; ibar_config->items = evas_list_append(ibar_config->items, ci); @@ -1227,9 +1237,9 @@ e_modapi_init(E_Module *m) Config_Item *ci; ibar_config = E_NEW(Config, 1); - + ci = E_NEW(Config_Item, 1); - ci->id = eina_stringshare_add("0"); + ci->id = eina_stringshare_add("ibar.1"); ci->dir = eina_stringshare_add("default"); ci->show_label = 1; ci->eap_label = 0; @@ -1237,13 +1247,56 @@ e_modapi_init(E_Module *m) } else { - Config_Item *ci; - const char *p; + Evas_List *removes = NULL; + Evas_List *l; - /* Init uuid */ - ci = evas_list_last(ibar_config->items)->data; - p = strrchr(ci->id, '.'); - if (p) uuid = atoi(p + 1); + for (l = ibar_config->items; l; l = l->next) + { + Config_Item *ci = l->data; + if (!ci->id) + removes = evas_list_append(removes, ci); + else if (!ci->dir) + removes = evas_list_append(removes, ci); + else + { + Evas_List *ll; + + for (ll = l->next; ll; ll = ll->next) + { + Config_Item *ci2 = ll->data; + if ((ci2->id) && (!strcmp(ci->id, ci2->id))) + { + removes = evas_list_append(removes, ci); + break; + } + } + } + } + while (removes) + { + Config_Item *ci = removes->data; + removes = evas_list_remove_list(removes, removes); + ibar_config->items = evas_list_remove(ibar_config->items, ci); + if (ci->id) eina_stringshare_del(ci->id); + if (ci->dir) eina_stringshare_del(ci->dir); + free(ci); + } + for (l = ibar_config->items; l; l = l->next) + { + Config_Item *ci = l->data; + if (ci->id) + { + const char *p; + p = strrchr(ci->id, '.'); + if (p) + { + int id; + + id = atoi(p + 1); + if (id > uuid) uuid = id; + } + } + } } ibar_config->module = m; @@ -1293,6 +1346,8 @@ e_modapi_shutdown(E_Module *m) EAPI int e_modapi_save(E_Module *m) { + Evas_List *l; + e_config_domain_save("module.ibar", conf_edd, ibar_config); return 1; } diff --git a/src/modules/ibox/e_mod_main.c b/src/modules/ibox/e_mod_main.c index 8fb579db4..7c774dfc5 100644 --- a/src/modules/ibox/e_mod_main.c +++ b/src/modules/ibox/e_mod_main.c @@ -246,6 +246,9 @@ _gc_id_new(void) static void _gc_id_del(const char *id) { +/* yes - don't do this. on shutdown gadgets are deleted and this means config + * for them is deleted - that means empty config is saved. keep them around + * as if u add a gadget back it can pick up its old config again Config_Item *ci; ci = _ibox_config_item_get(id); @@ -254,6 +257,7 @@ _gc_id_del(const char *id) if (ci->id) eina_stringshare_del(ci->id); ibox_config->items = evas_list_remove(ibox_config->items, ci); } + */ } /**/ @@ -1353,7 +1357,7 @@ e_modapi_init(E_Module *m) ibox_config = E_NEW(Config, 1); ci = E_NEW(Config_Item, 1); - ci->id = eina_stringshare_add("0"); + ci->id = eina_stringshare_add("ibox.1"); ci->show_label = 0; ci->show_zone = 1; ci->show_desk = 0; @@ -1362,17 +1366,57 @@ e_modapi_init(E_Module *m) } else { - Config_Item *ci; - const char *p; - - /* Init uuid */ - ci = evas_list_last(ibox_config->items)->data; - p = strrchr(ci->id, '.'); - if (p) uuid = atoi(p + 1); + Evas_List *removes = NULL; + Evas_List *l; + + for (l = ibox_config->items; l; l = l->next) + { + Config_Item *ci = l->data; + if (!ci->id) + removes = evas_list_append(removes, ci); + else + { + Evas_List *ll; + + for (ll = l->next; ll; ll = ll->next) + { + Config_Item *ci2 = ll->data; + if ((ci2->id) && (!strcmp(ci->id, ci2->id))) + { + removes = evas_list_append(removes, ci); + break; + } + } + } + } + while (removes) + { + Config_Item *ci = removes->data; + removes = evas_list_remove_list(removes, removes); + ibox_config->items = evas_list_remove(ibox_config->items, ci); + if (ci->id) eina_stringshare_del(ci->id); + free(ci); + } + for (l = ibox_config->items; l; l = l->next) + { + Config_Item *ci = l->data; + if (ci->id) + { + const char *p; + p = strrchr(ci->id, '.'); + if (p) + { + int id; + + id = atoi(p + 1); + if (id > uuid) uuid = id; + } + } + } } - + ibox_config->module = m; - + ibox_config->handlers = evas_list_append (ibox_config->handlers, ecore_event_handler_add (E_EVENT_BORDER_ADD, _ibox_cb_event_border_add, NULL)); diff --git a/src/modules/temperature/e_mod_main.c b/src/modules/temperature/e_mod_main.c index f1d75cae5..6f3266a7b 100644 --- a/src/modules/temperature/e_mod_main.c +++ b/src/modules/temperature/e_mod_main.c @@ -191,6 +191,10 @@ _gc_id_new(void) static void _gc_id_del(const char *id) { +/* yes - don't do this. on shutdown gadgets are deleted and this means config + * for them is deleted - that means empty config is saved. keep them around + * as if u add a gadget back it can pick up its old config again + * Config_Face *inst; inst = evas_hash_find(temperature_config->faces, id); @@ -200,6 +204,7 @@ _gc_id_del(const char *id) if (inst->sensor_name) eina_stringshare_del(inst->sensor_name); free(inst); } + */ } /**/