enlightenment/src/modules/illume2/e_mod_config.c

260 lines
9.7 KiB
C

#include "e_illume_private.h"
#include "e_mod_main.h"
/* local function prototypes */
static void _e_mod_illume_config_free(void);
static void _e_mod_illume_config_new(void);
/* local variables */
static E_Config_DD *_il_conf_edd = NULL;
static E_Config_DD *_il_conf_zone_edd = NULL;
/* external variables */
E_Illume_Config *_e_illume_cfg = NULL;
int
e_mod_illume_config_init(void)
{
/* create config structure for zones */
_il_conf_zone_edd = E_CONFIG_DD_NEW("Illume_Config_Zone", E_Illume_Config_Zone);
#undef T
#undef D
#define T E_Illume_Config_Zone
#define D _il_conf_zone_edd
E_CONFIG_VAL(D, T, id, INT);
E_CONFIG_VAL(D, T, mode.dual, INT);
E_CONFIG_VAL(D, T, mode.side, INT);
/* create config structure for module */
_il_conf_edd = E_CONFIG_DD_NEW("Illume_Config", E_Illume_Config);
#undef T
#undef D
#define T E_Illume_Config
#define D _il_conf_edd
E_CONFIG_VAL(D, T, version, INT);
E_CONFIG_VAL(D, T, animation.vkbd.duration, INT);
E_CONFIG_VAL(D, T, animation.vkbd.resize_before, INT);
E_CONFIG_VAL(D, T, animation.quickpanel.duration, INT);
E_CONFIG_VAL(D, T, policy.name, STR);
E_CONFIG_VAL(D, T, policy.vkbd.class, STR);
E_CONFIG_VAL(D, T, policy.vkbd.name, STR);
E_CONFIG_VAL(D, T, policy.vkbd.title, STR);
E_CONFIG_VAL(D, T, policy.vkbd.type, INT);
E_CONFIG_VAL(D, T, policy.vkbd.match.class, INT);
E_CONFIG_VAL(D, T, policy.vkbd.match.name, INT);
E_CONFIG_VAL(D, T, policy.vkbd.match.title, INT);
E_CONFIG_VAL(D, T, policy.vkbd.match.type, INT);
E_CONFIG_VAL(D, T, policy.indicator.class, STR);
E_CONFIG_VAL(D, T, policy.indicator.name, STR);
E_CONFIG_VAL(D, T, policy.indicator.title, STR);
E_CONFIG_VAL(D, T, policy.indicator.type, INT);
E_CONFIG_VAL(D, T, policy.indicator.match.class, INT);
E_CONFIG_VAL(D, T, policy.indicator.match.name, INT);
E_CONFIG_VAL(D, T, policy.indicator.match.title, INT);
E_CONFIG_VAL(D, T, policy.indicator.match.type, INT);
E_CONFIG_VAL(D, T, policy.softkey.class, STR);
E_CONFIG_VAL(D, T, policy.softkey.name, STR);
E_CONFIG_VAL(D, T, policy.softkey.title, STR);
E_CONFIG_VAL(D, T, policy.softkey.type, INT);
E_CONFIG_VAL(D, T, policy.softkey.match.class, INT);
E_CONFIG_VAL(D, T, policy.softkey.match.name, INT);
E_CONFIG_VAL(D, T, policy.softkey.match.title, INT);
E_CONFIG_VAL(D, T, policy.softkey.match.type, INT);
E_CONFIG_VAL(D, T, policy.home.class, STR);
E_CONFIG_VAL(D, T, policy.home.name, STR);
E_CONFIG_VAL(D, T, policy.home.title, STR);
E_CONFIG_VAL(D, T, policy.home.type, INT);
E_CONFIG_VAL(D, T, policy.home.match.class, INT);
E_CONFIG_VAL(D, T, policy.home.match.name, INT);
E_CONFIG_VAL(D, T, policy.home.match.title, INT);
E_CONFIG_VAL(D, T, policy.home.match.type, INT);
E_CONFIG_LIST(D, T, policy.zones, _il_conf_zone_edd);
/* attempt to load existing configuration */
_e_illume_cfg = e_config_domain_load("module.illume2", _il_conf_edd);
/* check version */
if ((_e_illume_cfg) && ((_e_illume_cfg->version >> 16) < IL_CONFIG_MAJOR))
_e_mod_illume_config_free();
/* create new config if we need to */
if (!_e_illume_cfg) _e_mod_illume_config_new();
/* setup category for config panel */
e_configure_registry_category_add("illume", 0, _("Illume"), NULL, "preferences-illume");
/* add config items to category */
e_configure_registry_generic_item_add("illume/policy", 0, _("Policy"),
NULL, "preferences-profiles",
e_mod_illume_config_policy_show);
e_configure_registry_generic_item_add("illume/animation", 0, _("Animation"),
NULL, "preferences-transitions",
e_mod_illume_config_animation_show);
e_configure_registry_generic_item_add("illume/windows", 0, _("Windows"),
NULL, "preferences-winlist",
e_mod_illume_config_windows_show);
return 1;
}
int
e_mod_illume_config_shutdown(void)
{
/* destroy config item entries */
e_configure_registry_item_del("illume/windows");
e_configure_registry_item_del("illume/animation");
e_configure_registry_item_del("illume/policy");
/* destroy config category */
e_configure_registry_category_del("illume");
/* free config structure */
_e_mod_illume_config_free();
/* free data descriptors */
E_CONFIG_DD_FREE(_il_conf_zone_edd);
E_CONFIG_DD_FREE(_il_conf_edd);
return 1;
}
int
e_mod_illume_config_save(void)
{
if ((!_il_conf_edd) || (!_e_illume_cfg)) return 0;
return e_config_domain_save("module.illume2", _il_conf_edd, _e_illume_cfg);
}
/* local functions */
static void
_e_mod_illume_config_free(void)
{
E_Illume_Config_Zone *cz;
/* check for config */
if (!_e_illume_cfg) return;
/* cleanup any stringshares */
if (_e_illume_cfg->policy.name)
eina_stringshare_del(_e_illume_cfg->policy.name);
_e_illume_cfg->policy.name = NULL;
if (_e_illume_cfg->policy.vkbd.class)
eina_stringshare_del(_e_illume_cfg->policy.vkbd.class);
_e_illume_cfg->policy.vkbd.class = NULL;
if (_e_illume_cfg->policy.vkbd.name)
eina_stringshare_del(_e_illume_cfg->policy.vkbd.name);
_e_illume_cfg->policy.vkbd.name = NULL;
if (_e_illume_cfg->policy.vkbd.title)
eina_stringshare_del(_e_illume_cfg->policy.vkbd.title);
_e_illume_cfg->policy.vkbd.title = NULL;
if (_e_illume_cfg->policy.indicator.class)
eina_stringshare_del(_e_illume_cfg->policy.indicator.class);
_e_illume_cfg->policy.indicator.class = NULL;
if (_e_illume_cfg->policy.indicator.name)
eina_stringshare_del(_e_illume_cfg->policy.indicator.name);
_e_illume_cfg->policy.indicator.name = NULL;
if (_e_illume_cfg->policy.indicator.title)
eina_stringshare_del(_e_illume_cfg->policy.indicator.title);
_e_illume_cfg->policy.indicator.title = NULL;
if (_e_illume_cfg->policy.softkey.class)
eina_stringshare_del(_e_illume_cfg->policy.softkey.class);
_e_illume_cfg->policy.softkey.class = NULL;
if (_e_illume_cfg->policy.softkey.name)
eina_stringshare_del(_e_illume_cfg->policy.softkey.name);
_e_illume_cfg->policy.softkey.name = NULL;
if (_e_illume_cfg->policy.softkey.title)
eina_stringshare_del(_e_illume_cfg->policy.softkey.title);
_e_illume_cfg->policy.softkey.title = NULL;
if (_e_illume_cfg->policy.home.class)
eina_stringshare_del(_e_illume_cfg->policy.home.class);
_e_illume_cfg->policy.home.class = NULL;
if (_e_illume_cfg->policy.home.name)
eina_stringshare_del(_e_illume_cfg->policy.home.name);
_e_illume_cfg->policy.home.name = NULL;
if (_e_illume_cfg->policy.home.title)
eina_stringshare_del(_e_illume_cfg->policy.home.title);
_e_illume_cfg->policy.home.title = NULL;
/* free configured zones */
EINA_LIST_FREE(_e_illume_cfg->policy.zones, cz)
E_FREE(cz);
/* free config structure */
E_FREE(_e_illume_cfg);
}
static void
_e_mod_illume_config_new(void)
{
E_Illume_Config_Zone *cz;
/* create initial config */
_e_illume_cfg = E_NEW(E_Illume_Config, 1);
_e_illume_cfg->version = 0;
_e_illume_cfg->animation.vkbd.duration = 1000;
_e_illume_cfg->animation.vkbd.resize_before = 1;
_e_illume_cfg->animation.quickpanel.duration = 1000;
_e_illume_cfg->policy.name = eina_stringshare_add("illume");
_e_illume_cfg->policy.vkbd.class = eina_stringshare_add("Virtual-Keyboard");
_e_illume_cfg->policy.vkbd.name = eina_stringshare_add("Virtual-Keyboard");
_e_illume_cfg->policy.vkbd.title = eina_stringshare_add("Virtual Keyboard");
_e_illume_cfg->policy.vkbd.type = ECORE_X_WINDOW_TYPE_NORMAL;
_e_illume_cfg->policy.vkbd.match.class = 0;
_e_illume_cfg->policy.vkbd.match.name = 1;
_e_illume_cfg->policy.vkbd.match.title = 1;
_e_illume_cfg->policy.vkbd.match.type = 0;
_e_illume_cfg->policy.indicator.class =
eina_stringshare_add("Illume-Indicator");
_e_illume_cfg->policy.indicator.name =
eina_stringshare_add("Illume-Indicator");
_e_illume_cfg->policy.indicator.title =
eina_stringshare_add("Illume Indicator");
_e_illume_cfg->policy.indicator.type = ECORE_X_WINDOW_TYPE_DOCK;
_e_illume_cfg->policy.indicator.match.class = 0;
_e_illume_cfg->policy.indicator.match.name = 1;
_e_illume_cfg->policy.indicator.match.title = 1;
_e_illume_cfg->policy.indicator.match.type = 0;
_e_illume_cfg->policy.softkey.class =
eina_stringshare_add("Illume-Softkey");
_e_illume_cfg->policy.softkey.name =
eina_stringshare_add("Illume-Softkey");
_e_illume_cfg->policy.softkey.title =
eina_stringshare_add("Illume Softkey");
_e_illume_cfg->policy.softkey.type = ECORE_X_WINDOW_TYPE_DOCK;
_e_illume_cfg->policy.softkey.match.class = 0;
_e_illume_cfg->policy.softkey.match.name = 1;
_e_illume_cfg->policy.softkey.match.title = 1;
_e_illume_cfg->policy.softkey.match.type = 0;
_e_illume_cfg->policy.home.class = eina_stringshare_add("Illume-Home");
_e_illume_cfg->policy.home.name = eina_stringshare_add("Illume-Home");
_e_illume_cfg->policy.home.title = eina_stringshare_add("Illume Home");
_e_illume_cfg->policy.home.type = ECORE_X_WINDOW_TYPE_NORMAL;
_e_illume_cfg->policy.home.match.class = 0;
_e_illume_cfg->policy.home.match.name = 1;
_e_illume_cfg->policy.home.match.title = 1;
_e_illume_cfg->policy.home.match.type = 0;
/* create config for initial zone */
cz = E_NEW(E_Illume_Config_Zone, 1);
cz->id = 0;
cz->mode.dual = 0;
cz->mode.side = 0;
/* add zone config to main config structure */
_e_illume_cfg->policy.zones =
eina_list_append(_e_illume_cfg->policy.zones, cz);
/* add any new config variables here */
/* if ((_e_illume_cfg->version & 0xffff) < 1) */
_e_illume_cfg->version = ((IL_CONFIG_MAJOR << 16) | IL_CONFIG_MINOR);
}