Enlightenment CVS committal Author : devilhorns Project : e17 Module : apps/e
Dir : e17/apps/e/src/modules/ibox Modified Files: e_mod_main.c e_mod_main.h Makefile.am Added Files: e_mod_config.c Log Message: IBox labels are now optional. Config Dialog added. Multiple IBox Instances supported. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -3 -r1.46 -r1.47 --- e_mod_main.c 18 May 2006 07:28:51 -0000 1.46 +++ e_mod_main.c 25 May 2006 13:25:37 -0000 1.47 @@ -92,6 +92,7 @@ static int _ibox_cb_timer_drop_recalc(void *data); static void _ibox_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _ibox_cb_menu_post(void *data, E_Menu *m); +static void _ibox_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi); static void _ibox_cb_icon_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _ibox_cb_icon_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _ibox_cb_icon_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -110,7 +111,10 @@ static int _ibox_cb_event_border_uniconify(void *data, int type, void *event); static int _ibox_cb_event_border_icon_change(void *data, int type, void *event); static int _ibox_cb_event_border_zone_set(void *data, int type, void *event); +static Config_Item *_ibox_config_item_get(const char *id); +static E_Config_DD *conf_edd = NULL; +static E_Config_DD *conf_item_edd = NULL; Config *ibox_config = NULL; @@ -125,11 +129,14 @@ int cx, cy, cw, ch; const char *drop[] = { "enlightenment/border" }; Evas_List *l; + Config_Item *ci; inst = E_NEW(Instance, 1); + ci = _ibox_config_item_get(id); + b = _ibox_new(gc->evas, gc->zone); - b->show_label = 1; + b->show_label = ci->show_label; b->inst = inst; inst->ibox = b; o = b->o_box; @@ -235,7 +242,6 @@ _ibox_new(Evas *evas, E_Zone *zone) { IBox *b; - char buf[4096]; b = E_NEW(IBox, 1); b->o_box = e_box_add(evas); @@ -276,6 +282,14 @@ e_menu_post_deactivate_callback_set(mn, _ibox_cb_menu_post, NULL); ibox_config->menu = mn; + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Configuration")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration"); + e_menu_item_callback_set(mi, _ibox_cb_menu_configuration, b); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); + e_gadcon_client_util_menu_items_append(b->inst->gcc, mn, 0); e_gadcon_canvas_zone_geometry_get(b->inst->gcc->gadcon, @@ -628,6 +642,13 @@ ibox_config->menu = mn; /* FIXME: other icon options go here too */ + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Configuration")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration"); + e_menu_item_callback_set(mi, _ibox_cb_menu_configuration, ic->ibox); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); e_gadcon_client_util_menu_items_append(ic->ibox->inst->gcc, mn, 0); @@ -1068,6 +1089,51 @@ return 1; } +static Config_Item * +_ibox_config_item_get(const char *id) +{ + Evas_List *l; + Config_Item *ci; + + 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; + ibox_config->items = evas_list_append(ibox_config->items, ci); + return ci; +} + +void +_ibox_config_update(void) +{ + 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; + } +} + +static void +_ibox_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi) +{ + IBox *b; + Config_Item *ci; + + b = data; + ci = _ibox_config_item_get(b->inst->gcc->id); + _config_ibox_module(ci); +} + /***************************************************************************/ /**/ /* module setup */ @@ -1080,7 +1146,33 @@ EAPI void * e_modapi_init(E_Module *m) { - ibox_config = E_NEW(Config, 1); + conf_item_edd = E_CONFIG_DD_NEW("IBox_Config_Item", Config_Item); + #undef T + #undef D + #define T Config_Item + #define D conf_item_edd + E_CONFIG_VAL(D, T, id, STR); + E_CONFIG_VAL(D, T, show_label, INT); + + conf_edd = E_CONFIG_DD_NEW("IBox_Config", Config); + #undef T + #undef D + #define T Config + #define D conf_edd + E_CONFIG_LIST(D, T, items, conf_item_edd); + + ibox_config = e_config_domain_load("module.ibox", conf_edd); + if (!ibox_config) + { + Config_Item *ci; + + ibox_config = E_NEW(Config, 1); + + ci = E_NEW(Config_Item, 1); + ci->id = evas_stringshare_add("0"); + ci->show_label = 0; + ibox_config->items = evas_list_append(ibox_config->items, ci); + } ibox_config->module = m; @@ -1128,6 +1220,9 @@ e_modapi_shutdown(E_Module *m) { e_gadcon_provider_unregister(&_gadcon_class); + + if (ibox_config->config_dialog) + e_object_del(E_OBJECT(ibox_config->config_dialog)); while (ibox_config->handlers) { @@ -1140,14 +1235,28 @@ e_object_del(E_OBJECT(ibox_config->menu)); ibox_config->menu = NULL; } + while (ibox_config->items) + { + Config_Item *ci; + + ci = ibox_config->items->data; + ibox_config->items = evas_list_remove_list(ibox_config->items, ibox_config->items); + if (ci->id) + evas_stringshare_del(ci->id); + free(ci); + } + free(ibox_config); ibox_config = NULL; + E_CONFIG_DD_FREE(conf_item_edd); + E_CONFIG_DD_FREE(conf_edd); return 1; } EAPI int e_modapi_save(E_Module *m) { + e_config_domain_save("module.ibox", conf_edd, ibox_config); return 1; } =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- e_mod_main.h 18 May 2006 06:30:33 -0000 1.14 +++ e_mod_main.h 25 May 2006 13:25:37 -0000 1.15 @@ -5,6 +5,7 @@ #define E_MOD_MAIN_H typedef struct _Config Config; +typedef struct _Config_Item Config_Item; struct _Config { @@ -13,6 +14,14 @@ Evas_List *instances; E_Menu *menu; Evas_List *handlers; + Evas_List *items; + E_Config_Dialog *config_dialog; +}; + +struct _Config_Item +{ + const char *id; + int show_label; }; EAPI extern E_Module_Api e_modapi; @@ -22,5 +31,9 @@ EAPI int e_modapi_save (E_Module *m); EAPI int e_modapi_info (E_Module *m); EAPI int e_modapi_about (E_Module *m); + +void _ibox_config_update(void); +void _config_ibox_module(Config_Item *ci); +extern Config *ibox_config; #endif =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/Makefile.am,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- Makefile.am 18 May 2006 06:30:33 -0000 1.8 +++ Makefile.am 25 May 2006 13:25:37 -0000 1.9 @@ -20,7 +20,8 @@ pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH) pkg_LTLIBRARIES = module.la module_la_SOURCES = e_mod_main.c \ - e_mod_main.h + e_mod_main.h \ + e_mod_config.c module_la_LIBADD = @e_libs@ @dlopen_libs@ module_la_LDFLAGS = -module -avoid-version module_la_DEPENDENCIES = $(top_builddir)/config.h ------------------------------------------------------- All the advantages of Linux Managed Hosting--Without the Cost and Risk! Fully trained technicians. The highest number of Red Hat certifications in the hosting industry. Fanatical Support. Click to learn more http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs