2011-05-13 04:39:04 -07:00
|
|
|
#include "e.h"
|
|
|
|
|
|
|
|
static void *_create_data(E_Config_Dialog *cfd);
|
|
|
|
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
|
|
|
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
|
|
|
|
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
|
|
|
|
|
|
|
|
struct _E_Config_Dialog_Data
|
|
|
|
{
|
|
|
|
E_Config_Dialog *cfd;
|
|
|
|
|
|
|
|
Eina_List *env_vars;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
char *var_str, *val_str;
|
|
|
|
int unset;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
struct {
|
|
|
|
Evas_Object *var_en, *val_en, *unset, *list;
|
|
|
|
} gui;
|
|
|
|
};
|
|
|
|
|
|
|
|
E_Config_Dialog *
|
2015-03-18 15:09:09 -07:00
|
|
|
e_int_config_env(Evas_Object *parent EINA_UNUSED, const char *params EINA_UNUSED)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
E_Config_Dialog *cfd;
|
|
|
|
E_Config_Dialog_View *v;
|
|
|
|
|
|
|
|
if (e_config_dialog_find("E", "advanced/environment_variables")) return NULL;
|
|
|
|
v = E_NEW(E_Config_Dialog_View, 1);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
v->create_cfdata = _create_data;
|
|
|
|
v->free_cfdata = _free_data;
|
|
|
|
v->basic.create_widgets = _basic_create_widgets;
|
|
|
|
v->basic.apply_cfdata = _basic_apply_data;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2014-11-02 18:35:13 -08:00
|
|
|
cfd = e_config_dialog_new(NULL, _("Environment Variables"),
|
2020-05-12 11:09:03 -07:00
|
|
|
"E", "advanced/environment_variables",
|
|
|
|
"preferences-system", 0, v, NULL);
|
2011-05-13 04:39:04 -07:00
|
|
|
return cfd;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_fill_data(E_Config_Dialog_Data *cfdata)
|
|
|
|
{
|
|
|
|
Eina_List *l;
|
|
|
|
E_Config_Env_Var *evr, *evr2;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
EINA_LIST_FOREACH(e_config->env_vars, l, evr)
|
|
|
|
{
|
|
|
|
evr2 = E_NEW(E_Config_Env_Var, 1);
|
|
|
|
evr2->var = eina_stringshare_add(evr->var);
|
|
|
|
if (evr->val) evr2->val = eina_stringshare_add(evr->val);
|
|
|
|
evr2->unset = evr->unset;
|
|
|
|
cfdata->env_vars = eina_list_append(cfdata->env_vars, evr2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void *
|
|
|
|
_create_data(E_Config_Dialog *cfd)
|
|
|
|
{
|
|
|
|
E_Config_Dialog_Data *cfdata;
|
|
|
|
|
|
|
|
cfdata = E_NEW(E_Config_Dialog_Data, 1);
|
|
|
|
cfdata->cfd = cfd;
|
|
|
|
_fill_data(cfdata);
|
|
|
|
return cfdata;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2015-03-18 15:09:09 -07:00
|
|
|
_free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
E_Config_Env_Var *evr;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
EINA_LIST_FREE(cfdata->env_vars, evr)
|
|
|
|
{
|
|
|
|
eina_stringshare_del(evr->var);
|
|
|
|
if (evr->val) eina_stringshare_del(evr->val);
|
|
|
|
E_FREE(evr);
|
|
|
|
}
|
2012-12-21 13:31:13 -08:00
|
|
|
free(cfdata->var_str);
|
|
|
|
free(cfdata->val_str);
|
2011-05-13 04:39:04 -07:00
|
|
|
E_FREE(cfdata);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2015-03-18 15:09:09 -07:00
|
|
|
_basic_apply_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
Eina_List *l, *l2;
|
|
|
|
E_Config_Env_Var *evr, *evr2;
|
|
|
|
int same;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
// old env vars removed from new set - unset
|
|
|
|
EINA_LIST_FOREACH(e_config->env_vars, l, evr)
|
|
|
|
{
|
|
|
|
same = 0;
|
|
|
|
EINA_LIST_FOREACH(cfdata->env_vars, l2, evr2)
|
|
|
|
{
|
|
|
|
if (!strcmp(evr->var, evr2->var))
|
|
|
|
{
|
|
|
|
same = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!same) e_env_unset(evr->var);
|
|
|
|
}
|
|
|
|
EINA_LIST_FREE(e_config->env_vars, evr)
|
|
|
|
{
|
|
|
|
eina_stringshare_del(evr->var);
|
|
|
|
if (evr->val) eina_stringshare_del(evr->val);
|
|
|
|
E_FREE(evr);
|
|
|
|
}
|
|
|
|
EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
|
|
|
|
{
|
|
|
|
evr2 = E_NEW(E_Config_Env_Var, 1);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
evr2->var = eina_stringshare_add(evr->var);
|
|
|
|
if (evr->val) evr2->val = eina_stringshare_add(evr->val);
|
|
|
|
evr2->unset = evr->unset;
|
|
|
|
e_config->env_vars = eina_list_append(e_config->env_vars, evr2);
|
|
|
|
}
|
|
|
|
// set all env vars (or unset as needed)
|
|
|
|
EINA_LIST_FOREACH(e_config->env_vars, l, evr)
|
|
|
|
{
|
|
|
|
if (evr->unset)
|
|
|
|
e_env_unset(evr->var);
|
|
|
|
else
|
|
|
|
e_env_set(evr->var, evr->val);
|
|
|
|
}
|
2012-08-02 23:48:39 -07:00
|
|
|
efreet_lang_reset();
|
2011-05-13 04:39:04 -07:00
|
|
|
e_config_save_queue();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_sel_cb(void *data)
|
|
|
|
{
|
|
|
|
E_Config_Dialog_Data *cfdata = data;
|
|
|
|
int sel_n = e_widget_ilist_selected_get(cfdata->gui.list);
|
|
|
|
E_Config_Env_Var *evr = eina_list_nth(cfdata->env_vars, sel_n);
|
|
|
|
if (!evr) return;
|
|
|
|
e_widget_check_checked_set(cfdata->gui.unset, evr->unset);
|
|
|
|
e_widget_disabled_set(cfdata->gui.val_en, evr->unset);
|
|
|
|
e_widget_entry_text_set(cfdata->gui.var_en, evr->var);
|
|
|
|
if ((evr->val) && (!evr->unset))
|
|
|
|
e_widget_entry_text_set(cfdata->gui.val_en, evr->val);
|
|
|
|
else
|
|
|
|
e_widget_entry_text_set(cfdata->gui.val_en, "");
|
|
|
|
}
|
|
|
|
|
2020-05-12 11:09:03 -07:00
|
|
|
static const char *
|
|
|
|
_env_text(E_Config_Env_Var *evr)
|
|
|
|
{
|
2020-05-14 04:18:00 -07:00
|
|
|
static Eina_Slstr *text = "";
|
2020-05-12 11:09:03 -07:00
|
|
|
char *val;
|
|
|
|
|
2020-05-14 04:18:00 -07:00
|
|
|
if (evr->val) val = strndup(evr->val, 64);
|
|
|
|
else val = strdup("");
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2020-05-14 04:18:00 -07:00
|
|
|
if (val)
|
|
|
|
{
|
2020-05-18 17:33:02 -07:00
|
|
|
if ((evr->val) && (strlen(evr->val) > 64))
|
2020-05-14 04:18:00 -07:00
|
|
|
text = eina_slstr_printf("%s=%s...", evr->var, val);
|
|
|
|
else
|
|
|
|
text = eina_slstr_printf("%s=%s", evr->var, val);
|
|
|
|
free(val);
|
|
|
|
}
|
2020-05-12 11:09:03 -07:00
|
|
|
else
|
2020-05-14 04:18:00 -07:00
|
|
|
{
|
|
|
|
text = eina_slstr_printf("%s", evr->var);
|
|
|
|
}
|
2020-05-12 11:09:03 -07:00
|
|
|
|
|
|
|
return text;
|
|
|
|
}
|
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
static void
|
2015-03-18 15:09:09 -07:00
|
|
|
_add_cb(void *data, void *data2 EINA_UNUSED)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
E_Config_Dialog_Data *cfdata = data;
|
|
|
|
Eina_List *l;
|
|
|
|
E_Config_Env_Var *evr = NULL;
|
|
|
|
int i, sel = -1;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
if (!cfdata->var_str) return;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
i = 0;
|
|
|
|
EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
|
|
|
|
{
|
|
|
|
if (!strcmp(cfdata->var_str, evr->var))
|
|
|
|
{
|
|
|
|
sel = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
evr = NULL;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
if (!evr) // new
|
|
|
|
{
|
|
|
|
evr = E_NEW(E_Config_Env_Var, 1);
|
|
|
|
if (evr)
|
|
|
|
{
|
|
|
|
evr->var = eina_stringshare_add(cfdata->var_str);
|
|
|
|
if (cfdata->unset)
|
|
|
|
cfdata->unset = 1;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (cfdata->val_str)
|
|
|
|
evr->val = eina_stringshare_add(cfdata->val_str);
|
|
|
|
cfdata->unset = 0;
|
|
|
|
}
|
|
|
|
cfdata->env_vars = eina_list_append(cfdata->env_vars, evr);
|
2020-05-12 11:09:03 -07:00
|
|
|
e_widget_ilist_append(cfdata->gui.list, NULL,
|
|
|
|
_env_text(evr), _sel_cb, cfdata, NULL);
|
2011-05-13 04:39:04 -07:00
|
|
|
e_widget_ilist_go(cfdata->gui.list);
|
|
|
|
sel = e_widget_ilist_count(cfdata->gui.list) - 1;
|
|
|
|
e_widget_ilist_selected_set(cfdata->gui.list, sel);
|
|
|
|
e_widget_ilist_nth_show(cfdata->gui.list, sel, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else // modify
|
|
|
|
{
|
|
|
|
if (evr->val) eina_stringshare_del(evr->val);
|
|
|
|
evr->val = NULL;
|
|
|
|
if (cfdata->unset)
|
|
|
|
evr->unset = 1;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (cfdata->val_str)
|
|
|
|
evr->val = eina_stringshare_add(cfdata->val_str);
|
|
|
|
evr->unset = 0;
|
|
|
|
}
|
|
|
|
if (sel >= 0)
|
|
|
|
{
|
|
|
|
e_widget_ilist_selected_set(cfdata->gui.list, sel);
|
2020-05-12 11:09:03 -07:00
|
|
|
e_widget_ilist_nth_label_set(cfdata->gui.list, sel, _env_text(evr));
|
2011-05-13 04:39:04 -07:00
|
|
|
e_widget_ilist_nth_show(cfdata->gui.list, sel, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2015-03-18 15:09:09 -07:00
|
|
|
_del_cb(void *data, void *data2 EINA_UNUSED)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
E_Config_Dialog_Data *cfdata = data;
|
|
|
|
Eina_List *l;
|
|
|
|
E_Config_Env_Var *evr = NULL;
|
2011-12-20 17:23:10 -08:00
|
|
|
int sel_n;
|
2011-11-07 14:58:10 -08:00
|
|
|
/*
|
2011-05-13 04:39:04 -07:00
|
|
|
int i, sel = -1;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
|
|
|
|
{
|
|
|
|
if (!strcmp(cfdata->var_str, evr->var))
|
|
|
|
{
|
|
|
|
sel = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
evr = NULL;
|
|
|
|
i++;
|
|
|
|
}
|
2011-11-07 14:58:10 -08:00
|
|
|
*/
|
2011-12-20 17:23:10 -08:00
|
|
|
sel_n = e_widget_ilist_selected_get(cfdata->gui.list);
|
2011-12-21 04:43:30 -08:00
|
|
|
if (sel_n != -1)
|
|
|
|
evr = eina_list_nth(cfdata->env_vars, sel_n);
|
2011-12-20 17:23:10 -08:00
|
|
|
|
2011-11-07 14:58:10 -08:00
|
|
|
if (evr && strcmp(cfdata->var_str, evr->var)) evr = NULL;
|
2011-05-13 04:39:04 -07:00
|
|
|
if (evr)
|
|
|
|
{
|
2011-12-20 17:23:10 -08:00
|
|
|
cfdata->env_vars = eina_list_remove(cfdata->env_vars, evr);
|
2011-12-21 04:43:30 -08:00
|
|
|
e_env_unset(evr->var);
|
2011-05-13 04:39:04 -07:00
|
|
|
eina_stringshare_del(evr->var);
|
|
|
|
if (evr->val) eina_stringshare_del(evr->val);
|
|
|
|
E_FREE(evr);
|
2011-11-07 14:58:10 -08:00
|
|
|
// cfdata->env_vars = eina_list_remove_list(cfdata->env_vars, l);
|
2011-05-13 04:39:04 -07:00
|
|
|
e_widget_ilist_clear(cfdata->gui.list);
|
|
|
|
e_widget_ilist_freeze(cfdata->gui.list);
|
|
|
|
EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
|
|
|
|
{
|
2020-05-12 11:09:03 -07:00
|
|
|
e_widget_ilist_append(cfdata->gui.list, NULL, _env_text(evr),
|
2011-05-13 04:39:04 -07:00
|
|
|
_sel_cb, cfdata, NULL);
|
|
|
|
}
|
|
|
|
e_widget_ilist_go(cfdata->gui.list);
|
|
|
|
e_widget_ilist_thaw(cfdata->gui.list);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2015-03-18 15:09:09 -07:00
|
|
|
_mod_cb(void *data, void *data2 EINA_UNUSED)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
_add_cb(data, data2);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2015-03-18 15:09:09 -07:00
|
|
|
_unset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
E_Config_Dialog_Data *cfdata = data;
|
|
|
|
if (cfdata->unset) e_widget_entry_text_set(cfdata->gui.val_en, "");
|
|
|
|
e_widget_disabled_set(cfdata->gui.val_en, cfdata->unset);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static Evas_Object *
|
2015-01-11 09:20:38 -08:00
|
|
|
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
2011-05-13 04:39:04 -07:00
|
|
|
{
|
|
|
|
Evas_Object *o, *ol, *oe, *ob, *oc;
|
|
|
|
Eina_List *l;
|
|
|
|
E_Config_Env_Var *evr;
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2014-12-22 06:02:05 -08:00
|
|
|
e_dialog_resizable_set(cfd->dia, 1);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2015-01-15 00:04:42 -08:00
|
|
|
o = e_widget_table_add(e_win_evas_win_get(evas), 0);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
ol = e_widget_ilist_add(evas, 0, 0, NULL);
|
|
|
|
cfdata->gui.list = ol;
|
|
|
|
e_widget_ilist_freeze(ol);
|
|
|
|
EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
|
|
|
|
{
|
2020-05-12 11:09:03 -07:00
|
|
|
e_widget_ilist_append(ol, NULL, _env_text(evr), _sel_cb, cfdata, NULL);
|
2011-05-13 04:39:04 -07:00
|
|
|
}
|
|
|
|
e_widget_ilist_go(ol);
|
|
|
|
e_widget_ilist_thaw(ol);
|
|
|
|
e_widget_size_min_set(ol, 200, 160);
|
|
|
|
e_widget_table_object_append(o, ol, 0, 0, 3, 1, 1, 1, 1, 1);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2015-01-11 09:20:38 -08:00
|
|
|
oe = e_widget_entry_add(cfd->dia->win, &(cfdata->var_str), NULL, NULL, NULL);
|
2011-05-13 04:39:04 -07:00
|
|
|
cfdata->gui.var_en = oe;
|
|
|
|
e_widget_table_object_append(o, oe, 0, 1, 1, 1, 1, 1, 1, 0);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2015-01-11 09:20:38 -08:00
|
|
|
oe = e_widget_entry_add(cfd->dia->win, &(cfdata->val_str), NULL, NULL, NULL);
|
2011-05-13 04:39:04 -07:00
|
|
|
cfdata->gui.val_en = oe;
|
|
|
|
e_widget_table_object_append(o, oe, 1, 1, 1, 1, 1, 1, 1, 0);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
oc = e_widget_check_add(evas, _("Unset"), &(cfdata->unset));
|
|
|
|
cfdata->gui.unset = oc;
|
|
|
|
e_widget_table_object_append(o, oc, 2, 1, 1, 1, 1, 1, 1, 0);
|
|
|
|
evas_object_smart_callback_add(oc, "changed", _unset_cb, cfdata);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
ob = e_widget_button_add(evas, _("Add"), "list-add", _add_cb, cfdata, NULL);
|
|
|
|
e_widget_table_object_append(o, ob, 0, 2, 1, 1, 1, 1, 0, 0);
|
|
|
|
|
|
|
|
ob = e_widget_button_add(evas, _("Modify"), NULL, _mod_cb, cfdata, NULL);
|
|
|
|
e_widget_table_object_append(o, ob, 1, 2, 1, 1, 1, 1, 0, 0);
|
|
|
|
|
2012-07-08 06:15:15 -07:00
|
|
|
ob = e_widget_button_add(evas, _("Delete"), "list-remove", _del_cb, cfdata, NULL);
|
2011-05-13 04:39:04 -07:00
|
|
|
e_widget_table_object_append(o, ob, 2, 2, 1, 1, 1, 1, 0, 0);
|
2020-05-12 11:09:03 -07:00
|
|
|
|
2011-05-13 04:39:04 -07:00
|
|
|
return o;
|
|
|
|
}
|