From c5dd3b75a27c6a6e8dcc15cfd101c97ab58b12ac Mon Sep 17 00:00:00 2001 From: sebastid Date: Thu, 20 Jul 2006 13:36:02 +0000 Subject: [PATCH] Always keep shelf list sorted on id. SVN revision: 24070 --- src/bin/e_int_config_shelf.c | 42 +++++++++++++----------------------- src/bin/e_shelf.c | 29 +++++++++++++++++++------ 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/bin/e_int_config_shelf.c b/src/bin/e_int_config_shelf.c index db505dc5c..809dad55f 100644 --- a/src/bin/e_int_config_shelf.c +++ b/src/bin/e_int_config_shelf.c @@ -137,33 +137,21 @@ static void _cb_add(void *data, void *data2) { E_Config_Dialog_Data *cfdata; - Evas_List *shelves; - - cfdata = data; - while ((shelves = e_shelf_list())) - { - E_Shelf *es; - - es = shelves->data; - e_object_del(E_OBJECT(es)); - } - //// - { - E_Config_Shelf *cfg; - - cfg = E_NEW(E_Config_Shelf, 1); - cfg->name = evas_stringshare_add("shelf"); - cfg->container = cfdata->cfd->con->num; - cfg->zone = cfdata->cfd->dia->win->border->zone->num; - cfg->popup = 1; - cfg->layer = 200; - cfg->orient = E_GADCON_ORIENT_CORNER_BR; - cfg->fit_along = 1; - cfg->fit_size = 0; - cfg->style = evas_stringshare_add("default"); - cfg->size = 40; - e_config->shelves = evas_list_append(e_config->shelves, cfg); - } + E_Config_Shelf *cfg; + + cfg = E_NEW(E_Config_Shelf, 1); + cfg->name = evas_stringshare_add("shelf"); + cfg->container = cfdata->cfd->con->num; + cfg->zone = cfdata->cfd->dia->win->border->zone->num; + cfg->popup = 1; + cfg->layer = 200; + cfg->orient = E_GADCON_ORIENT_CORNER_BR; + cfg->fit_along = 1; + cfg->fit_size = 0; + cfg->style = evas_stringshare_add("default"); + cfg->size = 40; + e_config->shelves = evas_list_append(e_config->shelves, cfg); + e_shelf_config_init(); e_config_save_queue(); diff --git a/src/bin/e_shelf.c b/src/bin/e_shelf.c index 399369a74..1f53036df 100644 --- a/src/bin/e_shelf.c +++ b/src/bin/e_shelf.c @@ -19,9 +19,9 @@ static void _e_shelf_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, voi static void _e_shelf_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_shelf_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_shelf_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static int _e_shelf_cb_id_sort(void *data1, void *data2); static Evas_List *shelves = NULL; -static int shelf_id = 0; /* externally accessible functions */ EAPI int @@ -41,6 +41,14 @@ e_shelf_config_init(void) { Evas_List *l; + while (shelves) + { + E_Shelf *es; + + es = shelves->data; + e_object_del(E_OBJECT(es)); + } + for (l = e_config->shelves; l; l = l->next) { E_Config_Shelf *cf_es; @@ -133,13 +141,11 @@ e_shelf_zone_new(E_Zone *zone, const char *name, const char *style, int popup, i evas_object_layer_set(es->o_event, layer); evas_object_layer_set(es->o_base, layer); } - if (id < 0) - { - es->id = evas_list_count(shelves); - shelf_id++; - } + if (id <= 0) + es->id = evas_list_count(shelves); else es->id = id; + snprintf(buf, sizeof(buf), "%i", es->id); es->gadcon = e_gadcon_swallowed_new(es->name, buf, es->o_base, "items"); e_gadcon_min_size_request_callback_set(es->gadcon, @@ -161,6 +167,7 @@ e_shelf_zone_new(E_Zone *zone, const char *name, const char *style, int popup, i es); shelves = evas_list_append(shelves, es); + shelves = evas_list_sort(shelves, -1, _e_shelf_cb_id_sort); return es; } @@ -881,3 +888,13 @@ _e_shelf_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info ev = event_info; edje_object_signal_emit(es->o_base, "inactive", ""); } + +static int +_e_shelf_cb_id_sort(void *data1, void *data2) +{ + E_Shelf *es1, *es2; + + es1 = data1; + es2 = data2; + return (es1->id) > (es2->id); +}