3 static void *_create_data(E_Config_Dialog *cfd);
4 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
5 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
8 struct _E_Config_Dialog_Data
14 char *var_str, *val_str;
18 Evas_Object *var_en, *val_en, *unset, *list;
23 e_int_config_env(E_Container *con, const char *params __UNUSED__)
26 E_Config_Dialog_View *v;
28 if (e_config_dialog_find("E", "advanced/environment_variables")) return NULL;
29 v = E_NEW(E_Config_Dialog_View, 1);
31 v->create_cfdata = _create_data;
32 v->free_cfdata = _free_data;
33 v->basic.create_widgets = _basic_create_widgets;
34 v->basic.apply_cfdata = _basic_apply_data;
36 cfd = e_config_dialog_new(con, _("Environment Variables"),
37 "E", "advanced/environment_variables",
38 "preferences-system", 0, v, NULL);
43 _fill_data(E_Config_Dialog_Data *cfdata)
46 E_Config_Env_Var *evr, *evr2;
48 EINA_LIST_FOREACH(e_config->env_vars, l, evr)
50 evr2 = E_NEW(E_Config_Env_Var, 1);
51 evr2->var = eina_stringshare_add(evr->var);
52 if (evr->val) evr2->val = eina_stringshare_add(evr->val);
53 evr2->unset = evr->unset;
54 cfdata->env_vars = eina_list_append(cfdata->env_vars, evr2);
59 _create_data(E_Config_Dialog *cfd)
61 E_Config_Dialog_Data *cfdata;
63 cfdata = E_NEW(E_Config_Dialog_Data, 1);
70 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
72 E_Config_Env_Var *evr;
74 EINA_LIST_FREE(cfdata->env_vars, evr)
76 eina_stringshare_del(evr->var);
77 if (evr->val) eina_stringshare_del(evr->val);
80 if (cfdata->var_str) free(cfdata->var_str);
81 if (cfdata->val_str) free(cfdata->val_str);
86 _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
89 E_Config_Env_Var *evr, *evr2;
92 // old env vars removed from new set - unset
93 EINA_LIST_FOREACH(e_config->env_vars, l, evr)
96 EINA_LIST_FOREACH(cfdata->env_vars, l2, evr2)
98 if (!strcmp(evr->var, evr2->var))
104 if (!same) e_env_unset(evr->var);
106 EINA_LIST_FREE(e_config->env_vars, evr)
108 eina_stringshare_del(evr->var);
109 if (evr->val) eina_stringshare_del(evr->val);
112 EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
114 evr2 = E_NEW(E_Config_Env_Var, 1);
116 evr2->var = eina_stringshare_add(evr->var);
117 if (evr->val) evr2->val = eina_stringshare_add(evr->val);
118 evr2->unset = evr->unset;
119 e_config->env_vars = eina_list_append(e_config->env_vars, evr2);
121 // set all env vars (or unset as needed)
122 EINA_LIST_FOREACH(e_config->env_vars, l, evr)
125 e_env_unset(evr->var);
127 e_env_set(evr->var, evr->val);
130 e_config_save_queue();
137 E_Config_Dialog_Data *cfdata = data;
138 int sel_n = e_widget_ilist_selected_get(cfdata->gui.list);
139 E_Config_Env_Var *evr = eina_list_nth(cfdata->env_vars, sel_n);
141 e_widget_check_checked_set(cfdata->gui.unset, evr->unset);
142 e_widget_disabled_set(cfdata->gui.val_en, evr->unset);
143 e_widget_entry_text_set(cfdata->gui.var_en, evr->var);
144 if ((evr->val) && (!evr->unset))
145 e_widget_entry_text_set(cfdata->gui.val_en, evr->val);
147 e_widget_entry_text_set(cfdata->gui.val_en, "");
151 _add_cb(void *data, void *data2 __UNUSED__)
153 E_Config_Dialog_Data *cfdata = data;
155 E_Config_Env_Var *evr = NULL;
158 if (!cfdata->var_str) return;
161 EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
163 if (!strcmp(cfdata->var_str, evr->var))
173 evr = E_NEW(E_Config_Env_Var, 1);
176 evr->var = eina_stringshare_add(cfdata->var_str);
182 evr->val = eina_stringshare_add(cfdata->val_str);
185 cfdata->env_vars = eina_list_append(cfdata->env_vars, evr);
186 e_widget_ilist_append(cfdata->gui.list, NULL,
187 evr->var, _sel_cb, cfdata, NULL);
188 e_widget_ilist_go(cfdata->gui.list);
189 sel = e_widget_ilist_count(cfdata->gui.list) - 1;
190 e_widget_ilist_selected_set(cfdata->gui.list, sel);
191 e_widget_ilist_nth_show(cfdata->gui.list, sel, 0);
196 if (evr->val) eina_stringshare_del(evr->val);
203 evr->val = eina_stringshare_add(cfdata->val_str);
208 e_widget_ilist_selected_set(cfdata->gui.list, sel);
209 e_widget_ilist_nth_show(cfdata->gui.list, sel, 0);
215 _del_cb(void *data, void *data2 __UNUSED__)
217 E_Config_Dialog_Data *cfdata = data;
219 E_Config_Env_Var *evr = NULL;
224 EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
226 if (!strcmp(cfdata->var_str, evr->var))
235 sel_n = e_widget_ilist_selected_get(cfdata->gui.list);
237 evr = eina_list_nth(cfdata->env_vars, sel_n);
239 if (evr && strcmp(cfdata->var_str, evr->var)) evr = NULL;
242 cfdata->env_vars = eina_list_remove(cfdata->env_vars, evr);
243 e_env_unset(evr->var);
244 eina_stringshare_del(evr->var);
245 if (evr->val) eina_stringshare_del(evr->val);
247 // cfdata->env_vars = eina_list_remove_list(cfdata->env_vars, l);
248 e_widget_ilist_clear(cfdata->gui.list);
249 e_widget_ilist_freeze(cfdata->gui.list);
250 EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
252 e_widget_ilist_append(cfdata->gui.list, NULL, evr->var,
253 _sel_cb, cfdata, NULL);
255 e_widget_ilist_go(cfdata->gui.list);
256 e_widget_ilist_thaw(cfdata->gui.list);
261 _mod_cb(void *data, void *data2 __UNUSED__)
263 _add_cb(data, data2);
267 _unset_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
269 E_Config_Dialog_Data *cfdata = data;
270 if (cfdata->unset) e_widget_entry_text_set(cfdata->gui.val_en, "");
271 e_widget_disabled_set(cfdata->gui.val_en, cfdata->unset);
276 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
278 Evas_Object *o, *ol, *oe, *ob, *oc;
280 E_Config_Env_Var *evr;
282 o = e_widget_table_add(evas, 0);
284 ol = e_widget_ilist_add(evas, 0, 0, NULL);
285 cfdata->gui.list = ol;
286 e_widget_ilist_freeze(ol);
287 EINA_LIST_FOREACH(cfdata->env_vars, l, evr)
289 e_widget_ilist_append(ol, NULL, evr->var, _sel_cb, cfdata, NULL);
291 e_widget_ilist_go(ol);
292 e_widget_ilist_thaw(ol);
293 e_widget_size_min_set(ol, 200, 160);
294 e_widget_table_object_append(o, ol, 0, 0, 3, 1, 1, 1, 1, 1);
296 oe = e_widget_entry_add(evas, &(cfdata->var_str), NULL, NULL, NULL);
297 cfdata->gui.var_en = oe;
298 e_widget_table_object_append(o, oe, 0, 1, 1, 1, 1, 1, 1, 0);
300 oe = e_widget_entry_add(evas, &(cfdata->val_str), NULL, NULL, NULL);
301 cfdata->gui.val_en = oe;
302 e_widget_table_object_append(o, oe, 1, 1, 1, 1, 1, 1, 1, 0);
304 oc = e_widget_check_add(evas, _("Unset"), &(cfdata->unset));
305 cfdata->gui.unset = oc;
306 e_widget_table_object_append(o, oc, 2, 1, 1, 1, 1, 1, 1, 0);
307 evas_object_smart_callback_add(oc, "changed", _unset_cb, cfdata);
309 ob = e_widget_button_add(evas, _("Add"), "list-add", _add_cb, cfdata, NULL);
310 e_widget_table_object_append(o, ob, 0, 2, 1, 1, 1, 1, 0, 0);
312 ob = e_widget_button_add(evas, _("Modify"), NULL, _mod_cb, cfdata, NULL);
313 e_widget_table_object_append(o, ob, 1, 2, 1, 1, 1, 1, 0, 0);
315 ob = e_widget_button_add(evas, _("Delete"), "list-remove", _del_cb, cfdata, NULL);
316 e_widget_table_object_append(o, ob, 2, 2, 1, 1, 1, 1, 0, 0);
318 e_dialog_resizable_set(cfd->dia, 1);