2012-06-19 08:59:49 -07:00
|
|
|
#include "private.h"
|
|
|
|
|
2012-06-12 03:10:01 -07:00
|
|
|
#include <Elementary.h>
|
2012-10-09 13:20:28 -07:00
|
|
|
#include <Efreet.h>
|
2012-06-12 03:10:01 -07:00
|
|
|
#include "config.h"
|
2013-01-28 16:43:13 -08:00
|
|
|
#include "main.h"
|
2013-12-16 06:51:35 -08:00
|
|
|
#include "col.h"
|
2014-02-26 14:03:27 -08:00
|
|
|
#include "utils.h"
|
2012-06-12 03:10:01 -07:00
|
|
|
|
2016-03-06 04:22:49 -08:00
|
|
|
#define CONF_VER 8
|
2012-07-05 02:38:43 -07:00
|
|
|
|
2012-06-15 23:28:39 -07:00
|
|
|
#define LIM(v, min, max) {if (v >= max) v = max; else if (v <= min) v = min;}
|
|
|
|
|
|
|
|
static Eet_Data_Descriptor *edd_base = NULL;
|
2013-12-16 06:51:35 -08:00
|
|
|
static Eet_Data_Descriptor *edd_color = NULL;
|
2014-08-24 08:53:18 -07:00
|
|
|
static Eet_Data_Descriptor *edd_keys = NULL;
|
2012-06-12 03:10:01 -07:00
|
|
|
|
2012-06-15 23:28:39 -07:00
|
|
|
static const char *
|
2012-06-17 13:59:54 -07:00
|
|
|
_config_home_get(void)
|
2012-06-15 23:28:39 -07:00
|
|
|
{
|
2012-12-28 19:17:30 -08:00
|
|
|
return efreet_config_home_get();
|
2012-06-15 23:28:39 -07:00
|
|
|
}
|
|
|
|
|
2012-06-12 03:10:01 -07:00
|
|
|
void
|
|
|
|
config_init(void)
|
|
|
|
{
|
2012-06-15 23:28:39 -07:00
|
|
|
Eet_Data_Descriptor_Class eddc;
|
2014-08-24 08:53:18 -07:00
|
|
|
Eet_Data_Descriptor_Class eddkc;
|
2014-02-26 14:03:27 -08:00
|
|
|
char path[PATH_MAX] = {};
|
2012-06-17 13:59:54 -07:00
|
|
|
|
2012-12-28 19:17:30 -08:00
|
|
|
elm_need_efreet();
|
|
|
|
efreet_init();
|
2014-01-11 06:21:59 -08:00
|
|
|
|
2014-02-26 14:03:27 -08:00
|
|
|
snprintf(path, sizeof(path) -1, "%s/terminology/themes",
|
|
|
|
_config_home_get());
|
|
|
|
ecore_file_mkpath(path);
|
|
|
|
|
2012-06-15 23:28:39 -07:00
|
|
|
eet_eina_stream_data_descriptor_class_set
|
|
|
|
(&eddc, sizeof(eddc), "Config", sizeof(Config));
|
|
|
|
edd_base = eet_data_descriptor_stream_new(&eddc);
|
2013-12-16 06:51:35 -08:00
|
|
|
|
|
|
|
eet_eina_stream_data_descriptor_class_set
|
|
|
|
(&eddc, sizeof(eddc), "Config_Color", sizeof(Config_Color));
|
|
|
|
edd_color = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_color, Config_Color, "r", r, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_color, Config_Color, "g", g, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_color, Config_Color, "b", b, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_color, Config_Color, "a", a, EET_T_UCHAR);
|
2014-01-11 06:21:59 -08:00
|
|
|
|
2014-08-24 08:53:18 -07:00
|
|
|
|
|
|
|
eet_eina_stream_data_descriptor_class_set
|
|
|
|
(&eddkc, sizeof(eddkc), "Config_Keys", sizeof(Config_Keys));
|
|
|
|
edd_keys = eet_data_descriptor_stream_new(&eddkc);
|
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "keyname", keyname, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "ctrl", ctrl, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "alt", alt, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "shift", shift, EET_T_UCHAR);
|
2014-09-30 13:07:28 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "win", win, EET_T_UCHAR);
|
2015-04-13 12:37:09 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "meta", meta, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "hyper", hyper, EET_T_UCHAR);
|
2014-08-24 08:53:18 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_keys, Config_Keys, "cb", cb, EET_T_STRING);
|
|
|
|
|
2012-07-05 02:38:43 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "version", version, EET_T_INT);
|
2012-06-15 23:28:39 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "font.name", font.name, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "font.size", font.size, EET_T_INT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "font.bitmap", font.bitmap, EET_T_UCHAR);
|
2012-07-04 07:44:43 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.email", helper.email, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.url.general", helper.url.general, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.url.video", helper.url.video, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.url.image", helper.url.image, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.local.general", helper.local.general, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.local.video", helper.local.video, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.local.image", helper.local.image, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "helper.inline_please", helper.inline_please, EET_T_UCHAR);
|
2012-06-15 23:28:39 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "theme", theme, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "background", background, EET_T_STRING);
|
2012-06-23 02:25:01 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "scrollback", scrollback, EET_T_INT);
|
2013-05-03 04:50:58 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "tab_zoom", tab_zoom, EET_T_DOUBLE);
|
2012-06-23 02:25:01 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "vidmod", vidmod, EET_T_INT);
|
2012-06-15 23:28:39 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "jump_on_change", jump_on_change, EET_T_UCHAR);
|
2012-07-04 21:36:47 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "jump_on_keypress", jump_on_keypress, EET_T_UCHAR);
|
2012-06-20 01:29:08 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "flicker_on_key", flicker_on_key, EET_T_UCHAR);
|
2012-06-26 01:05:43 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "disable_cursor_blink", disable_cursor_blink, EET_T_UCHAR);
|
2012-08-05 02:38:58 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "disable_visual_bell", disable_visual_bell, EET_T_UCHAR);
|
2014-04-11 11:20:47 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "active_links", active_links, EET_T_UCHAR);
|
2012-06-15 23:28:39 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "translucent", translucent, EET_T_UCHAR);
|
2014-07-13 06:07:41 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "opacity", opacity, EET_T_INT);
|
2012-06-17 00:10:27 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "mute", mute, EET_T_UCHAR);
|
2014-08-21 11:32:58 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "visualize", visualize, EET_T_UCHAR);
|
2012-06-23 02:25:01 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "urg_bell", urg_bell, EET_T_UCHAR);
|
2012-12-27 03:20:32 -08:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "multi_instance", multi_instance, EET_T_UCHAR);
|
2013-06-16 13:32:50 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "xterm_256color", xterm_256color, EET_T_UCHAR);
|
2013-09-22 08:10:39 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "erase_is_del", erase_is_del, EET_T_UCHAR);
|
2013-04-17 12:59:20 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "custom_geometry", custom_geometry, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "cg_width", cg_width, EET_T_INT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "cg_height", cg_height, EET_T_INT);
|
2013-09-11 23:00:08 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "drag_links", drag_links, EET_T_UCHAR);
|
2014-01-11 06:21:59 -08:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "login_shell", login_shell, EET_T_UCHAR);
|
2014-03-15 15:01:31 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "mouse_over_focus",
|
|
|
|
mouse_over_focus, EET_T_UCHAR);
|
2013-12-16 06:51:35 -08:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "colors_use", colors_use, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_ARRAY
|
|
|
|
(edd_base, Config, "colors", colors, edd_color);
|
2014-05-17 12:03:42 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "bell_rings", bell_rings, EET_T_UCHAR);
|
2014-08-24 08:53:18 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_LIST
|
|
|
|
(edd_base, Config, "keys", keys, edd_keys);
|
2014-10-14 13:57:22 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "gravatar", gravatar, EET_T_UCHAR);
|
2014-12-09 05:32:47 -08:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "notabs", notabs, EET_T_UCHAR);
|
2015-08-02 13:44:20 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "mv_always_show", mv_always_show, EET_T_UCHAR);
|
2015-08-23 11:57:49 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "ty_escapes", ty_escapes, EET_T_UCHAR);
|
2015-12-26 02:59:08 -08:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "changedir_to_current", changedir_to_current, EET_T_UCHAR);
|
2012-06-17 13:24:23 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
config_shutdown(void)
|
|
|
|
{
|
|
|
|
if (edd_base)
|
|
|
|
{
|
|
|
|
eet_data_descriptor_free(edd_base);
|
|
|
|
edd_base = NULL;
|
|
|
|
}
|
2013-12-16 06:51:35 -08:00
|
|
|
if (edd_color)
|
|
|
|
{
|
|
|
|
eet_data_descriptor_free(edd_color);
|
|
|
|
edd_color = NULL;
|
|
|
|
}
|
2012-12-28 19:17:30 -08:00
|
|
|
efreet_shutdown();
|
2012-06-17 13:24:23 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2012-08-14 05:30:55 -07:00
|
|
|
config_save(Config *config, const char *key)
|
2012-06-17 13:24:23 -07:00
|
|
|
{
|
|
|
|
Eet_File *ef;
|
|
|
|
char buf[PATH_MAX], buf2[PATH_MAX];
|
2012-06-17 13:59:54 -07:00
|
|
|
const char *cfgdir;
|
2012-06-17 13:24:23 -07:00
|
|
|
int ok;
|
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN(config);
|
|
|
|
|
2013-01-26 21:24:07 -08:00
|
|
|
if (config->temporary)
|
|
|
|
{
|
|
|
|
main_config_sync(config);
|
|
|
|
return;
|
|
|
|
}
|
2012-06-17 13:24:23 -07:00
|
|
|
if (!key) key = config->config_key;
|
2012-08-14 05:30:55 -07:00
|
|
|
config->font.orig_size = config->font.size;
|
|
|
|
eina_stringshare_del(config->font.orig_name);
|
|
|
|
config->font.orig_name = NULL;
|
|
|
|
if (config->font.name) config->font.orig_name = eina_stringshare_add(config->font.name);
|
|
|
|
config->font.orig_bitmap = config->font.bitmap;
|
2014-01-11 06:21:59 -08:00
|
|
|
|
2012-06-17 13:59:54 -07:00
|
|
|
cfgdir = _config_home_get();
|
|
|
|
snprintf(buf, sizeof(buf), "%s/terminology/config/standard", cfgdir);
|
2012-06-17 13:24:23 -07:00
|
|
|
ecore_file_mkpath(buf);
|
2012-06-17 13:59:54 -07:00
|
|
|
snprintf(buf, sizeof(buf), "%s/terminology/config/standard/base.cfg.tmp", cfgdir);
|
|
|
|
snprintf(buf2, sizeof(buf2), "%s/terminology/config/standard/base.cfg", cfgdir);
|
2012-06-17 13:24:23 -07:00
|
|
|
ef = eet_open(buf, EET_FILE_MODE_WRITE);
|
|
|
|
if (ef)
|
|
|
|
{
|
|
|
|
ok = eet_data_write(ef, edd_base, key, config, 1);
|
|
|
|
eet_close(ef);
|
|
|
|
if (ok) ecore_file_mv(buf, buf2);
|
|
|
|
}
|
2013-01-26 21:24:07 -08:00
|
|
|
main_config_sync(config);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
config_sync(const Config *config_src, Config *config)
|
|
|
|
{
|
|
|
|
// SOME fields have to be consistent between configs
|
|
|
|
config->font.size = config_src->font.size;
|
|
|
|
eina_stringshare_replace(&(config->font.name), config_src->font.name);
|
|
|
|
config->font.bitmap = config_src->font.bitmap;
|
|
|
|
config->helper.inline_please = config_src->helper.inline_please;
|
|
|
|
eina_stringshare_replace(&(config->helper.email), config_src->helper.email);
|
|
|
|
eina_stringshare_replace(&(config->helper.url.general), config_src->helper.url.general);
|
|
|
|
eina_stringshare_replace(&(config->helper.url.video), config_src->helper.url.video);
|
|
|
|
eina_stringshare_replace(&(config->helper.url.image), config_src->helper.url.image);
|
|
|
|
eina_stringshare_replace(&(config->helper.local.general), config_src->helper.local.general);
|
|
|
|
eina_stringshare_replace(&(config->helper.local.video), config_src->helper.local.video);
|
|
|
|
eina_stringshare_replace(&(config->helper.local.image), config_src->helper.local.image);
|
|
|
|
eina_stringshare_replace(&(config->theme), config_src->theme);
|
|
|
|
config->scrollback = config_src->scrollback;
|
2013-05-03 04:50:58 -07:00
|
|
|
config->tab_zoom = config_src->tab_zoom;
|
2013-01-26 21:24:07 -08:00
|
|
|
config->vidmod = config_src->vidmod;
|
|
|
|
config->jump_on_keypress = config_src->jump_on_keypress;
|
|
|
|
config->jump_on_change = config_src->jump_on_change;
|
|
|
|
config->flicker_on_key = config_src->flicker_on_key;
|
|
|
|
config->disable_cursor_blink = config_src->disable_cursor_blink;
|
|
|
|
config->disable_visual_bell = config_src->disable_visual_bell;
|
2014-04-22 14:32:04 -07:00
|
|
|
config->bell_rings = config_src->bell_rings;
|
2014-04-11 11:20:47 -07:00
|
|
|
config->active_links = config_src->active_links;
|
2013-01-26 21:24:07 -08:00
|
|
|
config->mute = config_src->mute;
|
2014-08-21 11:32:58 -07:00
|
|
|
config->visualize = config_src->visualize;
|
2013-01-26 21:24:07 -08:00
|
|
|
config->urg_bell = config_src->urg_bell;
|
|
|
|
config->multi_instance = config_src->multi_instance;
|
2013-06-16 13:32:50 -07:00
|
|
|
config->xterm_256color = config_src->xterm_256color;
|
2013-09-22 08:10:39 -07:00
|
|
|
config->erase_is_del = config_src->erase_is_del;
|
2013-01-26 21:24:07 -08:00
|
|
|
config->temporary = config_src->temporary;
|
2013-04-17 12:59:20 -07:00
|
|
|
config->custom_geometry = config_src->custom_geometry;
|
2014-01-11 06:21:59 -08:00
|
|
|
config->login_shell = config_src->login_shell;
|
2013-04-17 12:59:20 -07:00
|
|
|
config->cg_width = config_src->cg_width;
|
|
|
|
config->cg_height = config_src->cg_height;
|
2013-12-16 06:51:35 -08:00
|
|
|
config->colors_use = config_src->colors_use;
|
|
|
|
memcpy(config->colors, config_src->colors, sizeof(config->colors));
|
2014-03-15 15:01:31 -07:00
|
|
|
config->mouse_over_focus = config_src->mouse_over_focus;
|
2014-10-14 13:57:22 -07:00
|
|
|
/* TODO: config->keys */
|
|
|
|
config->gravatar = config_src->gravatar;
|
2014-12-09 05:32:47 -08:00
|
|
|
config->notabs = config_src->notabs;
|
2015-08-23 11:57:49 -07:00
|
|
|
config->mv_always_show = config_src->mv_always_show;
|
|
|
|
config->ty_escapes = config_src->ty_escapes;
|
2015-12-26 02:59:08 -08:00
|
|
|
config->changedir_to_current = config_src->changedir_to_current;
|
2012-06-17 13:24:23 -07:00
|
|
|
}
|
2012-06-15 23:28:39 -07:00
|
|
|
|
2013-12-29 11:51:31 -08:00
|
|
|
static void
|
|
|
|
_config_upgrade_to_v2(Config *config)
|
|
|
|
{
|
|
|
|
int i, j;
|
|
|
|
|
|
|
|
/* Colors */
|
|
|
|
config->colors_use = EINA_FALSE;
|
|
|
|
for (j = 0; j < 4; j++)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 12; i++)
|
|
|
|
{
|
|
|
|
unsigned char rr = 0, gg = 0, bb = 0, aa = 0;
|
|
|
|
|
|
|
|
colors_standard_get(j, i, &rr, &gg, &bb, &aa);
|
|
|
|
config->colors[(j * 12) + i].r = rr;
|
|
|
|
config->colors[(j * 12) + i].g = gg;
|
|
|
|
config->colors[(j * 12) + i].b = bb;
|
|
|
|
config->colors[(j * 12) + i].a = aa;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
config->version = 2;
|
|
|
|
}
|
|
|
|
|
2014-09-30 13:07:28 -07:00
|
|
|
#define ADD_KB(Name, Ctrl, Alt, Shift, Win, Cb) \
|
2014-08-24 08:53:18 -07:00
|
|
|
kb = calloc(1, sizeof(Config_Keys)); \
|
|
|
|
if (!kb) return; \
|
|
|
|
kb->keyname = eina_stringshare_add_length(Name, strlen(Name)); \
|
|
|
|
kb->ctrl = Ctrl; \
|
|
|
|
kb->alt = Alt; \
|
|
|
|
kb->shift = Shift; \
|
2014-09-30 13:07:28 -07:00
|
|
|
kb->win = Win; \
|
2014-08-24 08:53:18 -07:00
|
|
|
kb->cb = eina_stringshare_add_length(Cb, strlen(Cb)); \
|
|
|
|
config->keys = eina_list_append(config->keys, kb)
|
|
|
|
|
2015-03-17 10:46:39 -07:00
|
|
|
static void
|
|
|
|
_add_default_keys(Config *config)
|
|
|
|
{
|
|
|
|
Config_Keys *kb;
|
|
|
|
|
|
|
|
ADD_KB("F11", 0, 0, 0, 0, "win_fullscreen");
|
|
|
|
|
|
|
|
/* Ctrl- */
|
2014-09-30 13:07:28 -07:00
|
|
|
ADD_KB("Prior", 1, 0, 0, 0, "term_prev");
|
|
|
|
ADD_KB("Next", 1, 0, 0, 0, "term_next");
|
|
|
|
ADD_KB("0", 1, 0, 0, 0, "tab_10");
|
|
|
|
ADD_KB("1", 1, 0, 0, 0, "tab_1");
|
|
|
|
ADD_KB("2", 1, 0, 0, 0, "tab_2");
|
|
|
|
ADD_KB("3", 1, 0, 0, 0, "tab_3");
|
|
|
|
ADD_KB("4", 1, 0, 0, 0, "tab_4");
|
|
|
|
ADD_KB("5", 1, 0, 0, 0, "tab_5");
|
|
|
|
ADD_KB("6", 1, 0, 0, 0, "tab_6");
|
|
|
|
ADD_KB("7", 1, 0, 0, 0, "tab_7");
|
|
|
|
ADD_KB("8", 1, 0, 0, 0, "tab_8");
|
|
|
|
ADD_KB("9", 1, 0, 0, 0, "tab_9");
|
2016-03-06 04:37:49 -08:00
|
|
|
ADD_KB("t", 1, 0, 0, 0, "tab_title");
|
2014-08-24 08:53:18 -07:00
|
|
|
|
|
|
|
/* Alt- */
|
2014-09-30 13:07:28 -07:00
|
|
|
ADD_KB("Home", 0, 1, 0, 0, "cmd_box");
|
|
|
|
ADD_KB("w", 0, 1, 0, 0, "copy_primary");
|
|
|
|
ADD_KB("Return", 0, 1, 0, 0, "paste_primary");
|
2014-08-24 08:53:18 -07:00
|
|
|
|
|
|
|
/* Ctrl-Shift- */
|
2014-09-30 13:07:28 -07:00
|
|
|
ADD_KB("Prior", 1, 0, 1, 0, "split_h");
|
|
|
|
ADD_KB("Next", 1, 0, 1, 0, "split_v");
|
|
|
|
ADD_KB("t", 1, 0, 1, 0, "tab_new");
|
|
|
|
ADD_KB("End", 1, 0, 1, 0, "exited");
|
|
|
|
ADD_KB("Home", 1, 0, 1, 0, "tab_select");
|
|
|
|
ADD_KB("c", 1, 0, 1, 0, "copy_clipboard");
|
|
|
|
ADD_KB("v", 1, 0, 1, 0, "paste_clipboard");
|
|
|
|
ADD_KB("h", 1, 0, 1, 0, "miniview");
|
|
|
|
ADD_KB("Insert", 1, 0, 1, 0, "paste_clipboard");
|
2016-03-06 04:22:49 -08:00
|
|
|
ADD_KB("n", 1, 0, 1, 0, "term_new");
|
2014-08-24 08:53:18 -07:00
|
|
|
|
|
|
|
/* Ctrl-Alt- */
|
2014-09-30 13:07:28 -07:00
|
|
|
ADD_KB("equal", 1, 1, 0, 0, "increase_font_size");
|
|
|
|
ADD_KB("minus", 1, 1, 0, 0, "decrease_font_size");
|
|
|
|
ADD_KB("0", 1, 1, 0, 0, "reset_font_size");
|
|
|
|
ADD_KB("9", 1, 1, 0, 0, "big_font_size");
|
2014-08-24 08:53:18 -07:00
|
|
|
|
|
|
|
/* Shift- */
|
2014-09-30 13:07:28 -07:00
|
|
|
ADD_KB("Prior", 0, 0, 1, 0, "one_page_up");
|
|
|
|
ADD_KB("Next", 0, 0, 1, 0, "one_page_down");
|
|
|
|
ADD_KB("Up", 0, 0, 1, 0, "one_line_up");
|
|
|
|
ADD_KB("Down", 0, 0, 1, 0, "one_line_down");
|
|
|
|
ADD_KB("Insert", 0, 0, 1, 0, "paste_primary");
|
|
|
|
ADD_KB("KP_Add", 0, 0, 1, 0, "increase_font_size");
|
|
|
|
ADD_KB("KP_Subtract", 0, 0, 1, 0, "decrease_font_size");
|
|
|
|
ADD_KB("KP_Multiply", 0, 0, 1, 0, "reset_font_size");
|
|
|
|
ADD_KB("KP_Divide", 0, 0, 1, 0, "copy_clipboard");
|
2015-03-17 10:46:39 -07:00
|
|
|
}
|
2014-08-24 08:53:18 -07:00
|
|
|
|
2016-03-06 04:22:49 -08:00
|
|
|
static void
|
|
|
|
_add_key(Config *config, const char *name, int ctrl, int alt, int shift,
|
|
|
|
int win, const char *cb_name)
|
|
|
|
{
|
|
|
|
Config_Keys *kb;
|
|
|
|
|
|
|
|
ADD_KB(name, ctrl, alt, shift, win, cb_name);
|
|
|
|
}
|
|
|
|
|
2014-08-24 08:53:18 -07:00
|
|
|
#undef ADD_KB
|
|
|
|
|
2014-09-14 08:30:30 -07:00
|
|
|
|
|
|
|
void
|
|
|
|
config_default_font_set(Config *config, Evas *evas)
|
|
|
|
{
|
|
|
|
Eina_List *fontlist, *l;
|
|
|
|
const char *fname;
|
|
|
|
Eina_Bool dejavu_found = EINA_FALSE,
|
|
|
|
bitstream_found = EINA_FALSE,
|
|
|
|
droid_found = EINA_FALSE,
|
|
|
|
liberation_found = EINA_FALSE;
|
|
|
|
|
|
|
|
if (config->font_set) return;
|
|
|
|
|
|
|
|
#define FONT_DEJAVU "DejaVu Sans Mono:style=Book"
|
|
|
|
#define FONT_LIBERATION "Liberation Mono:style=Regular"
|
|
|
|
#define FONT_DROID "Droid Sans Mono:style=Regular"
|
|
|
|
#define FONT_BITSTREAM "Bitstream Vera Sans Mono:style=Roman"
|
|
|
|
|
|
|
|
fontlist = evas_font_available_list(evas);
|
|
|
|
if (!fontlist) return;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(fontlist, l, fname)
|
|
|
|
{
|
|
|
|
if (strncmp(fname, FONT_DEJAVU, strlen(FONT_DEJAVU)) == 0)
|
|
|
|
dejavu_found = EINA_TRUE;
|
|
|
|
else if (strncmp(fname, FONT_LIBERATION, strlen(FONT_LIBERATION)) == 0)
|
|
|
|
liberation_found = EINA_TRUE;
|
|
|
|
else if (strncmp(fname, FONT_DROID, strlen(FONT_DROID)) == 0)
|
|
|
|
droid_found = EINA_TRUE;
|
|
|
|
else if (strncmp(fname, FONT_BITSTREAM, strlen(FONT_BITSTREAM)) == 0)
|
|
|
|
bitstream_found = EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
evas_font_available_list_free(evas, fontlist);
|
|
|
|
|
|
|
|
fname = config->font.name;
|
|
|
|
config->font_set = EINA_TRUE;
|
|
|
|
if (dejavu_found)
|
|
|
|
{
|
|
|
|
config->font.name = eina_stringshare_add(FONT_DEJAVU);
|
|
|
|
}
|
|
|
|
else if (liberation_found)
|
|
|
|
{
|
|
|
|
config->font.name = eina_stringshare_add(FONT_LIBERATION);
|
|
|
|
}
|
|
|
|
else if (droid_found)
|
|
|
|
{
|
|
|
|
config->font.name = eina_stringshare_add(FONT_DROID);
|
|
|
|
}
|
|
|
|
else if (bitstream_found)
|
|
|
|
{
|
|
|
|
config->font.name = eina_stringshare_add(FONT_BITSTREAM);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
config->font_set = EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (config->font_set)
|
|
|
|
{
|
|
|
|
config->font.bitmap = EINA_FALSE;
|
|
|
|
config->font.size = 12;
|
|
|
|
eina_stringshare_del(fname);
|
|
|
|
}
|
|
|
|
#undef FONT_DEJAVU
|
|
|
|
#undef FONT_LIBERATION
|
|
|
|
#undef FONT_DROID
|
|
|
|
#undef FONT_BITSTREAM
|
|
|
|
}
|
|
|
|
|
2015-11-05 14:13:15 -08:00
|
|
|
Config *
|
|
|
|
config_new(void)
|
|
|
|
{
|
|
|
|
Config *config;
|
|
|
|
config = calloc(1, sizeof(Config));
|
|
|
|
if (config)
|
|
|
|
{
|
|
|
|
int i, j;
|
|
|
|
|
|
|
|
config->version = CONF_VER;
|
|
|
|
config->font.bitmap = EINA_TRUE;
|
|
|
|
config->font.name = eina_stringshare_add("nexus.pcf");
|
|
|
|
config->font.size = 10;
|
|
|
|
config->helper.email = eina_stringshare_add("xdg-email");;
|
|
|
|
config->helper.url.general = eina_stringshare_add("xdg-open");
|
|
|
|
config->helper.url.video = eina_stringshare_add("xdg-open");
|
|
|
|
config->helper.url.image = eina_stringshare_add("xdg-open");
|
|
|
|
config->helper.local.general = eina_stringshare_add("xdg-open");
|
|
|
|
config->helper.local.video = eina_stringshare_add("xdg-open");
|
|
|
|
config->helper.local.image = eina_stringshare_add("xdg-open");
|
|
|
|
config->helper.inline_please = EINA_TRUE;
|
|
|
|
config->scrollback = 2000;
|
|
|
|
config->theme = eina_stringshare_add("default.edj");
|
|
|
|
config->background = NULL;
|
|
|
|
config->tab_zoom = 0.5;
|
|
|
|
config->vidmod = 0;
|
|
|
|
config->opacity = 50;
|
|
|
|
config->cg_width = 80;
|
|
|
|
config->cg_height = 24;
|
|
|
|
config->jump_on_change = EINA_TRUE;
|
|
|
|
config->jump_on_keypress = EINA_TRUE;
|
|
|
|
config->flicker_on_key = EINA_FALSE;
|
|
|
|
config->disable_cursor_blink = EINA_FALSE;
|
|
|
|
config->disable_visual_bell = EINA_FALSE;
|
|
|
|
config->bell_rings = EINA_TRUE;
|
|
|
|
config->active_links = EINA_TRUE;
|
|
|
|
config->translucent = EINA_FALSE;
|
|
|
|
config->mute = EINA_FALSE;
|
|
|
|
config->visualize = EINA_TRUE;
|
|
|
|
config->urg_bell = EINA_TRUE;
|
|
|
|
config->multi_instance = EINA_FALSE;
|
|
|
|
config->xterm_256color = EINA_FALSE;
|
|
|
|
config->erase_is_del = EINA_FALSE;
|
|
|
|
config->custom_geometry = EINA_FALSE;
|
|
|
|
config->drag_links = EINA_FALSE;
|
|
|
|
config->login_shell = EINA_FALSE;
|
|
|
|
config->mouse_over_focus = EINA_TRUE;
|
|
|
|
config->colors_use = EINA_FALSE;
|
|
|
|
config->gravatar = EINA_TRUE;
|
|
|
|
config->notabs = EINA_FALSE;
|
|
|
|
config->mv_always_show = EINA_FALSE;
|
|
|
|
config->ty_escapes = EINA_TRUE;
|
2015-12-26 02:59:08 -08:00
|
|
|
config->changedir_to_current = EINA_TRUE;
|
2015-11-05 14:13:15 -08:00
|
|
|
for (j = 0; j < 4; j++)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 12; i++)
|
|
|
|
{
|
|
|
|
unsigned char rr = 0, gg = 0, bb = 0, aa = 0;
|
|
|
|
|
|
|
|
colors_standard_get(j, i, &rr, &gg, &bb, &aa);
|
|
|
|
config->colors[(j * 12) + i].r = rr;
|
|
|
|
config->colors[(j * 12) + i].g = gg;
|
|
|
|
config->colors[(j * 12) + i].b = bb;
|
|
|
|
config->colors[(j * 12) + i].a = aa;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_add_default_keys(config);
|
|
|
|
}
|
|
|
|
return config;
|
|
|
|
}
|
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
Config *
|
|
|
|
config_load(const char *key)
|
|
|
|
{
|
|
|
|
Eet_File *ef;
|
|
|
|
char buf[PATH_MAX];
|
2012-06-17 13:59:54 -07:00
|
|
|
const char *cfgdir;
|
|
|
|
Config *config = NULL;
|
2012-06-17 13:24:23 -07:00
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
|
|
|
|
|
2012-06-17 13:59:54 -07:00
|
|
|
cfgdir = _config_home_get();
|
|
|
|
snprintf(buf, sizeof(buf), "%s/terminology/config/standard/base.cfg", cfgdir);
|
2012-06-15 23:28:39 -07:00
|
|
|
ef = eet_open(buf, EET_FILE_MODE_READ);
|
|
|
|
if (ef)
|
|
|
|
{
|
2012-06-17 13:24:23 -07:00
|
|
|
config = eet_data_read(ef, edd_base, key);
|
2012-06-15 23:28:39 -07:00
|
|
|
eet_close(ef);
|
|
|
|
if (config)
|
|
|
|
{
|
2013-04-17 13:02:50 -07:00
|
|
|
config->font.orig_size = config->font.size;
|
2012-08-14 05:30:55 -07:00
|
|
|
if (config->font.name) config->font.orig_name = eina_stringshare_add(config->font.name);
|
|
|
|
config->font.orig_bitmap = config->font.bitmap;
|
2013-12-29 11:51:31 -08:00
|
|
|
switch (config->version)
|
2012-07-05 02:38:43 -07:00
|
|
|
{
|
2013-12-29 11:51:31 -08:00
|
|
|
case 0:
|
|
|
|
case 1:
|
|
|
|
_config_upgrade_to_v2(config);
|
|
|
|
/*pass through*/
|
2014-04-11 12:29:26 -07:00
|
|
|
case 2:
|
2012-07-05 02:38:43 -07:00
|
|
|
LIM(config->font.size, 3, 400);
|
2014-09-13 05:16:41 -07:00
|
|
|
LIM(config->scrollback, 0, 131072);
|
2013-12-29 12:10:09 -08:00
|
|
|
LIM(config->tab_zoom, 0.0, 1.0);
|
2015-04-19 05:34:22 -07:00
|
|
|
LIM(config->vidmod, 0, 4)
|
2014-04-11 12:29:26 -07:00
|
|
|
|
|
|
|
/* upgrade to v3 */
|
|
|
|
config->active_links = EINA_TRUE;
|
2014-04-22 14:32:04 -07:00
|
|
|
config->bell_rings = EINA_TRUE;
|
2014-04-11 12:29:26 -07:00
|
|
|
/*pass through*/
|
2014-10-14 13:57:22 -07:00
|
|
|
case 3:
|
2014-08-24 08:53:18 -07:00
|
|
|
if (eina_list_count(config->keys) == 0)
|
|
|
|
{
|
|
|
|
_add_default_keys(config);
|
|
|
|
}
|
2014-11-03 12:02:37 -08:00
|
|
|
config->gravatar = EINA_TRUE;
|
2014-10-14 13:57:22 -07:00
|
|
|
/*pass through*/
|
2015-03-17 10:46:39 -07:00
|
|
|
case 4:
|
2015-04-16 12:32:25 -07:00
|
|
|
config->version = 5;
|
2015-03-17 10:46:39 -07:00
|
|
|
/*pass through*/
|
2015-08-23 11:57:49 -07:00
|
|
|
case 5:
|
|
|
|
config->ty_escapes = EINA_TRUE;
|
|
|
|
/*pass through*/
|
2015-12-26 02:59:08 -08:00
|
|
|
case 6:
|
|
|
|
config->changedir_to_current = EINA_TRUE;
|
|
|
|
/*pass through*/
|
2016-03-06 04:22:49 -08:00
|
|
|
case 7:
|
2014-10-14 13:57:22 -07:00
|
|
|
config->version = CONF_VER;
|
2016-03-06 04:22:49 -08:00
|
|
|
/*pass through*/
|
|
|
|
case CONF_VER: /* 8 */
|
|
|
|
_add_key(config, "n", 1, 0, 1, 0, "term_new");
|
2013-12-29 11:51:31 -08:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (config->version < CONF_VER)
|
|
|
|
{
|
|
|
|
// currently no upgrade path so reset config.
|
|
|
|
config_del(config);
|
|
|
|
config = NULL;
|
|
|
|
}
|
|
|
|
/* do no thing in case the config is from a newer
|
|
|
|
* terminology, we don't want to remove it. */
|
2012-07-05 02:38:43 -07:00
|
|
|
}
|
2012-06-15 23:28:39 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!config)
|
|
|
|
{
|
2015-11-05 14:13:15 -08:00
|
|
|
config = config_new();
|
2012-06-15 23:28:39 -07:00
|
|
|
}
|
2014-09-14 08:30:30 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
config->font_set = 1;
|
|
|
|
}
|
2012-06-17 13:24:23 -07:00
|
|
|
|
2013-11-07 15:35:39 -08:00
|
|
|
if (config)
|
|
|
|
config->config_key = eina_stringshare_add(key); /* not in eet */
|
2015-06-15 22:17:25 -07:00
|
|
|
|
|
|
|
return config;
|
2012-06-12 03:10:01 -07:00
|
|
|
}
|
|
|
|
|
2013-01-29 22:24:22 -08:00
|
|
|
Config *
|
|
|
|
config_fork(Config *config)
|
|
|
|
{
|
2014-08-24 08:53:18 -07:00
|
|
|
Config_Keys *key;
|
|
|
|
Eina_List *l;
|
2013-01-29 22:24:22 -08:00
|
|
|
Config *config2;
|
2013-12-28 21:02:16 -08:00
|
|
|
|
2013-01-29 22:24:22 -08:00
|
|
|
config2 = calloc(1, sizeof(Config));
|
|
|
|
if (!config2) return NULL;
|
2014-01-11 06:21:59 -08:00
|
|
|
#define CPY(fld) config2->fld = config->fld;
|
2013-01-29 22:24:22 -08:00
|
|
|
#define SCPY(fld) if (config->fld) config2->fld = eina_stringshare_add(config->fld)
|
2013-12-28 20:45:27 -08:00
|
|
|
#define SLSTCPY(fld) \
|
|
|
|
do { Eina_List *__l; const char *__s; \
|
2013-12-28 21:02:16 -08:00
|
|
|
EINA_LIST_FOREACH(config->fld, __l, __s) \
|
|
|
|
config2->fld = eina_list_append \
|
|
|
|
(config2->fld, eina_stringshare_add(__s)); } while (0)
|
2015-06-15 22:17:25 -07:00
|
|
|
|
2013-01-29 22:24:22 -08:00
|
|
|
CPY(version);
|
2014-01-11 06:21:59 -08:00
|
|
|
SCPY(font.name);
|
2013-01-29 22:24:22 -08:00
|
|
|
CPY(font.size);
|
|
|
|
CPY(font.bitmap);
|
2015-04-26 09:03:53 -07:00
|
|
|
SCPY(font.orig_name);
|
|
|
|
CPY(font.orig_size);
|
|
|
|
CPY(font.orig_bitmap);
|
2014-01-11 06:21:59 -08:00
|
|
|
SCPY(helper.email);
|
2013-01-29 22:24:22 -08:00
|
|
|
SCPY(helper.url.general);
|
|
|
|
SCPY(helper.url.video);
|
|
|
|
SCPY(helper.url.image);
|
|
|
|
SCPY(helper.local.general);
|
|
|
|
SCPY(helper.local.video);
|
|
|
|
SCPY(helper.local.image);
|
|
|
|
CPY(helper.inline_please);
|
|
|
|
SCPY(theme);
|
|
|
|
SCPY(background);
|
|
|
|
CPY(scrollback);
|
2013-05-03 04:50:58 -07:00
|
|
|
CPY(tab_zoom);
|
2013-01-29 22:24:22 -08:00
|
|
|
CPY(vidmod);
|
|
|
|
CPY(jump_on_change);
|
|
|
|
CPY(jump_on_keypress);
|
|
|
|
CPY(flicker_on_key);
|
|
|
|
CPY(disable_cursor_blink);
|
|
|
|
CPY(disable_visual_bell);
|
2014-04-22 14:32:04 -07:00
|
|
|
CPY(bell_rings);
|
2014-04-11 11:20:47 -07:00
|
|
|
CPY(active_links);
|
2013-01-29 22:24:22 -08:00
|
|
|
CPY(translucent);
|
2014-07-13 06:07:41 -07:00
|
|
|
CPY(opacity);
|
2013-01-29 22:24:22 -08:00
|
|
|
CPY(mute);
|
2014-08-21 11:32:58 -07:00
|
|
|
CPY(visualize);
|
2013-01-29 22:24:22 -08:00
|
|
|
CPY(urg_bell);
|
|
|
|
CPY(multi_instance);
|
2013-06-16 13:32:50 -07:00
|
|
|
CPY(xterm_256color);
|
2013-09-22 08:10:39 -07:00
|
|
|
CPY(erase_is_del);
|
2013-04-17 12:59:20 -07:00
|
|
|
CPY(custom_geometry);
|
2014-01-11 06:21:59 -08:00
|
|
|
CPY(login_shell);
|
2013-04-17 12:59:20 -07:00
|
|
|
CPY(cg_width);
|
|
|
|
CPY(cg_height);
|
2013-12-16 06:51:35 -08:00
|
|
|
CPY(colors_use);
|
|
|
|
memcpy(config2->colors, config->colors, sizeof(config->colors));
|
2014-03-15 15:01:31 -07:00
|
|
|
CPY(mouse_over_focus);
|
2013-01-29 22:24:22 -08:00
|
|
|
CPY(temporary);
|
|
|
|
SCPY(config_key);
|
2014-09-14 13:29:25 -07:00
|
|
|
CPY(font_set);
|
2014-10-14 13:57:22 -07:00
|
|
|
CPY(gravatar);
|
2014-12-09 05:32:47 -08:00
|
|
|
CPY(notabs);
|
2015-08-02 13:44:20 -07:00
|
|
|
CPY(mv_always_show);
|
2015-08-23 11:57:49 -07:00
|
|
|
CPY(ty_escapes);
|
2015-12-26 02:59:08 -08:00
|
|
|
CPY(changedir_to_current);
|
2014-08-24 08:53:18 -07:00
|
|
|
|
|
|
|
EINA_LIST_FOREACH(config->keys, l, key)
|
|
|
|
{
|
|
|
|
Config_Keys *key2 = calloc(1, sizeof(Config_Keys));
|
2015-11-19 12:08:16 -08:00
|
|
|
if (!key2) break;
|
2014-08-24 08:53:18 -07:00
|
|
|
key2->keyname = key->keyname;
|
|
|
|
eina_stringshare_ref(key->keyname);
|
|
|
|
key2->ctrl = key->ctrl;
|
|
|
|
key2->alt = key->alt;
|
|
|
|
key2->shift = key->shift;
|
2014-09-30 13:07:28 -07:00
|
|
|
key2->win = key->win;
|
2014-08-24 08:53:18 -07:00
|
|
|
key2->cb = key->cb;
|
|
|
|
eina_stringshare_ref(key->cb);
|
|
|
|
config2->keys = eina_list_append(config2->keys, key2);
|
|
|
|
}
|
2014-10-14 13:57:22 -07:00
|
|
|
|
2013-01-29 22:24:22 -08:00
|
|
|
return config2;
|
|
|
|
}
|
|
|
|
|
2012-06-12 03:10:01 -07:00
|
|
|
void
|
2012-06-17 13:24:23 -07:00
|
|
|
config_del(Config *config)
|
2012-06-12 03:10:01 -07:00
|
|
|
{
|
2014-08-24 08:53:18 -07:00
|
|
|
Config_Keys *key;
|
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
if (!config) return;
|
2014-08-24 08:53:18 -07:00
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
eina_stringshare_del(config->font.name);
|
2012-08-14 05:30:55 -07:00
|
|
|
eina_stringshare_del(config->font.orig_name);
|
2012-06-17 13:24:23 -07:00
|
|
|
eina_stringshare_del(config->theme);
|
|
|
|
eina_stringshare_del(config->background);
|
2012-07-05 02:38:43 -07:00
|
|
|
eina_stringshare_del(config->helper.email);
|
|
|
|
eina_stringshare_del(config->helper.url.general);
|
|
|
|
eina_stringshare_del(config->helper.url.video);
|
|
|
|
eina_stringshare_del(config->helper.url.image);
|
|
|
|
eina_stringshare_del(config->helper.local.general);
|
|
|
|
eina_stringshare_del(config->helper.local.video);
|
|
|
|
eina_stringshare_del(config->helper.local.image);
|
2014-08-24 08:53:18 -07:00
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
eina_stringshare_del(config->config_key); /* not in eet */
|
2014-08-24 08:53:18 -07:00
|
|
|
|
|
|
|
EINA_LIST_FREE(config->keys, key)
|
|
|
|
{
|
|
|
|
eina_stringshare_del(key->keyname);
|
|
|
|
eina_stringshare_del(key->cb);
|
|
|
|
free(key);
|
|
|
|
}
|
2012-06-17 13:24:23 -07:00
|
|
|
free(config);
|
2012-06-15 23:28:39 -07:00
|
|
|
}
|
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
const char *
|
|
|
|
config_theme_path_get(const Config *config)
|
2012-06-15 23:28:39 -07:00
|
|
|
{
|
2012-06-17 13:24:23 -07:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(config, NULL);
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(config->theme, NULL);
|
|
|
|
|
|
|
|
if (strchr(config->theme, '/'))
|
|
|
|
return config->theme;
|
|
|
|
|
2014-02-26 14:03:27 -08:00
|
|
|
return theme_path_get(config->theme);
|
2012-06-12 03:10:01 -07:00
|
|
|
}
|
2012-06-19 08:59:49 -07:00
|
|
|
|
|
|
|
const char *
|
2013-08-27 06:36:50 -07:00
|
|
|
config_theme_path_default_get(const Config *config EINA_UNUSED)
|
2012-06-19 08:59:49 -07:00
|
|
|
{
|
|
|
|
static char path[PATH_MAX] = "";
|
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(config, NULL);
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(config->theme, NULL);
|
|
|
|
|
|
|
|
if (path[0]) return path;
|
|
|
|
|
|
|
|
snprintf(path, sizeof(path), "%s/themes/default.edj",
|
|
|
|
elm_app_data_dir_get());
|
|
|
|
return path;
|
|
|
|
}
|