enlightenment-module-desksa.../src/gadgets/clock/mod.c

123 lines
2.5 KiB
C

#include "e.h"
#include "clock.h"
static void
_e_mod_action(const char *params)
{
Eina_List *l;
Instance *inst;
if (!params) return;
if (strcmp(params, "show_calendar")) return;
EINA_LIST_FOREACH(clock_instances, l, inst)
if (inst->popup)
_clock_popup_free(inst);
else
_clock_popup_new(inst);
}
static void
_e_mod_action_cb(E_Object *obj EINA_UNUSED, const char *params)
{
_e_mod_action(params);
}
/* module setup */
E_API E_Module_Api e_modapi =
{
E_MODULE_API_VERSION,
"Clock"
};
E_API void *
e_modapi_init(E_Module *m)
{
conf_item_edd = E_CONFIG_DD_NEW("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, weekend.start, INT);
E_CONFIG_VAL(D, T, weekend.len, INT);
E_CONFIG_VAL(D, T, week.start, INT);
E_CONFIG_VAL(D, T, digital_clock, INT);
E_CONFIG_VAL(D, T, digital_24h, INT);
E_CONFIG_VAL(D, T, show_seconds, INT);
E_CONFIG_VAL(D, T, show_date, INT);
conf_edd = E_CONFIG_DD_NEW("Config", Config);
#undef T
#undef D
#define T Config
#define D conf_edd
E_CONFIG_LIST(D, T, items, conf_item_edd);
clock_config = e_config_domain_load("module.clock", conf_edd);
if (!clock_config)
clock_config = E_NEW(Config, 1);
act = e_action_add("clock");
if (act)
{
act->func.go = _e_mod_action_cb;
act->func.go_key = _e_mod_action_cb;
act->func.go_mouse = _e_mod_action_cb;
act->func.go_edge = _e_mod_action_cb;
e_action_predef_name_set(N_("Clock"), N_("Toggle calendar"), "clock", "show_calendar", NULL, 0);
}
clock_config->module = m;
z_gadget_type_add("clock", clock_create);
return m;
}
E_API int
e_modapi_shutdown(E_Module *m EINA_UNUSED)
{
if (act)
{
e_action_predef_name_del("Clock", "Toggle calendar");
e_action_del("clock");
act = NULL;
}
if (clock_config)
{
Config_Item *ci;
if (clock_config->config_dialog)
e_object_del(E_OBJECT(clock_config->config_dialog));
EINA_LIST_FREE(clock_config->items, ci)
{
eina_stringshare_del(ci->id);
free(ci);
}
free(clock_config);
clock_config = NULL;
}
E_CONFIG_DD_FREE(conf_edd);
E_CONFIG_DD_FREE(conf_item_edd);
conf_item_edd = NULL;
conf_edd = NULL;
e_gadcon_provider_unregister(&_gadcon_class);
return 1;
}
E_API int
e_modapi_save(E_Module *m EINA_UNUSED)
{
e_config_domain_save("module.clock", conf_edd, clock_config);
return 1;
}