Enlightenment CVS committal Author : englebass Project : e17 Module : apps/e
Dir : e17/apps/e/src/modules/ibox Modified Files: e_mod_config.c e_mod_main.c e_mod_main.h Log Message: We need id's for gadgets which are independent of shelves, so if we move a gadget from one shelf to another it will keep the same config. Since the id is mainly for the module to find the appropriate config for a gadget, the module is now responsible for creating id's for gadgets config. One problem is that we no longer can trust the id of a gadget, so we need to store a reference between a gadget and its config after startup. No big deal. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_config.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -3 -r1.31 -r1.32 --- e_mod_config.c 24 Apr 2007 13:29:45 -0000 1.31 +++ e_mod_config.c 16 Sep 2007 00:02:53 -0000 1.32 @@ -165,7 +165,7 @@ ci->show_zone = cfdata->zone_policy; ci->show_desk = cfdata->desk_policy; - _ibox_config_update(); + _ibox_config_update(ci); e_config_save_queue(); return 1; } =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -3 -r1.84 -r1.85 --- e_mod_main.c 5 Jun 2007 15:13:08 -0000 1.84 +++ e_mod_main.c 16 Sep 2007 00:02:53 -0000 1.85 @@ -12,13 +12,15 @@ static void _gc_orient(E_Gadcon_Client *gcc); static char *_gc_label(void); static Evas_Object *_gc_icon(Evas *evas); +static const char *_gc_id_new(void); +static void _gc_id_del(const char *id); /* and actually define the gadcon class that this module provides (just 1) */ static const E_Gadcon_Client_Class _gadcon_class = { GADCON_CLIENT_CLASS_VERSION, "ibox", { - _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon + _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, _gc_id_del }, E_GADCON_CLIENT_STYLE_INSET }; @@ -40,6 +42,7 @@ Evas_Object *o_ibox; IBox *ibox; E_Drop_Handler *drop_handler; + Config_Item *ci; }; struct _IBox @@ -52,10 +55,6 @@ IBox_Icon *ic_drop_before; int drop_before; Evas_List *icons; - int show_label; - int show_zone; - int show_desk; - int icon_label; E_Zone *zone; Evas_Coord dnd_x, dnd_y; }; @@ -140,16 +139,12 @@ inst = E_NEW(Instance, 1); ci = _ibox_config_item_get(id); + inst->ci = ci; b = _ibox_new(gc->evas, gc->zone); - b->show_label = ci->show_label; - b->show_zone = ci->show_zone; - b->show_desk = ci->show_desk; - b->icon_label = ci->icon_label; - _ibox_fill(b); - b->inst = inst; inst->ibox = b; + _ibox_fill(b); o = b->o_box; gcc = e_gadcon_client_new(gc, name, id, style, o); gcc->data = inst; @@ -236,6 +231,29 @@ edje_object_file_set(o, buf, "icon"); return o; } + +static const char * +_gc_id_new(void) +{ + Config_Item *ci; + + ci = _ibox_config_item_get(NULL); + return ci->id; +} + +static void +_gc_id_del(const char *id) +{ + Config_Item *ci; + + ci = _ibox_config_item_get(id); + if (ci) + { + if (ci->id) evas_stringshare_del(ci->id); + ibox_config->items = evas_list_remove(ibox_config->items, ci); + } +} + /**/ /***************************************************************************/ @@ -352,17 +370,17 @@ while ((bd = e_container_border_list_next(bl))) { ok = 0; - if ((b->show_zone == 0) && (bd->iconic)) + if ((b->inst->ci->show_zone == 0) && (bd->iconic)) { ok = 1; } - else if((b->show_zone == 1) && (bd->iconic)) + else if((b->inst->ci->show_zone == 1) && (bd->iconic)) { - if ((b->show_desk == 0) && (bd->zone == b->zone)) + if ((b->inst->ci->show_desk == 0) && (bd->zone == b->zone)) { ok = 1; } - else if((b->show_desk == 1) && (bd->zone == b->zone) && + else if((b->inst->ci->show_desk == 1) && (bd->zone == b->zone) && (bd->desk == e_desk_current_get(b->zone))) { ok = 1; @@ -538,7 +556,7 @@ { char *label = NULL; - switch (ic->ibox->icon_label) + switch (ic->ibox->inst->ci->icon_label) { case 0: label = ic->border->client.netwm.name; @@ -594,18 +612,12 @@ for (l = ibox_config->instances; l; l = l->next) { Instance *inst; - Config_Item *ci; inst = l->data; - ci = _ibox_config_item_get(inst->gcc->id); - if (!ci) continue; - - if (ci->show_zone == 0) + if (inst->ci->show_zone == 0) + ibox = evas_list_append(ibox, inst->ibox); + else if ((inst->ci->show_zone == 1) && (inst->ibox->zone == zone)) ibox = evas_list_append(ibox, inst->ibox); - else if (ci->show_zone == 1) - { - if (inst->ibox->zone == zone) ibox = evas_list_append(ibox, inst->ibox); - } } return ibox; } @@ -637,7 +649,7 @@ ev = event_info; ic = data; _ibox_icon_signal_emit(ic, "e,state,focused", "e"); - if (ic->ibox->show_label) + if (ic->ibox->inst->ci->show_label) { _ibox_icon_fill_label(ic); _ibox_icon_signal_emit(ic, "e,action,show,label", "e"); @@ -653,7 +665,7 @@ ev = event_info; ic = data; _ibox_icon_signal_emit(ic, "e,state,unfocused", "e"); - if (ic->ibox->show_label) + if (ic->ibox->inst->ci->show_label) _ibox_icon_signal_emit(ic, "e,action,hide,label", "e"); } @@ -1022,7 +1034,7 @@ { b = l->data; if (_ibox_icon_find(b, ev->border)) continue; - if ((b->show_desk) && (ev->border->desk != desk)) continue; + if ((b->inst->ci->show_desk) && (ev->border->desk != desk)) continue; ic = _ibox_icon_new(b, ev->border); if (!ic) continue; b->icons = evas_list_append(b->icons, ic); @@ -1084,7 +1096,7 @@ { b = l->data; if (_ibox_icon_find(b, ev->border)) continue; - if ((b->show_desk) && (ev->border->desk != desk)) continue; + if ((b->inst->ci->show_desk) && (ev->border->desk != desk)) continue; ic = _ibox_icon_new(b, ev->border); if (!ic) continue; b->icons = evas_list_append(b->icons, ic); @@ -1212,7 +1224,7 @@ for (l = ibox; l; l = l->next) { b = l->data; - if (b->show_desk) + if (b->inst->ci->show_desk) { _ibox_empty(b); _ibox_fill(b); @@ -1232,39 +1244,61 @@ { Evas_List *l; Config_Item *ci; + if (!id) + { + char buf[128]; + int num = 0; + + /* Create id */ + if (ibox_config->items) + { + char *p; + ci = evas_list_last(ibox_config->items)->data; + p = strrchr(ci->id, '.'); + if (p) num = atoi(p + 1) + 1; + } + snprintf(buf, sizeof(buf), "%s.%d", _gadcon_class.name, num); - for (l = ibox_config->items; l; l = l->next) + /* Create new config */ + ci = E_NEW(Config_Item, 1); + ci->id = evas_stringshare_add(buf); + ci->show_label = 0; + ci->show_zone = 1; + ci->show_desk = 0; + ci->icon_label = 0; + ibox_config->items = evas_list_append(ibox_config->items, ci); + } + else { - ci = l->data; - if ((ci->id) && (!strcmp(ci->id, id))) - return ci; - } - ci = E_NEW(Config_Item, 1); - ci->id = evas_stringshare_add(id); - ci->show_label = 0; - ci->show_zone = 1; - ci->show_desk = 0; - ci->icon_label = 0; - ibox_config->items = evas_list_append(ibox_config->items, ci); + /* Find old config, or reuse supplied id */ + for (l = ibox_config->items; l; l = l->next) + { + ci = l->data; + if ((ci->id) && (!strcmp(ci->id, id))) + return ci; + } + ci = E_NEW(Config_Item, 1); + ci->id = evas_stringshare_add(id); + ci->show_label = 0; + ci->show_zone = 1; + ci->show_desk = 0; + ci->icon_label = 0; + ibox_config->items = evas_list_append(ibox_config->items, ci); + } return ci; } void -_ibox_config_update(void) +_ibox_config_update(Config_Item *ci) { Evas_List *l; for (l = ibox_config->instances; l; l = l->next) { Instance *inst; - Config_Item *ci; inst = l->data; - ci = _ibox_config_item_get(inst->gcc->id); - inst->ibox->show_label = ci->show_label; - inst->ibox->show_zone = ci->show_zone; - inst->ibox->show_desk = ci->show_desk; - inst->ibox->icon_label = ci->icon_label; - + if (inst->ci != ci) continue; + _ibox_empty(inst->ibox); _ibox_fill(inst->ibox); _ibox_resize_handle(inst->ibox); @@ -1281,13 +1315,12 @@ Evas_List *l; b = data; - ci = _ibox_config_item_get(b->inst->gcc->id); for (l = ibox_config->config_dialog; l; l = l->next) { E_Config_Dialog *cfd; cfd = l->data; - if (cfd->data == ci) + if (cfd->data == b->inst->ci) { ok = 0; break; =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.h,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- e_mod_main.h 25 Mar 2007 22:46:21 -0000 1.21 +++ e_mod_main.h 16 Sep 2007 00:02:53 -0000 1.22 @@ -34,7 +34,7 @@ EAPI int e_modapi_save (E_Module *m); EAPI int e_modapi_about (E_Module *m); -void _ibox_config_update(void); +void _ibox_config_update(Config_Item *ci); void _config_ibox_module(Config_Item *ci); extern Config *ibox_config; ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs