diff --git a/Makefile.am b/Makefile.am index 33e0996..e6fe55d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,15 +3,14 @@ MAINTAINERCLEANFILES = Makefile.in SUBDIRS = po EDJE_CC = @edje_cc@ -EDJE_FLAGS = -id $(srcdir)/images -fd $(srcdir)/fonts +EDJE_FLAGS = -id . -fd $(srcdir)/fonts filesdir = $(datadir) files_DATA = module_icon.png \ module.eap \ $(wildcard tclock.ed?) \ - $(wildcard fonts/*.ttf) \ - $(wildcard images/*.png) - + $(wildcard fonts/*.ttf) + EXTRA_DIST = $(files_DATA) e_modules-tclock.spec CONFIG_CLEAN_FILES = e_modules-tclock.spec tclock.edj diff --git a/configure.in b/configure.in index 3fc3d47..7a72ae0 100644 --- a/configure.in +++ b/configure.in @@ -7,7 +7,7 @@ AC_INIT(configure.in) AC_CANONICAL_BUILD AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(tclock, 0.3.0) +AM_INIT_AUTOMAKE(tclock, 0.3.2) AM_CONFIG_HEADER(config.h) AC_ISC_POSIX AC_PROG_CC diff --git a/e_mod_config.c b/e_mod_config.c index 6ce9fec..5776a19 100644 --- a/e_mod_config.c +++ b/e_mod_config.c @@ -19,7 +19,7 @@ static void onTimeCheckChange(void *data, Evas_Object *obj); static void onDateCheckChange(void *data, Evas_Object *obj); void -_config_tclock_module(void) +_config_tclock_module(Config_Item *ci) { E_Config_Dialog *cfd; E_Config_Dialog_View *v; @@ -33,30 +33,29 @@ _config_tclock_module(void) v->basic.create_widgets = _basic_create_widgets; con = e_container_current_get(e_manager_current_get()); - cfd = e_config_dialog_new(con, D_("Tclock Configuration"), NULL, 0, v, NULL); + cfd = e_config_dialog_new(con, D_("Tclock Configuration"), NULL, 0, v, ci); tclock_config->config_dialog = cfd; } static void -_fill_data(E_Config_Dialog_Data *cfdata) -{ - if (!tclock_config) - return; - - cfdata->resolution = tclock_config->resolution; - cfdata->show_time = tclock_config->show_time; - cfdata->show_date = tclock_config->show_date; - cfdata->time_format = strdup(tclock_config->time_format); - cfdata->date_format = strdup(tclock_config->date_format); +_fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata) +{ + cfdata->resolution = ci->resolution; + cfdata->show_time = ci->show_time; + cfdata->show_date = ci->show_date; + cfdata->time_format = strdup(ci->time_format); + cfdata->date_format = strdup(ci->date_format); } static void * _create_data(E_Config_Dialog *cfd) { E_Config_Dialog_Data *cfdata; - + Config_Item *ci; + + ci = cfd->data; cfdata = E_NEW(E_Config_Dialog_Data, 1); - _fill_data(cfdata); + _fill_data(ci, cfdata); return cfdata; } @@ -119,19 +118,19 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { - if (!tclock_config) - return; + Config_Item *ci; - tclock_config->resolution = cfdata->resolution; + ci = cfd->data; + ci->resolution = cfdata->resolution; if (cfdata->resolution == RESOLUTION_MINUTE) - tclock_config->poll_time = 60.0; + ci->poll_time = 60.0; else - tclock_config->poll_time = 1.0; + ci->poll_time = 1.0; - tclock_config->show_date = cfdata->show_date; - tclock_config->show_time = cfdata->show_time; - tclock_config->time_format = cfdata->time_format; - tclock_config->date_format = cfdata->date_format; + ci->show_date = cfdata->show_date; + ci->show_time = cfdata->show_time; + ci->time_format = cfdata->time_format; + ci->date_format = cfdata->date_format; _tclock_config_updated(); e_config_save_queue(); return 1; diff --git a/e_mod_main.c b/e_mod_main.c index ece47b5..408a3c1 100644 --- a/e_mod_main.c +++ b/e_mod_main.c @@ -14,8 +14,11 @@ static void _tclock_cb_mouse_down (void *data, Evas *e, Evas_Object *obj, void * static void _tclock_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi); static void _tclock_menu_cb_post(void *data, E_Menu *m); static int _tclock_cb_check(void *data); +static Config_Item *_tclock_config_item_get(const char *id); static E_Config_DD *conf_edd = NULL; +static E_Config_DD *conf_item_edd = NULL; + Config *tclock_config = NULL; /* Define the class and gadcon functions this module provides */ @@ -33,6 +36,8 @@ struct _Instance { E_Gadcon_Client *gcc; Evas_Object *tclock; + Config_Item *cfg; + const char *id; }; static E_Gadcon_Client * @@ -42,9 +47,14 @@ _gc_init(E_Gadcon *gc, char *name, char *id, char *style) E_Gadcon_Client *gcc; Instance *inst; char buf[4096]; + Config_Item *ci; inst = E_NEW(Instance, 1); + ci = _tclock_config_item_get(gc->id); + if (!ci->id) evas_stringshare_add(gc->id); + inst->id = evas_stringshare_add(ci->id); + o = edje_object_add(gc->evas); snprintf(buf, sizeof(buf), "%s/tclock.edj", e_module_dir_get(tclock_config->module)); if (!e_theme_edje_object_set(o, "base/theme/modules/tclock", "modules/tclock/main")) @@ -55,6 +65,7 @@ _gc_init(E_Gadcon *gc, char *name, char *id, char *style) gcc->data = inst; inst->gcc = gcc; inst->tclock = o; + inst->cfg = ci; evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _tclock_cb_mouse_down, inst); @@ -70,6 +81,7 @@ _gc_shutdown(E_Gadcon_Client *gcc) Instance *inst; inst = gcc->data; + evas_stringshare_del(inst->id); tclock_config->instances = evas_list_remove(tclock_config->instances, inst); evas_object_del(inst->tclock); free(inst); @@ -81,8 +93,8 @@ _gc_orient(E_Gadcon_Client *gcc) Instance *inst; inst = gcc->data; - e_gadcon_client_aspect_set(gcc, 30, 16); - e_gadcon_client_min_size_set(gcc, 30, 16); + e_gadcon_client_aspect_set(gcc, 16, 16); + e_gadcon_client_min_size_set(gcc, 16, 16); } static char * @@ -125,7 +137,7 @@ _tclock_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) 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, _tclock_menu_cb_configure, NULL); + e_menu_item_callback_set(mi, _tclock_menu_cb_configure, inst); e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0); e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, @@ -151,11 +163,17 @@ _tclock_menu_cb_post(void *data, E_Menu *m) static void _tclock_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi) { + Instance *inst; + Config_Item *ci; + if (!tclock_config) return; if (tclock_config->config_dialog) return; - _config_tclock_module(); + + inst = data; + ci = _tclock_config_item_get(inst->gcc->gadcon->id); + _config_tclock_module(ci); } void @@ -169,33 +187,34 @@ _tclock_config_updated(void) for (l = tclock_config->instances; l; l = l->next) { Instance *inst; + Config_Item *ci; inst = l->data; - - if (!tclock_config->show_time) - edje_object_signal_emit(inst->tclock, "time_hidden", ""); - else - edje_object_signal_emit(inst->tclock, "time_visible", ""); - edje_object_message_signal_process(inst->tclock); - - if (!tclock_config->show_date) + ci = _tclock_config_item_get(inst->gcc->gadcon->id); + if ((inst->id) && (ci->id) && (!strcmp(inst->id, ci->id))) { - printf("Not Date\n"); - edje_object_signal_emit(inst->tclock, "date_hidden", ""); - } - else - { - edje_object_signal_emit(inst->tclock, "date_visible", ""); - } - edje_object_message_signal_process(inst->tclock); - } - - if (tclock_config->tclock_check_timer) - ecore_timer_del(tclock_config->tclock_check_timer); + inst->cfg = ci; + + if (!inst->cfg->show_time) + edje_object_signal_emit(inst->tclock, "time_hidden", ""); + else + edje_object_signal_emit(inst->tclock, "time_visible", ""); + edje_object_message_signal_process(inst->tclock); + + if (!inst->cfg->show_date) + edje_object_signal_emit(inst->tclock, "date_hidden", ""); + else + edje_object_signal_emit(inst->tclock, "date_visible", ""); + edje_object_message_signal_process(inst->tclock); + + if (tclock_config->tclock_check_timer) + ecore_timer_del(tclock_config->tclock_check_timer); - tclock_config->tclock_check_timer = ecore_timer_add(tclock_config->poll_time, - _tclock_cb_check, NULL); - _tclock_cb_check(NULL); + tclock_config->tclock_check_timer = ecore_timer_add(inst->cfg->poll_time, + _tclock_cb_check, NULL); + _tclock_cb_check(NULL); + } + } } static int @@ -214,31 +233,57 @@ _tclock_cb_check(void *data) for (l = tclock_config->instances; l; l = l->next) { Instance *inst; + Config_Item *ci; inst = l->data; + ci = _tclock_config_item_get(inst->gcc->gadcon->id); + inst->cfg = ci; - if (!tclock_config->show_time) + if (!inst->cfg->show_time) edje_object_signal_emit(inst->tclock, "time_hidden", ""); else - edje_object_signal_emit(inst->tclock, "time_visible", ""); - + edje_object_signal_emit(inst->tclock, "time_visible", ""); edje_object_message_signal_process(inst->tclock); - if (!tclock_config->show_date) + if (!inst->cfg->show_date) edje_object_signal_emit(inst->tclock, "date_hidden", ""); else - edje_object_signal_emit(inst->tclock, "date_visible", ""); - + edje_object_signal_emit(inst->tclock, "date_visible", ""); edje_object_message_signal_process(inst->tclock); - strftime(buf, 1024, tclock_config->time_format, local_time); + strftime(buf, 1024, inst->cfg->time_format, local_time); edje_object_part_text_set(inst->tclock, "tclock_time", buf); - strftime(buf, 1024, tclock_config->date_format, local_time); + strftime(buf, 1024, inst->cfg->date_format, local_time); edje_object_part_text_set(inst->tclock, "tclock_date", buf); } return 1; } +static Config_Item * +_tclock_config_item_get(const char *id) +{ + Evas_List *l; + Config_Item *ci; + + for (l = tclock_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->poll_time = 1.0; + ci->resolution = RESOLUTION_SECOND; + ci->show_date = 1; + ci->show_time = 1; + ci->time_format = strdup("%T"); + ci->date_format = strdup("%d/%m/%y"); + + tclock_config->items = evas_list_append(tclock_config->items, ci); + return ci; +} + EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "TClock" @@ -249,12 +294,13 @@ e_modapi_init(E_Module *m) { bindtextdomain(PACKAGE, LOCALEDIR); bind_textdomain_codeset(PACKAGE, "UTF-8"); - - conf_edd = E_CONFIG_DD_NEW("TClock_Config", Config); + + conf_item_edd = E_CONFIG_DD_NEW("TClock_Config_Item", Config_Item); #undef T #undef D - #define T Config - #define D conf_edd + #define T Config_Item + #define D conf_item_edd + E_CONFIG_VAL(D, T, id, STR); E_CONFIG_VAL(D, T, poll_time, DOUBLE); E_CONFIG_VAL(D, T, resolution, INT); E_CONFIG_VAL(D, T, show_date, INT); @@ -262,25 +308,39 @@ e_modapi_init(E_Module *m) E_CONFIG_VAL(D, T, date_format, STR); E_CONFIG_VAL(D, T, time_format, STR); + conf_edd = E_CONFIG_DD_NEW("TClock_Config", Config); + #undef T + #undef D + #define T Config + #define D conf_edd + E_CONFIG_LIST(D, T, items, conf_item_edd); + tclock_config = e_config_domain_load("module.tclock", conf_edd); if (!tclock_config) { + Config_Item *ci; + tclock_config = E_NEW(Config, 1); - tclock_config->poll_time = 1.0; - tclock_config->resolution = RESOLUTION_SECOND; - tclock_config->show_date = 1; - tclock_config->show_time = 1; - tclock_config->time_format = strdup("%T"); - tclock_config->date_format = strdup("%d/%m/%y"); + + ci = E_NEW(Config_Item, 1); + ci->poll_time = 1.0; + ci->resolution = RESOLUTION_SECOND; + ci->show_date = 1; + ci->show_time = 1; + ci->time_format = strdup("%T"); + ci->date_format = strdup("%d/%m/%y"); + ci->id = evas_stringshare_add("0"); + + E_CONFIG_LIMIT(ci->poll_time, 1.0, 60.0); + E_CONFIG_LIMIT(ci->resolution, 0, 1); + E_CONFIG_LIMIT(ci->show_date, 0, 1); + E_CONFIG_LIMIT(ci->show_time, 0, 1); + + tclock_config->items = evas_list_append(tclock_config->items, ci); + tclock_config->tclock_check_timer = ecore_timer_add(ci->poll_time, + _tclock_cb_check, NULL); } - E_CONFIG_LIMIT(tclock_config->poll_time, 1.0, 60.0); - E_CONFIG_LIMIT(tclock_config->resolution, 0, 1); - E_CONFIG_LIMIT(tclock_config->show_date, 0, 1); - E_CONFIG_LIMIT(tclock_config->show_time, 0, 1); - - tclock_config->tclock_check_timer = ecore_timer_add(tclock_config->poll_time, - _tclock_cb_check, NULL); tclock_config->module = m; e_gadcon_provider_register(&_gc_class); @@ -304,9 +364,20 @@ e_modapi_shutdown(E_Module *m) e_object_del(E_OBJECT(tclock_config->menu)); tclock_config->menu = NULL; } + + while (tclock_config->items) + { + Config_Item *ci; + + ci = tclock_config->items->data; + if (ci->id) evas_stringshare_del(ci->id); + tclock_config->items = evas_list_remove_list(tclock_config->items, tclock_config->items); + free(ci); + } free(tclock_config); tclock_config = NULL; + E_CONFIG_DD_FREE(conf_item_edd); E_CONFIG_DD_FREE(conf_edd); return 1; } @@ -324,6 +395,18 @@ e_modapi_info(E_Module *m) EAPI int e_modapi_save(E_Module *m) { + Evas_List *l; + + for (l = tclock_config->instances; l; l = l->next) + { + Instance *inst; + Config_Item *ci; + + inst = l->data; + ci = _tclock_config_item_get(inst->gcc->gadcon->id); + if (ci->id) evas_stringshare_del(ci->id); + ci->id = evas_stringshare_add(inst->gcc->gadcon->id); + } e_config_domain_save("module.tclock", conf_edd, tclock_config); return 1; } @@ -335,15 +418,3 @@ e_modapi_about(E_Module *m) D_("Displays a digital clock on the desktop")); return 1; } - -EAPI int -e_modapi_config(E_Module *m) -{ - if (!tclock_config) - return 0; - if (tclock_config->config_dialog) - return 0; - - _config_tclock_module(); - return 1; -} diff --git a/e_mod_main.h b/e_mod_main.h index 22411c4..08afdbe 100644 --- a/e_mod_main.h +++ b/e_mod_main.h @@ -7,21 +7,27 @@ #define RESOLUTION_SECOND 1 typedef struct _Config Config; +typedef struct _Config_Item Config_Item; + struct _Config { E_Module *module; E_Config_Dialog *config_dialog; E_Menu *menu; Evas_List *instances; - + Evas_List *items; Ecore_Timer *tclock_check_timer; - +}; + +struct _Config_Item +{ + const char *id; int resolution; double poll_time; int show_time; int show_date; char *time_format; - char *date_format; + char *date_format; }; EAPI extern E_Module_Api e_modapi; @@ -31,9 +37,8 @@ EAPI int e_modapi_shutdown(E_Module *m); EAPI int e_modapi_save(E_Module *m); EAPI int e_modapi_info(E_Module *m); EAPI int e_modapi_about(E_Module *m); -EAPI int e_modapi_config(E_Module *m); -void _config_tclock_module(void); +void _config_tclock_module(Config_Item *ci); void _tclock_config_updated(void); extern Config *tclock_config; diff --git a/images/background.png b/images/background.png deleted file mode 100644 index 30dd5da..0000000 Binary files a/images/background.png and /dev/null differ diff --git a/tclock.edc b/tclock.edc index 1b077d1..32f3719 100644 --- a/tclock.edc +++ b/tclock.edc @@ -1,8 +1,3 @@ -images -{ - image: "background.png" COMP; -} - collections { group @@ -12,24 +7,21 @@ collections { part { - name: "background"; - type: IMAGE; + name: "base"; + type: RECT; description { state: "default" 0.0; - image - { - normal: "background.png"; - border: 3 3 3 3; - } + color: 255 255 255 255; } } part { name: "tclock_time"; type: TEXT; - effect: SOFT_SHADOW; - mouse_events: 0; + effect: SOFT_SHADOW; + clip_to: "base"; + //mouse_events: 0; description { state: "default" 0.0; @@ -73,7 +65,8 @@ collections name: "tclock_date"; type: TEXT; effect: SOFT_SHADOW; - mouse_events: 0; + clip_to: "base"; + //mouse_events: 0; description { state: "default" 0.0;