1 #include "e.h"
2
3 E_API E_Config *e_config = NULL;
4 E_API E_Config_Bindings *e_bindings = NULL;
5
6 static int _e_config_revisions = 9;
7
8 /* local subsystem functions */
9 static void _e_config_save_cb(void *data);
10 static void _e_config_free(E_Config *cfg);
11 static Eina_Bool _e_config_cb_timer(void *data);
12 static int _e_config_eet_close_handle(Eet_File *ef, char *file);
13
14 /* local subsystem globals */
15 static int _e_config_save_block = 0;
16 static E_Powersave_Deferred_Action *_e_config_save_defer = NULL;
17 static const char *_e_config_profile = NULL;
18
19 static E_Config_DD *_e_config_edd = NULL;
20 static E_Config_DD *_e_config_binding_edd = NULL;
21 static E_Config_DD *_e_config_module_edd = NULL;
22 static E_Config_DD *_e_config_font_fallback_edd = NULL;
23 static E_Config_DD *_e_config_font_default_edd = NULL;
24 static E_Config_DD *_e_config_theme_edd = NULL;
25 static E_Config_DD *_e_config_bindings_mouse_edd = NULL;
26 static E_Config_DD *_e_config_bindings_key_edd = NULL;
27 static E_Config_DD *_e_config_bindings_edge_edd = NULL;
28 static E_Config_DD *_e_config_bindings_signal_edd = NULL;
29 static E_Config_DD *_e_config_bindings_wheel_edd = NULL;
30 static E_Config_DD *_e_config_bindings_acpi_edd = NULL;
31 static E_Config_DD *_e_config_path_append_edd = NULL;
32 static E_Config_DD *_e_config_desktop_bg_edd = NULL;
33 static E_Config_DD *_e_config_desklock_bg_edd = NULL;
34 static E_Config_DD *_e_config_desktop_name_edd = NULL;
35 static E_Config_DD *_e_config_menu_applications_edd = NULL;
36 static E_Config_DD *_e_config_color_class_edd = NULL;
37 static E_Config_DD *_e_config_gadcon_edd = NULL;
38 static E_Config_DD *_e_config_gadcon_client_edd = NULL;
39 static E_Config_DD *_e_config_shelf_edd = NULL;
40 static E_Config_DD *_e_config_shelf_desk_edd = NULL;
41 static E_Config_DD *_e_config_mime_icon_edd = NULL;
42 static E_Config_DD *_e_config_syscon_action_edd = NULL;
43 static E_Config_DD *_e_config_env_var_edd = NULL;
44 static E_Config_DD *_e_config_xkb_layout_edd = NULL;
45 static E_Config_DD *_e_config_xkb_option_edd = NULL;
46
47 E_API int E_EVENT_CONFIG_ICON_THEME = 0;
48 E_API int E_EVENT_CONFIG_MODE_CHANGED = 0;
49 E_API int E_EVENT_CONFIG_LOADED = 0;
50
51 static E_Dialog *_e_config_error_dialog = NULL;
52 static Eina_List *handlers = NULL;
53
54 typedef struct _E_Color_Class
55 {
56 const char *name; /* stringshared name */
57 int r, g, b, a;
58 int r2, g2, b2, a2;
59 int r3, g3, b3, a3;
60 } E_Color_Class;
61
62 static void
_e_config_binding_mouse_add(E_Binding_Context ctxt,int button,E_Binding_Modifier mod,int any_mod,const char * action,const char * params)63 _e_config_binding_mouse_add(E_Binding_Context ctxt, int button, E_Binding_Modifier mod, int any_mod, const char *action, const char *params)
64 {
65 E_Config_Binding_Mouse *binding;
66
67 binding = calloc(1, sizeof(E_Config_Binding_Mouse));
68 binding->context = ctxt;
69 binding->button = button;
70 binding->modifiers = mod;
71 binding->any_mod = any_mod;
72 binding->action = eina_stringshare_add(action);
73 binding->params = eina_stringshare_add(params);
74 e_bindings->mouse_bindings = eina_list_append(e_bindings->mouse_bindings, binding);
75 }
76
77 static void
_e_config_binding_wheel_add(E_Binding_Context ctxt,int direction,int z,E_Binding_Modifier mod,int any_mod,const char * action,const char * params)78 _e_config_binding_wheel_add(E_Binding_Context ctxt, int direction, int z, E_Binding_Modifier mod, int any_mod, const char *action, const char *params)
79 {
80 E_Config_Binding_Wheel *binding;
81
82 binding = calloc(1, sizeof(E_Config_Binding_Wheel));
83 binding->context = ctxt;
84 binding->direction = direction;
85 binding->z = z;
86 binding->modifiers = mod;
87 binding->any_mod = any_mod;
88 binding->action = eina_stringshare_add(action);
89 binding->params = eina_stringshare_add(params);
90 e_bindings->wheel_bindings = eina_list_append(e_bindings->wheel_bindings, binding);
91 }
92
93 static Eina_Bool
_e_config_cb_efreet_cache_update(void * data EINA_UNUSED,int type EINA_UNUSED,void * ev EINA_UNUSED)94 _e_config_cb_efreet_cache_update(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED)
95 {
96 if (e_config)
97 {
98 if (e_config->icon_theme)
99 {
100 if (!efreet_icon_theme_find(e_config->icon_theme))
101 {
102 eina_stringshare_replace(&e_config->icon_theme, "hicolor");
103 e_config_save_queue();
104 }
105 }
106 }
107 return ECORE_CALLBACK_RENEW;
108 }
109
110
111 static void
_e_config_error_dialog_cb_delete(void * dia)112 _e_config_error_dialog_cb_delete(void *dia)
113 {
114 if (dia == _e_config_error_dialog)
115 _e_config_error_dialog = NULL;
116 }
117
118 static const char *
_e_config_profile_name_get(Eet_File * ef)119 _e_config_profile_name_get(Eet_File *ef)
120 {
121 /* profile config exists */
122 char *data;
123 const char *s = NULL;
124 int data_len = 0;
125
126 data = eet_read(ef, "config", &data_len);
127 if ((data) && (data_len > 0))
128 {
129 int ok = 1;
130
131 for (s = data; s < (data + data_len); s++)
132 {
133 // if profile is not all ascii (valid printable ascii - no
134 // control codes etc.) or it contains a '/' (invalid as its a
135 // directory delimiter) - then it's invalid
136 if ((*s < ' ') || (*s > '~') || (*s == '/'))
137 {
138 ok = 0;
139 break;
140 }
141 }
142 s = NULL;
143 if (ok)
144 s = eina_stringshare_add_length(data, data_len);
145 free(data);
146 }
147 return s;
148 }
149
150 static void
_e_config_edd_shutdown(void)151 _e_config_edd_shutdown(void)
152 {
153 E_CONFIG_DD_FREE(_e_config_edd);
154 E_CONFIG_DD_FREE(_e_config_module_edd);
155 E_CONFIG_DD_FREE(_e_config_font_default_edd);
156 E_CONFIG_DD_FREE(_e_config_font_fallback_edd);
157 E_CONFIG_DD_FREE(_e_config_theme_edd);
158 E_CONFIG_DD_FREE(_e_config_path_append_edd);
159 E_CONFIG_DD_FREE(_e_config_desktop_bg_edd);
160 E_CONFIG_DD_FREE(_e_config_desklock_bg_edd);
161 E_CONFIG_DD_FREE(_e_config_desktop_name_edd);
162 E_CONFIG_DD_FREE(e_remember_edd);
163 E_CONFIG_DD_FREE(_e_config_menu_applications_edd);
164 E_CONFIG_DD_FREE(_e_config_gadcon_edd);
165 E_CONFIG_DD_FREE(_e_config_gadcon_client_edd);
166 E_CONFIG_DD_FREE(_e_config_shelf_edd);
167 E_CONFIG_DD_FREE(_e_config_shelf_desk_edd);
168 E_CONFIG_DD_FREE(_e_config_mime_icon_edd);
169 E_CONFIG_DD_FREE(_e_config_syscon_action_edd);
170 E_CONFIG_DD_FREE(_e_config_env_var_edd);
171 E_CONFIG_DD_FREE(_e_config_xkb_layout_edd);
172 E_CONFIG_DD_FREE(_e_config_xkb_option_edd);
173 }
174
175 static void
_e_config_edd_init(Eina_Bool old)176 _e_config_edd_init(Eina_Bool old)
177 {
178
179 _e_config_gadcon_client_edd = E_CONFIG_DD_NEW("E_Config_Gadcon_Client", E_Config_Gadcon_Client);
180 #undef T
181 #undef D
182 #define T E_Config_Gadcon_Client
183 #define D _e_config_gadcon_client_edd
184 E_CONFIG_VAL(D, T, name, STR);
185 E_CONFIG_VAL(D, T, id, STR);
186 E_CONFIG_VAL(D, T, geom.pos, INT);
187 E_CONFIG_VAL(D, T, geom.size, INT);
188 E_CONFIG_VAL(D, T, geom.res, INT);
189 E_CONFIG_VAL(D, T, geom.pos_x, DOUBLE);
190 E_CONFIG_VAL(D, T, geom.pos_y, DOUBLE);
191 E_CONFIG_VAL(D, T, geom.size_w, DOUBLE);
192 E_CONFIG_VAL(D, T, geom.size_h, DOUBLE);
193 E_CONFIG_VAL(D, T, state_info.seq, INT);
194 E_CONFIG_VAL(D, T, state_info.flags, INT);
195 E_CONFIG_VAL(D, T, style, STR);
196 E_CONFIG_VAL(D, T, orient, INT);
197 E_CONFIG_VAL(D, T, autoscroll, UCHAR);
198 E_CONFIG_VAL(D, T, resizable, UCHAR);
199
200 _e_config_gadcon_edd = E_CONFIG_DD_NEW("E_Config_Gadcon", E_Config_Gadcon);
201 #undef T
202 #undef D
203 #define T E_Config_Gadcon
204 #define D _e_config_gadcon_edd
205 E_CONFIG_VAL(D, T, name, STR);
206 E_CONFIG_VAL(D, T, id, INT);
207 E_CONFIG_VAL(D, T, zone, UINT);
208 E_CONFIG_LIST(D, T, clients, _e_config_gadcon_client_edd);
209
210 _e_config_shelf_desk_edd = E_CONFIG_DD_NEW("E_Config_Shelf_Desk", E_Config_Shelf_Desk);
211 #undef T
212 #undef D
213 #define T E_Config_Shelf_Desk
214 #define D _e_config_shelf_desk_edd
215 E_CONFIG_VAL(D, T, x, INT);
216 E_CONFIG_VAL(D, T, y, INT);
217
218 _e_config_shelf_edd = E_CONFIG_DD_NEW("E_Config_Shelf", E_Config_Shelf);
219 #undef T
220 #undef D
221 #define T E_Config_Shelf
222 #define D _e_config_shelf_edd
223 E_CONFIG_VAL(D, T, name, STR);
224 E_CONFIG_VAL(D, T, id, INT);
225 E_CONFIG_VAL(D, T, zone, INT);
226 E_CONFIG_VAL(D, T, layer, INT);
227 E_CONFIG_VAL(D, T, popup, UCHAR);
228 E_CONFIG_VAL(D, T, orient, INT);
229 E_CONFIG_VAL(D, T, fit_along, UCHAR);
230 E_CONFIG_VAL(D, T, fit_size, UCHAR);
231 E_CONFIG_VAL(D, T, style, STR);
232 E_CONFIG_VAL(D, T, size, INT);
233 E_CONFIG_VAL(D, T, overlap, INT);
234 E_CONFIG_VAL(D, T, autohide, INT);
235 E_CONFIG_VAL(D, T, autohide_show_action, INT);
236 E_CONFIG_VAL(D, T, hide_timeout, FLOAT);
237 E_CONFIG_VAL(D, T, hide_duration, FLOAT);
238 E_CONFIG_VAL(D, T, desk_show_mode, INT);
239 E_CONFIG_LIST(D, T, desk_list, _e_config_shelf_desk_edd);
240
241 _e_config_desklock_bg_edd = E_CONFIG_DD_NEW("E_Config_Desklock_Background", E_Config_Desklock_Background);
242 #undef T
243 #undef D
244 #define T E_Config_Desklock_Background
245 #define D _e_config_desklock_bg_edd
246 E_CONFIG_VAL(D, T, file, STR);
247 E_CONFIG_VAL(D, T, hide_logo, UCHAR);
248
249 _e_config_desktop_bg_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Background", E_Config_Desktop_Background);
250 #undef T
251 #undef D
252 #define T E_Config_Desktop_Background
253 #define D _e_config_desktop_bg_edd
254 E_CONFIG_VAL(D, T, zone, INT);
255 E_CONFIG_VAL(D, T, desk_x, INT);
256 E_CONFIG_VAL(D, T, desk_y, INT);
257 E_CONFIG_VAL(D, T, file, STR);
258
259 _e_config_desktop_name_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Name", E_Config_Desktop_Name);
260 #undef T
261 #undef D
262 #define T E_Config_Desktop_Name
263 #define D _e_config_desktop_name_edd
264 E_CONFIG_VAL(D, T, zone, INT);
265 E_CONFIG_VAL(D, T, desk_x, INT);
266 E_CONFIG_VAL(D, T, desk_y, INT);
267 E_CONFIG_VAL(D, T, name, STR);
268
269 _e_config_path_append_edd = E_CONFIG_DD_NEW("E_Path_Dir", E_Path_Dir);
270 #undef T
271 #undef D
272 #define T E_Path_Dir
273 #define D _e_config_path_append_edd
274 E_CONFIG_VAL(D, T, dir, STR);
275
276 _e_config_module_edd = E_CONFIG_DD_NEW("E_Config_Module", E_Config_Module);
277 #undef T
278 #undef D
279 #define T E_Config_Module
280 #define D _e_config_module_edd
281 E_CONFIG_VAL(D, T, name, STR);
282 E_CONFIG_VAL(D, T, enabled, UCHAR);
283
284 _e_config_font_default_edd = E_CONFIG_DD_NEW("E_Font_Default",
285 E_Font_Default);
286 #undef T
287 #undef D
288 #define T E_Font_Default
289 #define D _e_config_font_default_edd
290 E_CONFIG_VAL(D, T, text_class, STR);
291 E_CONFIG_VAL(D, T, font, STR);
292 E_CONFIG_VAL(D, T, size, INT);
293
294 _e_config_font_fallback_edd = E_CONFIG_DD_NEW("E_Font_Fallback",
295 E_Font_Fallback);
296 #undef T
297 #undef D
298 #define T E_Font_Fallback
299 #define D _e_config_font_fallback_edd
300 E_CONFIG_VAL(D, T, name, STR);
301
302 _e_config_menu_applications_edd = E_CONFIG_DD_NEW("E_Int_Menu_Applications",
303 E_Int_Menu_Applications);
304 #undef T
305 #undef D
306 #define T E_Int_Menu_Applications
307 #define D _e_config_menu_applications_edd
308 E_CONFIG_VAL(D, T, orig_path, STR);
309 E_CONFIG_VAL(D, T, try_exec, STR);
310 E_CONFIG_VAL(D, T, exec, STR);
311 E_CONFIG_VAL(D, T, load_time, LL);
312 E_CONFIG_VAL(D, T, exec_valid, INT);
313
314 e_remember_edd = E_CONFIG_DD_NEW("E_Remember", E_Remember);
315 #undef T
316 #undef D
317 #define T E_Remember
318 #define D e_remember_edd
319 E_CONFIG_VAL(D, T, version, UINT);
320 E_CONFIG_VAL(D, T, match, INT);
321 E_CONFIG_VAL(D, T, no_reopen, INT);
322 E_CONFIG_VAL(D, T, apply_first_only, UCHAR);
323 E_CONFIG_VAL(D, T, keep_settings, UCHAR);
324 E_CONFIG_VAL(D, T, name, STR);
325 E_CONFIG_VAL(D, T, class, STR);
326 E_CONFIG_VAL(D, T, title, STR);
327 E_CONFIG_VAL(D, T, role, STR);
328 E_CONFIG_VAL(D, T, type, INT);
329 E_CONFIG_VAL(D, T, transient, UCHAR);
330 E_CONFIG_VAL(D, T, apply, INT);
331 E_CONFIG_VAL(D, T, max_score, INT);
332 E_CONFIG_VAL(D, T, prop.pos_x, INT);
333 E_CONFIG_VAL(D, T, prop.pos_y, INT);
334 E_CONFIG_VAL(D, T, prop.res_x, INT);
335 E_CONFIG_VAL(D, T, prop.res_y, INT);
336 E_CONFIG_VAL(D, T, prop.pos_w, INT);
337 E_CONFIG_VAL(D, T, prop.pos_h, INT);
338 E_CONFIG_VAL(D, T, prop.frame_w, INT);
339 E_CONFIG_VAL(D, T, prop.frame_h, INT);
340 E_CONFIG_VAL(D, T, prop.w, INT);
341 E_CONFIG_VAL(D, T, prop.h, INT);
342 E_CONFIG_VAL(D, T, prop.layer, INT);
343 E_CONFIG_VAL(D, T, prop.maximize, UINT);
344 E_CONFIG_VAL(D, T, prop.lock_user_location, UCHAR);
345 E_CONFIG_VAL(D, T, prop.lock_client_location, UCHAR);
346 E_CONFIG_VAL(D, T, prop.lock_user_size, UCHAR);
347 E_CONFIG_VAL(D, T, prop.lock_client_size, UCHAR);
348 E_CONFIG_VAL(D, T, prop.lock_user_stacking, UCHAR);
349 E_CONFIG_VAL(D, T, prop.lock_client_stacking, UCHAR);
350 E_CONFIG_VAL(D, T, prop.lock_user_iconify, UCHAR);
351 E_CONFIG_VAL(D, T, prop.lock_client_iconify, UCHAR);
352 E_CONFIG_VAL(D, T, prop.lock_user_desk, UCHAR);
353 E_CONFIG_VAL(D, T, prop.lock_client_desk, UCHAR);
354 E_CONFIG_VAL(D, T, prop.lock_user_sticky, UCHAR);
355 E_CONFIG_VAL(D, T, prop.lock_client_sticky, UCHAR);
356 E_CONFIG_VAL(D, T, prop.lock_user_shade, UCHAR);
357 E_CONFIG_VAL(D, T, prop.lock_client_shade, UCHAR);
358 E_CONFIG_VAL(D, T, prop.lock_user_maximize, UCHAR);
359 E_CONFIG_VAL(D, T, prop.lock_client_maximize, UCHAR);
360 E_CONFIG_VAL(D, T, prop.lock_user_fullscreen, UCHAR);
361 E_CONFIG_VAL(D, T, prop.lock_client_fullscreen, UCHAR);
362 E_CONFIG_VAL(D, T, prop.lock_border, UCHAR);
363 E_CONFIG_VAL(D, T, prop.lock_close, UCHAR);
364 E_CONFIG_VAL(D, T, prop.lock_focus_in, UCHAR);
365 E_CONFIG_VAL(D, T, prop.lock_focus_out, UCHAR);
366 E_CONFIG_VAL(D, T, prop.lock_life, UCHAR);
367 E_CONFIG_VAL(D, T, prop.border, STR);
368 E_CONFIG_VAL(D, T, prop.sticky, UCHAR);
369 E_CONFIG_VAL(D, T, prop.shaded, UCHAR);
370 E_CONFIG_VAL(D, T, prop.skip_winlist, UCHAR);
371 E_CONFIG_VAL(D, T, prop.skip_pager, UCHAR);
372 E_CONFIG_VAL(D, T, prop.skip_taskbar, UCHAR);
373 E_CONFIG_VAL(D, T, prop.fullscreen, UCHAR);
374 E_CONFIG_VAL(D, T, prop.desk_x, INT);
375 E_CONFIG_VAL(D, T, prop.desk_y, INT);
376 E_CONFIG_VAL(D, T, prop.zone, INT);
377 E_CONFIG_VAL(D, T, prop.command, STR);
378 E_CONFIG_VAL(D, T, prop.icon_preference, UCHAR);
379 E_CONFIG_VAL(D, T, prop.desktop_file, STR);
380 E_CONFIG_VAL(D, T, prop.offer_resistance, UCHAR);
381 E_CONFIG_VAL(D, T, prop.opacity, UCHAR);
382 E_CONFIG_VAL(D, T, prop.volume, INT);
383 E_CONFIG_VAL(D, T, prop.volume_min, INT);
384 E_CONFIG_VAL(D, T, prop.volume_max, INT);
385 E_CONFIG_VAL(D, T, prop.mute, UCHAR);
386 E_CONFIG_VAL(D, T, uuid, STR);
387 E_CONFIG_VAL(D, T, pid, INT);
388
389 _e_config_color_class_edd = E_CONFIG_DD_NEW("E_Color_Class", E_Color_Class);
390 #undef T
391 #undef D
392 #define T E_Color_Class
393 #define D _e_config_color_class_edd
394 E_CONFIG_VAL(D, T, name, STR);
395 E_CONFIG_VAL(D, T, r, INT);
396 E_CONFIG_VAL(D, T, g, INT);
397 E_CONFIG_VAL(D, T, b, INT);
398 E_CONFIG_VAL(D, T, a, INT);
399 E_CONFIG_VAL(D, T, r2, INT);
400 E_CONFIG_VAL(D, T, g2, INT);
401 E_CONFIG_VAL(D, T, b2, INT);
402 E_CONFIG_VAL(D, T, a2, INT);
403 E_CONFIG_VAL(D, T, r3, INT);
404 E_CONFIG_VAL(D, T, g3, INT);
405 E_CONFIG_VAL(D, T, b3, INT);
406 E_CONFIG_VAL(D, T, a3, INT);
407
408 _e_config_mime_icon_edd = E_CONFIG_DD_NEW("E_Config_Mime_Icon",
409 E_Config_Mime_Icon);
410 #undef T
411 #undef D
412 #define T E_Config_Mime_Icon
413 #define D _e_config_mime_icon_edd
414 E_CONFIG_VAL(D, T, mime, STR);
415 E_CONFIG_VAL(D, T, icon, STR);
416
417 _e_config_syscon_action_edd = E_CONFIG_DD_NEW("E_Config_Syscon_Action",
418 E_Config_Syscon_Action);
419 #undef T
420 #undef D
421 #define T E_Config_Syscon_Action
422 #define D _e_config_syscon_action_edd
423 E_CONFIG_VAL(D, T, action, STR);
424 E_CONFIG_VAL(D, T, params, STR);
425 E_CONFIG_VAL(D, T, button, STR);
426 E_CONFIG_VAL(D, T, icon, STR);
427 E_CONFIG_VAL(D, T, is_main, INT);
428
429 _e_config_env_var_edd = E_CONFIG_DD_NEW("E_Config_Env_Var",
430 E_Config_Env_Var);
431 #undef T
432 #undef D
433 #define T E_Config_Env_Var
434 #define D _e_config_env_var_edd
435 E_CONFIG_VAL(D, T, var, STR);
436 E_CONFIG_VAL(D, T, val, STR);
437 E_CONFIG_VAL(D, T, unset, UCHAR);
438
439 _e_config_xkb_layout_edd = E_CONFIG_DD_NEW("E_Config_XKB_Layout",
440 E_Config_XKB_Layout);
441 #undef T
442 #undef D
443 #define T E_Config_XKB_Layout
444 #define D _e_config_xkb_layout_edd
445 E_CONFIG_VAL(D, T, name, STR);
446 E_CONFIG_VAL(D, T, model, STR);
447 E_CONFIG_VAL(D, T, variant, STR);
448
449 _e_config_xkb_option_edd = E_CONFIG_DD_NEW("E_Config_XKB_Option",
450 E_Config_XKB_Option);
451 #undef T
452 #undef D
453 #define T E_Config_XKB_Option
454 #define D _e_config_xkb_option_edd
455 E_CONFIG_VAL(D, T, name, STR);
456
457 _e_config_edd = E_CONFIG_DD_NEW("E_Config", E_Config);
458 #undef T
459 #undef D
460 #define T E_Config
461 #define D _e_config_edd
462 /**/ /* == already configurable via ipc */
463 E_CONFIG_VAL(D, T, config_version, INT); /**/
464 E_CONFIG_VAL(D, T, config_type, UINT); /**/
465 E_CONFIG_VAL(D, T, show_splash, INT); /**/
466 E_CONFIG_VAL(D, T, desktop_default_background, STR); /**/
467 E_CONFIG_LIST(D, T, desktop_backgrounds, _e_config_desktop_bg_edd); /**/
468 E_CONFIG_LIST(D, T, desktop_names, _e_config_desktop_name_edd); /**/
469 E_CONFIG_VAL(D, T, menus_scroll_speed, DOUBLE); /**/
470 E_CONFIG_VAL(D, T, menus_fast_mouse_move_threshhold, DOUBLE); /**/
471 E_CONFIG_VAL(D, T, menus_click_drag_timeout, DOUBLE); /**/
472 E_CONFIG_VAL(D, T, window_maximize_animate, INT); /**/
473 E_CONFIG_VAL(D, T, window_maximize_transition, INT); /**/
474 E_CONFIG_VAL(D, T, window_maximize_time, DOUBLE); /**/
475 E_CONFIG_VAL(D, T, border_shade_animate, INT); /**/
476 E_CONFIG_VAL(D, T, border_shade_transition, INT); /**/
477 E_CONFIG_VAL(D, T, border_shade_speed, DOUBLE); /**/
478 E_CONFIG_VAL(D, T, priority, INT); /**/
479 E_CONFIG_VAL(D, T, zone_desks_x_count, INT); /**/
480 E_CONFIG_VAL(D, T, zone_desks_y_count, INT); /**/
481 E_CONFIG_VAL(D, T, show_desktop_icons, INT); /**/
482 E_CONFIG_VAL(D, T, edge_flip_dragging, INT); /**/
483 E_CONFIG_VAL(D, T, language, STR); /**/
484 E_CONFIG_VAL(D, T, desklock_language, STR); /**/
485 E_CONFIG_LIST(D, T, modules, _e_config_module_edd); /**/
486 EET_DATA_DESCRIPTOR_ADD_LIST_STRING(D, T, "bad_modules", bad_modules);
487 E_CONFIG_LIST(D, T, font_fallbacks, _e_config_font_fallback_edd); /**/
488 E_CONFIG_LIST(D, T, font_defaults, _e_config_font_default_edd); /**/
489 E_CONFIG_LIST(D, T, mouse_bindings, _e_config_bindings_mouse_edd); /**/
490 E_CONFIG_LIST(D, T, key_bindings, _e_config_bindings_key_edd); /**/
491 E_CONFIG_LIST(D, T, edge_bindings, _e_config_bindings_edge_edd); /**/
492 E_CONFIG_LIST(D, T, signal_bindings, _e_config_bindings_signal_edd); /**/
493 E_CONFIG_LIST(D, T, wheel_bindings, _e_config_bindings_wheel_edd); /**/
494 E_CONFIG_LIST(D, T, acpi_bindings, _e_config_bindings_acpi_edd); /**/
495 E_CONFIG_LIST(D, T, path_append_data, _e_config_path_append_edd); /**/
496 E_CONFIG_LIST(D, T, path_append_images, _e_config_path_append_edd); /**/
497 E_CONFIG_LIST(D, T, path_append_fonts, _e_config_path_append_edd); /**/
498 E_CONFIG_LIST(D, T, path_append_init, _e_config_path_append_edd); /**/
499 E_CONFIG_LIST(D, T, path_append_icons, _e_config_path_append_edd); /**/
500 E_CONFIG_LIST(D, T, path_append_modules, _e_config_path_append_edd); /**/
501 E_CONFIG_LIST(D, T, path_append_backgrounds, _e_config_path_append_edd); /**/
502 E_CONFIG_VAL(D, T, window_placement_policy, INT); /**/
503 E_CONFIG_VAL(D, T, window_grouping, INT); /**/
504 E_CONFIG_VAL(D, T, focus_policy, INT); /**/
505 E_CONFIG_VAL(D, T, focus_setting, INT); /**/
506 E_CONFIG_VAL(D, T, pass_click_on, INT); /**/
507 E_CONFIG_VAL(D, T, window_activehint_policy, INT); /**/
508 E_CONFIG_VAL(D, T, always_click_to_raise, INT); /**/
509 E_CONFIG_VAL(D, T, always_click_to_focus, INT); /**/
510 E_CONFIG_VAL(D, T, use_auto_raise, INT); /**/
511 E_CONFIG_VAL(D, T, auto_raise_delay, DOUBLE); /**/
512 E_CONFIG_VAL(D, T, use_resist, INT); /**/
513 E_CONFIG_VAL(D, T, drag_resist, INT); /**/
514 E_CONFIG_VAL(D, T, desk_resist, INT); /**/
515 E_CONFIG_VAL(D, T, window_resist, INT); /**/
516 E_CONFIG_VAL(D, T, gadget_resist, INT); /**/
517 E_CONFIG_VAL(D, T, geometry_auto_resize_limit, INT); /**/
518 E_CONFIG_VAL(D, T, geometry_auto_move, INT); /**/
519 E_CONFIG_VAL(D, T, winlist_warp_while_selecting, INT); /**/
520 E_CONFIG_VAL(D, T, winlist_warp_at_end, INT); /**/
521 E_CONFIG_VAL(D, T, winlist_no_warp_on_direction, INT); /**/
522 E_CONFIG_VAL(D, T, winlist_warp_speed, DOUBLE); /**/
523 E_CONFIG_VAL(D, T, winlist_scroll_animate, INT); /**/
524 E_CONFIG_VAL(D, T, winlist_scroll_speed, DOUBLE); /**/
525 E_CONFIG_VAL(D, T, winlist_list_show_iconified, INT); /**/
526 E_CONFIG_VAL(D, T, winlist_list_show_other_desk_iconified, INT); /**/
527 E_CONFIG_VAL(D, T, winlist_list_show_other_screen_iconified, INT); /**/
528 E_CONFIG_VAL(D, T, winlist_list_show_other_desk_windows, INT); /**/
529 E_CONFIG_VAL(D, T, winlist_list_show_other_screen_windows, INT); /**/
530 E_CONFIG_VAL(D, T, winlist_list_uncover_while_selecting, INT); /**/
531 E_CONFIG_VAL(D, T, winlist_list_jump_desk_while_selecting, INT); /**/
532 E_CONFIG_VAL(D, T, winlist_list_focus_while_selecting, INT); /**/
533 E_CONFIG_VAL(D, T, winlist_list_raise_while_selecting, INT); /**/
534 E_CONFIG_VAL(D, T, winlist_list_move_after_select, INT); /**/
535 E_CONFIG_VAL(D, T, winlist_pos_align_x, DOUBLE); /**/
536 E_CONFIG_VAL(D, T, winlist_pos_align_y, DOUBLE); /**/
537 E_CONFIG_VAL(D, T, winlist_pos_size_w, DOUBLE); /**/
538 E_CONFIG_VAL(D, T, winlist_pos_size_h, DOUBLE); /**/
539 E_CONFIG_VAL(D, T, winlist_pos_min_w, INT); /**/
540 E_CONFIG_VAL(D, T, winlist_pos_min_h, INT); /**/
541 E_CONFIG_VAL(D, T, winlist_pos_max_w, INT); /**/
542 E_CONFIG_VAL(D, T, winlist_pos_max_h, INT); /**/
543 E_CONFIG_VAL(D, T, maximize_policy, INT); /**/
544 E_CONFIG_VAL(D, T, allow_manip, INT); /**/
545 E_CONFIG_VAL(D, T, border_fix_on_shelf_toggle, INT); /**/
546 E_CONFIG_VAL(D, T, allow_above_fullscreen, INT); /**/
547 E_CONFIG_VAL(D, T, kill_if_close_not_possible, INT); /**/
548 E_CONFIG_VAL(D, T, kill_process, INT); /**/
549 E_CONFIG_VAL(D, T, kill_timer_wait, DOUBLE); /**/
550 E_CONFIG_VAL(D, T, ping_clients, INT); /**/
551 E_CONFIG_VAL(D, T, transition_start, STR); /**/
552 E_CONFIG_VAL(D, T, transition_desk, STR); /**/
553 E_CONFIG_VAL(D, T, transition_change, STR); /**/
554 E_CONFIG_LIST(D, T, remembers, e_remember_edd);
555 E_CONFIG_LIST(D, T, menu_applications, _e_config_menu_applications_edd);
556 E_CONFIG_VAL(D, T, remember_internal_windows, INT);
557 E_CONFIG_VAL(D, T, remember_internal_fm_windows, UCHAR);
558 E_CONFIG_VAL(D, T, remember_internal_fm_windows_globally, UCHAR);
559 E_CONFIG_VAL(D, T, move_info_follows, INT); /**/
560 E_CONFIG_VAL(D, T, resize_info_follows, INT); /**/
561 E_CONFIG_VAL(D, T, move_info_visible, INT); /**/
562 E_CONFIG_VAL(D, T, resize_info_visible, INT); /**/
563 E_CONFIG_VAL(D, T, focus_last_focused_per_desktop, INT); /**/
564 E_CONFIG_VAL(D, T, focus_revert_on_hide_or_close, INT); /**/
565 E_CONFIG_VAL(D, T, focus_revert_allow_sticky, INT); /**/
566 E_CONFIG_VAL(D, T, pointer_slide, INT); /**/
567 E_CONFIG_VAL(D, T, disable_all_pointer_warps, INT); /**/
568 E_CONFIG_VAL(D, T, pointer_warp_speed, DOUBLE); /**/
569 E_CONFIG_VAL(D, T, use_e_cursor, INT); /**/
570 E_CONFIG_VAL(D, T, cursor_size, INT); /**/
571 E_CONFIG_VAL(D, T, menu_autoscroll_margin, INT); /**/
572 E_CONFIG_VAL(D, T, menu_autoscroll_cursor_margin, INT); /**/
573 E_CONFIG_VAL(D, T, transient.move, INT); /* FIXME: implement */
574 E_CONFIG_VAL(D, T, transient.resize, INT); /* FIXME: implement */
575 E_CONFIG_VAL(D, T, transient.raise, INT); /**/
576 E_CONFIG_VAL(D, T, transient.lower, INT); /**/
577 E_CONFIG_VAL(D, T, transient.layer, INT); /**/
578 E_CONFIG_VAL(D, T, transient.desktop, INT); /**/
579 E_CONFIG_VAL(D, T, transient.iconify, INT); /**/
580 E_CONFIG_VAL(D, T, menu_eap_name_show, INT); /**/
581 E_CONFIG_VAL(D, T, menu_eap_generic_show, INT); /**/
582 E_CONFIG_VAL(D, T, menu_eap_comment_show, INT); /**/
583 E_CONFIG_VAL(D, T, fullscreen_policy, INT); /**/
584 E_CONFIG_VAL(D, T, input_method, STR); /**/
585 E_CONFIG_LIST(D, T, path_append_messages, _e_config_path_append_edd); /**/
586 E_CONFIG_VAL(D, T, exebuf_term_cmd, STR);
587 E_CONFIG_LIST(D, T, color_classes, _e_config_color_class_edd);
588 E_CONFIG_VAL(D, T, use_app_icon, INT);
589 E_CONFIG_VAL(D, T, cnfmdlg_disabled, INT); /**/
590 E_CONFIG_VAL(D, T, cfgdlg_auto_apply, INT); /**/
591 E_CONFIG_VAL(D, T, cfgdlg_default_mode, INT); /**/
592 E_CONFIG_LIST(D, T, gadcons, _e_config_gadcon_edd);
593 E_CONFIG_LIST(D, T, shelves, _e_config_shelf_edd);
594 E_CONFIG_VAL(D, T, font_hinting, INT); /**/
595 E_CONFIG_VAL(D, T, desklock_passwd, INT);
596 E_CONFIG_VAL(D, T, desklock_pin, INT);
597 E_CONFIG_LIST(D, T, desklock_backgrounds, _e_config_desklock_bg_edd); /**/
598 E_CONFIG_VAL(D, T, desklock_auth_method, INT);
599 E_CONFIG_VAL(D, T, desklock_login_box_zone, INT);
600 E_CONFIG_VAL(D, T, desklock_start_locked, INT);
601 E_CONFIG_VAL(D, T, desklock_on_suspend, INT);
602 E_CONFIG_VAL(D, T, desklock_autolock_screensaver, INT);
603 E_CONFIG_VAL(D, T, desklock_post_screensaver_time, DOUBLE);
604 E_CONFIG_VAL(D, T, desklock_autolock_idle, INT);
605 E_CONFIG_VAL(D, T, desklock_autolock_idle_timeout, DOUBLE);
606 E_CONFIG_VAL(D, T, desklock_use_custom_desklock, INT);
607 E_CONFIG_VAL(D, T, desklock_custom_desklock_cmd, STR);
608 E_CONFIG_VAL(D, T, desklock_ask_presentation, UCHAR);
609 E_CONFIG_VAL(D, T, desklock_ask_presentation_timeout, DOUBLE);
610
611 E_CONFIG_VAL(D, T, screensaver_enable, INT);
612 E_CONFIG_VAL(D, T, screensaver_timeout, INT);
613 E_CONFIG_VAL(D, T, screensaver_interval, INT);
614 E_CONFIG_VAL(D, T, screensaver_blanking, INT);
615 E_CONFIG_VAL(D, T, screensaver_expose, INT);
616 E_CONFIG_VAL(D, T, screensaver_dpms_off, UCHAR);
617 E_CONFIG_VAL(D, T, screensaver_ask_presentation, UCHAR);
618 E_CONFIG_VAL(D, T, screensaver_ask_presentation_timeout, DOUBLE);
619 E_CONFIG_VAL(D, T, screensaver_desklock_timeout, INT);
620
621 E_CONFIG_VAL(D, T, screensaver_wake_on_notify, INT);
622 E_CONFIG_VAL(D, T, screensaver_wake_on_urgent, INT);
623
624 E_CONFIG_VAL(D, T, suspend_connected_standby, UCHAR);
625
626 E_CONFIG_VAL(D, T, screensaver_suspend, UCHAR);
627 E_CONFIG_VAL(D, T, screensaver_hibernate, UCHAR);
628 E_CONFIG_VAL(D, T, screensaver_suspend_on_ac, UCHAR);
629 E_CONFIG_VAL(D, T, screensaver_suspend_delay, DOUBLE);
630
631 E_CONFIG_VAL(D, T, dpms_enable, INT);
632 E_CONFIG_VAL(D, T, dpms_standby_enable, INT);
633 E_CONFIG_VAL(D, T, dpms_suspend_enable, INT);
634 E_CONFIG_VAL(D, T, dpms_off_enable, INT);
635 E_CONFIG_VAL(D, T, dpms_standby_timeout, INT);
636 E_CONFIG_VAL(D, T, dpms_suspend_timeout, INT);
637 E_CONFIG_VAL(D, T, dpms_off_timeout, INT);
638 E_CONFIG_VAL(D, T, no_dpms_on_fullscreen, UCHAR);
639
640 E_CONFIG_VAL(D, T, clientlist_group_by, INT);
641 E_CONFIG_VAL(D, T, clientlist_include_all_zones, INT);
642 E_CONFIG_VAL(D, T, clientlist_separate_with, INT);
643 E_CONFIG_VAL(D, T, clientlist_sort_by, INT);
644 E_CONFIG_VAL(D, T, clientlist_separate_iconified_apps, INT);
645 E_CONFIG_VAL(D, T, clientlist_warp_to_iconified_desktop, INT);
646 E_CONFIG_VAL(D, T, clientlist_limit_caption_len, INT);
647 E_CONFIG_VAL(D, T, clientlist_max_caption_len, INT);
648
649 E_CONFIG_VAL(D, T, mouse_hand, INT);
650 E_CONFIG_VAL(D, T, mouse_accel_numerator, INT);
651 E_CONFIG_VAL(D, T, mouse_accel_denominator, INT);
652 E_CONFIG_VAL(D, T, mouse_accel_threshold, INT);
653 E_CONFIG_VAL(D, T, touch_tap_to_click, UCHAR);
654
655 E_CONFIG_VAL(D, T, border_raise_on_mouse_action, INT);
656 E_CONFIG_VAL(D, T, border_raise_on_focus, INT);
657 E_CONFIG_VAL(D, T, raise_on_revert_focus, INT);
658 E_CONFIG_VAL(D, T, desk_flip_wrap, INT);
659 E_CONFIG_VAL(D, T, fullscreen_flip, INT);
660 E_CONFIG_VAL(D, T, multiscreen_flip, INT);
661
662 E_CONFIG_VAL(D, T, icon_theme, STR);
663 E_CONFIG_VAL(D, T, icon_theme_overrides, UCHAR);
664 E_CONFIG_VAL(D, T, desktop_environment, STR);
665
666 E_CONFIG_VAL(D, T, desk_flip_animate_mode, INT);
667 E_CONFIG_VAL(D, T, desk_flip_animate_type, STR);
668 E_CONFIG_VAL(D, T, desk_flip_animate_interpolation, INT);
669
670 E_CONFIG_VAL(D, T, wallpaper_import_last_dev, STR);
671 E_CONFIG_VAL(D, T, wallpaper_import_last_path, STR);
672
673 E_CONFIG_VAL(D, T, theme_default_border_style, STR);
674
675 E_CONFIG_LIST(D, T, mime_icons, _e_config_mime_icon_edd); /**/
676
677 E_CONFIG_VAL(D, T, desk_auto_switch, INT);
678
679 E_CONFIG_VAL(D, T, screen_limits, INT);
680
681 E_CONFIG_VAL(D, T, thumb_nice, INT);
682
683 E_CONFIG_VAL(D, T, menu_icons_hide, UCHAR);
684 E_CONFIG_VAL(D, T, menu_favorites_show, INT);
685 E_CONFIG_VAL(D, T, menu_apps_show, INT);
686 E_CONFIG_VAL(D, T, menu_gadcon_client_toplevel, INT);
687
688 E_CONFIG_VAL(D, T, ping_clients_interval, INT);
689
690 E_CONFIG_VAL(D, T, thumbscroll_enable, INT);
691 E_CONFIG_VAL(D, T, thumbscroll_threshhold, INT);
692 E_CONFIG_VAL(D, T, thumbscroll_momentum_threshhold, DOUBLE);
693 E_CONFIG_VAL(D, T, thumbscroll_friction, DOUBLE);
694
695 E_CONFIG_VAL(D, T, filemanager_single_click, UCHAR);
696 E_CONFIG_VAL(D, T, device_desktop, INT);
697 E_CONFIG_VAL(D, T, device_auto_mount, INT);
698 E_CONFIG_VAL(D, T, device_auto_open, INT);
699 E_CONFIG_VAL(D, T, filemanager_copy, UCHAR);
700 E_CONFIG_VAL(D, T, filemanager_secure_rm, UCHAR);
701
702 E_CONFIG_VAL(D, T, border_keyboard.timeout, DOUBLE);
703 E_CONFIG_VAL(D, T, border_keyboard.move.dx, UCHAR);
704 E_CONFIG_VAL(D, T, border_keyboard.move.dy, UCHAR);
705 E_CONFIG_VAL(D, T, border_keyboard.resize.dx, UCHAR);
706 E_CONFIG_VAL(D, T, border_keyboard.resize.dy, UCHAR);
707
708 E_CONFIG_VAL(D, T, scale.min, DOUBLE);
709 E_CONFIG_VAL(D, T, scale.max, DOUBLE);
710 E_CONFIG_VAL(D, T, scale.factor, DOUBLE);
711 E_CONFIG_VAL(D, T, scale.base_dpi, INT);
712 E_CONFIG_VAL(D, T, scale.use_dpi, UCHAR);
713 E_CONFIG_VAL(D, T, scale.use_custom, UCHAR);
714
715 E_CONFIG_VAL(D, T, show_cursor, UCHAR);
716 E_CONFIG_VAL(D, T, idle_cursor, UCHAR);
717
718 E_CONFIG_VAL(D, T, default_system_menu, STR);
719
720 E_CONFIG_VAL(D, T, cfgdlg_normal_wins, UCHAR);
721
722 E_CONFIG_VAL(D, T, syscon.main.icon_size, INT);
723 E_CONFIG_VAL(D, T, syscon.secondary.icon_size, INT);
724 E_CONFIG_VAL(D, T, syscon.extra.icon_size, INT);
725 E_CONFIG_VAL(D, T, syscon.timeout, DOUBLE);
726 E_CONFIG_VAL(D, T, syscon.do_input, UCHAR);
727 E_CONFIG_LIST(D, T, syscon.actions, _e_config_syscon_action_edd);
728
729 E_CONFIG_VAL(D, T, mode.presentation, UCHAR);
730 E_CONFIG_VAL(D, T, mode.offline, UCHAR);
731
732 E_CONFIG_VAL(D, T, exec.expire_timeout, DOUBLE);
733 E_CONFIG_VAL(D, T, exec.show_run_dialog, UCHAR);
734 E_CONFIG_VAL(D, T, exec.show_exit_dialog, UCHAR);
735
736 E_CONFIG_VAL(D, T, null_container_win, UCHAR);
737
738 E_CONFIG_LIST(D, T, env_vars, _e_config_env_var_edd);
739
740 E_CONFIG_VAL(D, T, backlight.normal, DOUBLE);
741 E_CONFIG_VAL(D, T, backlight.dim, DOUBLE);
742 E_CONFIG_VAL(D, T, backlight.transition, DOUBLE);
743 E_CONFIG_VAL(D, T, backlight.timer, DOUBLE);
744 E_CONFIG_VAL(D, T, backlight.battery_timer, DOUBLE);
745 E_CONFIG_VAL(D, T, backlight.sysdev, STR);
746 E_CONFIG_VAL(D, T, backlight.idle_dim, UCHAR);
747
748 E_CONFIG_VAL(D, T, deskenv.load_xrdb, UCHAR);
749 E_CONFIG_VAL(D, T, deskenv.load_xmodmap, UCHAR);
750 E_CONFIG_VAL(D, T, deskenv.load_gnome, UCHAR);
751 E_CONFIG_VAL(D, T, deskenv.load_kde, UCHAR);
752
753 E_CONFIG_VAL(D, T, powersave.none, DOUBLE);
754 E_CONFIG_VAL(D, T, powersave.low, DOUBLE);
755 E_CONFIG_VAL(D, T, powersave.medium, DOUBLE);
756 E_CONFIG_VAL(D, T, powersave.high, DOUBLE);
757 E_CONFIG_VAL(D, T, powersave.extreme, DOUBLE);
758 E_CONFIG_VAL(D, T, powersave.min, INT);
759 E_CONFIG_VAL(D, T, powersave.max, INT);
760
761 E_CONFIG_VAL(D, T, xsettings.enabled, UCHAR);
762 E_CONFIG_VAL(D, T, xsettings.match_e17_theme, UCHAR);
763 E_CONFIG_VAL(D, T, xsettings.match_e17_icon_theme, UCHAR);
764 E_CONFIG_VAL(D, T, xsettings.xft_antialias, INT);
765 E_CONFIG_VAL(D, T, xsettings.xft_hinting, INT);
766 E_CONFIG_VAL(D, T, xsettings.xft_hint_style, STR);
767 E_CONFIG_VAL(D, T, xsettings.xft_rgba, STR);
768 E_CONFIG_VAL(D, T, xsettings.net_theme_name, STR);
769 E_CONFIG_VAL(D, T, xsettings.net_icon_theme_name, STR);
770 E_CONFIG_VAL(D, T, xsettings.gtk_font_name, STR);
771
772 E_CONFIG_VAL(D, T, update.check, UCHAR);
773 E_CONFIG_VAL(D, T, update.later, UCHAR);
774
775 E_CONFIG_LIST(D, T, xkb.used_layouts, _e_config_xkb_layout_edd);
776 E_CONFIG_LIST(D, T, xkb.used_options, _e_config_xkb_option_edd);
777 E_CONFIG_VAL(D, T, xkb.only_label, INT);
778 E_CONFIG_VAL(D, T, xkb.dont_touch_my_damn_keyboard, UCHAR);
779 E_CONFIG_VAL(D, T, xkb.default_model, STR);
780 E_CONFIG_VAL(D, T, xkb.use_cache, UCHAR);
781
782 E_CONFIG_VAL(D, T, keyboard.repeat_delay, INT);
783 E_CONFIG_VAL(D, T, keyboard.repeat_rate, INT);
784
785 if (old)
786 {
787 E_CONFIG_SUB(D, T, xkb.current_layout, _e_config_xkb_option_edd);
788 E_CONFIG_SUB(D, T, xkb.sel_layout, _e_config_xkb_option_edd);
789 E_CONFIG_SUB(D, T, xkb.lock_layout, _e_config_xkb_option_edd);
790 }
791 else
792 {
793 E_CONFIG_SUB(D, T, xkb.current_layout, _e_config_xkb_layout_edd);
794 E_CONFIG_SUB(D, T, xkb.sel_layout, _e_config_xkb_layout_edd);
795 E_CONFIG_SUB(D, T, xkb.lock_layout, _e_config_xkb_layout_edd);
796 }
797 E_CONFIG_VAL(D, T, xkb.selected_layout, STR);
798 E_CONFIG_VAL(D, T, xkb.cur_layout, STR);
799 E_CONFIG_VAL(D, T, xkb.desklock_layout, STR);
800 //E_CONFIG_VAL(D, T, xkb.cur_group, INT);
801
802 E_CONFIG_VAL(D, T, exe_always_single_instance, UCHAR);
803 }
804
805 /* externally accessible functions */
806 EINTERN int
e_config_init(void)807 e_config_init(void)
808 {
809 E_EVENT_CONFIG_ICON_THEME = ecore_event_type_new();
810 E_EVENT_CONFIG_MODE_CHANGED = ecore_event_type_new();
811 E_EVENT_CONFIG_LOADED = ecore_event_type_new();
812
813 /* if environment var set - use this profile name */
814 _e_config_profile = eina_stringshare_add(getenv("E_CONF_PROFILE"));
815
816 if (!_e_config_profile)
817 {
818 Eet_File *ef;
819 char buf[PATH_MAX];
820
821 /* try user profile config */
822 e_user_dir_concat_static(buf, "config/profile.cfg");
823 ef = eet_open(buf, EET_FILE_MODE_READ);
824 if (ef)
825 {
826 _e_config_profile = _e_config_profile_name_get(ef);
827 eet_close(ef);
828 ef = NULL;
829 }
830 if (!_e_config_profile)
831 {
832 int i;
833
834 for (i = 1; i <= _e_config_revisions; i++)
835 {
836 e_user_dir_snprintf(buf, sizeof(buf), "config/profile.%i.cfg", i);
837 ef = eet_open(buf, EET_FILE_MODE_READ);
838 if (ef)
839 {
840 _e_config_profile = _e_config_profile_name_get(ef);
841 eet_close(ef);
842 ef = NULL;
843 if (_e_config_profile) break;
844 }
845 }
846 if (!_e_config_profile)
847 {
848 /* use system if no user profile config */
849 e_prefix_data_concat_static(buf, "data/config/profile.cfg");
850 ef = eet_open(buf, EET_FILE_MODE_READ);
851 }
852 }
853 if (ef)
854 {
855 _e_config_profile = _e_config_profile_name_get(ef);
856 eet_close(ef);
857 ef = NULL;
858 }
859 if (!_e_config_profile)
860 {
861 /* no profile config - try other means */
862 char *lnk = NULL;
863
864 /* check symlink - if default is a symlink to another dir */
865 e_prefix_data_concat_static(buf, "data/config/default");
866 lnk = ecore_file_readlink(buf);
867 /* if so use just the filename as the profile - must be a local link */
868 if (lnk)
869 {
870 _e_config_profile = eina_stringshare_add(ecore_file_file_get(lnk));
871 free(lnk);
872 }
873 else
874 _e_config_profile = eina_stringshare_add("default");
875 }
876 if (!getenv("E_CONF_PROFILE"))
877 e_util_env_set("E_CONF_PROFILE", _e_config_profile);
878 }
879
880 _e_config_bindings_mouse_edd = E_CONFIG_DD_NEW("E_Config_Binding_Mouse",
881 E_Config_Binding_Mouse);
882 #undef T
883 #undef D
884 #define T E_Config_Binding_Mouse
885 #define D _e_config_bindings_mouse_edd
886 E_CONFIG_VAL(D, T, context, INT);
887 E_CONFIG_VAL(D, T, modifiers, INT);
888 E_CONFIG_VAL(D, T, action, STR);
889 E_CONFIG_VAL(D, T, params, STR);
890 E_CONFIG_VAL(D, T, button, UCHAR);
891 E_CONFIG_VAL(D, T, any_mod, UCHAR);
892
893 _e_config_bindings_key_edd = E_CONFIG_DD_NEW("E_Config_Binding_Key",
894 E_Config_Binding_Key);
895 #undef T
896 #undef D
897 #define T E_Config_Binding_Key
898 #define D _e_config_bindings_key_edd
899 E_CONFIG_VAL(D, T, context, INT);
900 E_CONFIG_VAL(D, T, modifiers, INT);
901 E_CONFIG_VAL(D, T, key, STR);
902 E_CONFIG_VAL(D, T, action, STR);
903 E_CONFIG_VAL(D, T, params, STR);
904 E_CONFIG_VAL(D, T, any_mod, UCHAR);
905
906 _e_config_bindings_edge_edd = E_CONFIG_DD_NEW("E_Config_Binding_Edge",
907 E_Config_Binding_Edge);
908 #undef T
909 #undef D
910 #define T E_Config_Binding_Edge
911 #define D _e_config_bindings_edge_edd
912 E_CONFIG_VAL(D, T, context, INT);
913 E_CONFIG_VAL(D, T, modifiers, INT);
914 E_CONFIG_VAL(D, T, action, STR);
915 E_CONFIG_VAL(D, T, params, STR);
916 E_CONFIG_VAL(D, T, edge, UCHAR);
917 E_CONFIG_VAL(D, T, any_mod, UCHAR);
918 E_CONFIG_VAL(D, T, drag_only, UCHAR);
919 E_CONFIG_VAL(D, T, delay, FLOAT);
920
921 _e_config_bindings_signal_edd = E_CONFIG_DD_NEW("E_Config_Binding_Signal",
922 E_Config_Binding_Signal);
923 #undef T
924 #undef D
925 #define T E_Config_Binding_Signal
926 #define D _e_config_bindings_signal_edd
927 E_CONFIG_VAL(D, T, context, INT);
928 E_CONFIG_VAL(D, T, signal, STR);
929 E_CONFIG_VAL(D, T, source, STR);
930 E_CONFIG_VAL(D, T, modifiers, INT);
931 E_CONFIG_VAL(D, T, any_mod, UCHAR);
932 E_CONFIG_VAL(D, T, action, STR);
933 E_CONFIG_VAL(D, T, params, STR);
934
935 _e_config_bindings_wheel_edd = E_CONFIG_DD_NEW("E_Config_Binding_Wheel",
936 E_Config_Binding_Wheel);
937 #undef T
938 #undef D
939 #define T E_Config_Binding_Wheel
940 #define D _e_config_bindings_wheel_edd
941 E_CONFIG_VAL(D, T, context, INT);
942 E_CONFIG_VAL(D, T, direction, INT);
943 E_CONFIG_VAL(D, T, z, INT);
944 E_CONFIG_VAL(D, T, modifiers, INT);
945 E_CONFIG_VAL(D, T, any_mod, UCHAR);
946 E_CONFIG_VAL(D, T, action, STR);
947 E_CONFIG_VAL(D, T, params, STR);
948
949 _e_config_bindings_acpi_edd = E_CONFIG_DD_NEW("E_Config_Binding_Acpi",
950 E_Config_Binding_Acpi);
951 #undef T
952 #undef D
953 #define T E_Config_Binding_Acpi
954 #define D _e_config_bindings_acpi_edd
955 E_CONFIG_VAL(D, T, context, INT);
956 E_CONFIG_VAL(D, T, type, INT);
957 E_CONFIG_VAL(D, T, status, INT);
958 E_CONFIG_VAL(D, T, action, STR);
959 E_CONFIG_VAL(D, T, params, STR);
960
961 _e_config_edd_init(EINA_FALSE);
962
963 _e_config_binding_edd = E_CONFIG_DD_NEW("E_Config_Bindings", E_Config_Bindings);
964 #undef T
965 #undef D
966 #define T E_Config_Bindings
967 #define D _e_config_binding_edd
968 E_CONFIG_VAL(D, T, config_version, UINT); /**/
969 E_CONFIG_LIST(D, T, mouse_bindings, _e_config_bindings_mouse_edd); /**/
970 E_CONFIG_LIST(D, T, key_bindings, _e_config_bindings_key_edd); /**/
971 E_CONFIG_LIST(D, T, edge_bindings, _e_config_bindings_edge_edd); /**/
972 E_CONFIG_LIST(D, T, signal_bindings, _e_config_bindings_signal_edd); /**/
973 E_CONFIG_LIST(D, T, wheel_bindings, _e_config_bindings_wheel_edd); /**/
974 E_CONFIG_LIST(D, T, acpi_bindings, _e_config_bindings_acpi_edd); /**/
975
976 e_config_load();
977
978 e_config_save_queue();
979
980 E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_DESKTOP_CACHE_UPDATE,
981 _e_config_cb_efreet_cache_update, NULL);
982 E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE,
983 _e_config_cb_efreet_cache_update, NULL);
984 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME,
985 _e_config_cb_efreet_cache_update, NULL);
986
987 return 1;
988 }
989
990 EINTERN int
e_config_shutdown(void)991 e_config_shutdown(void)
992 {
993 E_FREE_LIST(handlers, ecore_event_handler_del);
994 eina_stringshare_del(_e_config_profile);
995 E_CONFIG_DD_FREE(_e_config_binding_edd);
996 E_CONFIG_DD_FREE(_e_config_bindings_mouse_edd);
997 E_CONFIG_DD_FREE(_e_config_bindings_key_edd);
998 E_CONFIG_DD_FREE(_e_config_bindings_edge_edd);
999 E_CONFIG_DD_FREE(_e_config_bindings_signal_edd);
1000 E_CONFIG_DD_FREE(_e_config_bindings_wheel_edd);
1001 E_CONFIG_DD_FREE(_e_config_bindings_acpi_edd);
1002 _e_config_edd_shutdown();
1003 return 1;
1004 }
1005
1006 E_API void
e_config_load(void)1007 e_config_load(void)
1008 {
1009 int reload = 0;
1010
1011 e_config = e_config_domain_load("e", _e_config_edd);
1012 if (e_config)
1013 {
1014 /* major version change - that means wipe and restart */
1015 if ((e_config->config_version) < E_CONFIG_FILE_EPOCH * 1000000)
1016 {
1017 /* your config is too old - need new defaults */
1018 _e_config_free(e_config);
1019 e_config = NULL;
1020 reload = 1;
1021 ecore_timer_loop_add(1.0, _e_config_cb_timer,
1022 _("Settings data needed upgrading. Your old settings have<ps/>"
1023 "been wiped and a new set of defaults initialized. This<ps/>"
1024 "will happen regularly during development, so don't report a<ps/>"
1025 "bug. This simply means Enlightenment needs new settings<ps/>"
1026 "data by default for usable functionality that your old<ps/>"
1027 "settings simply lack. This new set of defaults will fix<ps/>"
1028 "that by adding it in. You can re-configure things now to your<ps/>"
1029 "liking. Sorry for the hiccup in your settings.<ps/>"));
1030 }
1031 /* config is too new? odd! suspect corruption? */
1032 else if (e_config->config_version > E_CONFIG_FILE_VERSION)
1033 {
1034 /* your config is too new - what the fuck??? */
1035 _e_config_free(e_config);
1036 e_config = NULL;
1037 reload = 1;
1038 ecore_timer_loop_add(1.0, _e_config_cb_timer,
1039 _("Your settings are NEWER than Enlightenment. This is very<ps/>"
1040 "strange. This should not happen unless you downgraded<ps/>"
1041 "Enlightenment or copied the settings from a place where<ps/>"
1042 "a newer version of Enlightenment was running. This is bad and<ps/>"
1043 "as a precaution your settings have been now restored to<ps/>"
1044 "defaults. Sorry for the inconvenience.<ps/>"));
1045 }
1046 if (reload)
1047 {
1048 e_config_profile_del(e_config_profile_get());
1049 e_config_profile_set("default");
1050 e_config = e_config_domain_load("e", _e_config_edd);
1051 }
1052 }
1053 while (!e_config)
1054 {
1055 _e_config_edd_shutdown();
1056 _e_config_edd_init(EINA_TRUE);
1057 e_config = e_config_domain_load("e", _e_config_edd);
1058 /* I made a c&p error here and fucked the world, so this ugliness
1059 * will be my public mark of shame until E :/
1060 * -zmike, 2013
1061 */
1062 if (e_config)
1063 {
1064 Eina_List *l;
1065 E_Config_XKB_Layout *cl;
1066 int set = 0;
1067
1068 /* this is essentially CONFIG_VERSION_CHECK(7) */
1069 INF("Performing config upgrade to %d.%d", 1, 7);
1070 _e_config_edd_shutdown();
1071 _e_config_edd_init(EINA_FALSE);
1072 set += !!e_config->xkb.current_layout;
1073 set += !!e_config->xkb.sel_layout;
1074 set += !!e_config->xkb.lock_layout;
1075 EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl)
1076 {
1077 if (e_config->xkb.current_layout && (e_config->xkb.current_layout->name == cl->name))
1078 {
1079 e_config->xkb.current_layout->model = eina_stringshare_ref(cl->model);
1080 e_config->xkb.current_layout->variant = eina_stringshare_ref(cl->variant);
1081 set--;
1082 }
1083 if (e_config->xkb.sel_layout && (e_config->xkb.sel_layout->name == cl->name))
1084 {
1085 e_config->xkb.sel_layout->model = eina_stringshare_ref(cl->model);
1086 e_config->xkb.sel_layout->variant = eina_stringshare_ref(cl->variant);
1087 set--;
1088 }
1089 if (e_config->xkb.lock_layout && (e_config->xkb.lock_layout->name == cl->name))
1090 {
1091 e_config->xkb.lock_layout->model = eina_stringshare_ref(cl->model);
1092 e_config->xkb.lock_layout->variant = eina_stringshare_ref(cl->variant);
1093 set--;
1094 }
1095 if (!set) break;
1096 }
1097 break;
1098 }
1099 #undef T
1100 #undef D
1101 e_config_profile_set("default");
1102 if (!reload) e_config_profile_del(e_config_profile_get());
1103 e_config_save_block_set(1);
1104 exit(111);
1105 //e_sys_action_do(E_SYS_RESTART, NULL);
1106 return;
1107 }
1108
1109 #define CONFIG_VERSION_CHECK(VERSION) \
1110 if (e_config->config_version - (E_CONFIG_FILE_EPOCH * 1000000) < (VERSION))
1111
1112 #define CONFIG_VERSION_UPDATE_INFO(VERSION) \
1113 INF("Performing config upgrade for %d.%d", E_CONFIG_FILE_EPOCH, VERSION);
1114
1115 /* this should be 6, an xkb fix fucked up the ordering and this is now really broken */
1116 CONFIG_VERSION_CHECK(8)
1117 {
1118 /* e_bindings config domain didn't exist before this version, so we have to do this
1119 * check before we load or else we wipe configs :(
1120 */
1121 #undef SET
1122 #define SET(X) e_bindings->X = e_config->X, e_config->X = NULL
1123
1124 //CONFIG_VERSION_UPDATE_INFO(6);
1125 if (e_config->mouse_bindings || e_config->key_bindings || e_config->edge_bindings ||
1126 e_config->signal_bindings || e_config->wheel_bindings || e_config->acpi_bindings)
1127 {
1128 e_bindings = E_NEW(E_Config_Bindings, 1);
1129 SET(mouse_bindings);
1130 SET(key_bindings);
1131 SET(edge_bindings);
1132 SET(signal_bindings);
1133 SET(wheel_bindings);
1134 SET(acpi_bindings);
1135 e_config_domain_save("e_bindings", _e_config_binding_edd, e_bindings);
1136 #undef SET
1137 }
1138 else
1139 e_bindings = e_config_domain_load("e_bindings", _e_config_binding_edd);
1140 }
1141 else
1142 e_bindings = e_config_domain_load("e_bindings", _e_config_binding_edd);
1143
1144 if ((!e_bindings) || (e_bindings->config_version != E_CONFIG_BINDINGS_VERSION))
1145 {
1146 Eina_Stringshare *prof;
1147
1148 e_config_bindings_free(e_bindings);
1149 prof = eina_stringshare_ref(e_config_profile_get());
1150 e_config_profile_set("standard");
1151 e_bindings = e_config_domain_system_load("e_bindings", _e_config_binding_edd);
1152 e_config_profile_set(prof);
1153 eina_stringshare_del(prof);
1154 ecore_timer_loop_add(1.0, _e_config_cb_timer,
1155 _("Your bindings settings version does not match the current settings version.<ps/>"
1156 "As a result, all bindings have been reloaded from defaults.<ps/>"
1157 "Sorry for the inconvenience.<ps/>"));
1158 }
1159
1160 if (e_config->config_version < E_CONFIG_FILE_VERSION)
1161 {
1162 CONFIG_VERSION_CHECK(5)
1163 {
1164 E_Config_XKB_Layout *cl;
1165 Eina_List *l;
1166
1167 CONFIG_VERSION_UPDATE_INFO(5);
1168 if (e_config->xkb.cur_layout || e_config->xkb.selected_layout || e_config->xkb.desklock_layout)
1169 {
1170 EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl)
1171 {
1172 if (cl->name == e_config->xkb.cur_layout)
1173 e_config->xkb.current_layout = e_config_xkb_layout_dup(cl);
1174 if (cl->name == e_config->xkb.selected_layout)
1175 e_config->xkb.sel_layout = e_config_xkb_layout_dup(cl);
1176 if (cl->name == e_config->xkb.desklock_layout)
1177 e_config->xkb.lock_layout = e_config_xkb_layout_dup(cl);
1178 if (((!!e_config->xkb.current_layout) == (!!e_config->xkb.cur_layout)) &&
1179 ((!!e_config->xkb.sel_layout) == (!!e_config->xkb.selected_layout)) &&
1180 ((!!e_config->xkb.lock_layout) == (!!e_config->xkb.desklock_layout)))
1181 break;
1182 }
1183 }
1184 }
1185 /* this gets done above but I'm leaving it here so it can be seen
1186 CONFIG_VERSION_CHECK(6)
1187 {
1188 CONFIG_VERSION_UPDATE_INFO(6);
1189 e_bindings = E_NEW(E_Config_Bindings, 1);
1190 #undef SET
1191 #define SET(X) e_bindings->X = e_config->X, e_config->X = NULL
1192
1193 SET(mouse_bindings);
1194 SET(key_bindings);
1195 SET(edge_bindings);
1196 SET(signal_bindings);
1197 SET(wheel_bindings);
1198 SET(acpi_bindings);
1199 #undef SET
1200 e_config_domain_save("e_bindings", _e_config_binding_edd, e_bindings);
1201 }
1202 */
1203 CONFIG_VERSION_CHECK(8)
1204 {
1205 CONFIG_VERSION_UPDATE_INFO(8);
1206 if (!e_config->config_type)
1207 {
1208 /* I guess this probably isn't great, but whatever */
1209 if (eina_list_count(e_bindings->key_bindings) > 2)
1210 e_config->config_type = E_CONFIG_PROFILE_TYPE_DESKTOP;
1211 else
1212 e_config->config_type = E_CONFIG_PROFILE_TYPE_TABLET;
1213 }
1214 }
1215 CONFIG_VERSION_CHECK(10)
1216 {
1217 int do_conf = 0;
1218 Eina_List *l, *ll;
1219 E_Config_Module *em;
1220 int enabled = 0;
1221
1222 CONFIG_VERSION_UPDATE_INFO(10);
1223 EINA_LIST_FOREACH_SAFE(e_config->modules, l, ll, em)
1224 {
1225 Eina_Bool do_free = EINA_FALSE;
1226
1227 if (!e_util_strcmp(em->name, "comp"))
1228 do_free = EINA_TRUE;
1229 else if ((!e_util_strcmp(em->name, "conf_keybindings")) || (!e_util_strcmp(em->name, "conf_edgebindings")))
1230 {
1231 do_conf += do_free = EINA_TRUE;
1232 enabled |= em->enabled;
1233 }
1234 if (do_free)
1235 {
1236 e_config->modules = eina_list_remove_list(e_config->modules, l);
1237 eina_stringshare_del(em->name);
1238 free(em);
1239 }
1240 if (do_conf == 2) break;
1241 }
1242 if (do_conf)
1243 {
1244 em = E_NEW(E_Config_Module, 1);
1245 em->name = eina_stringshare_add("conf_bindings");
1246 em->enabled = !!enabled;
1247 e_config->modules = eina_list_append(e_config->modules, em);
1248 }
1249 }
1250 CONFIG_VERSION_CHECK(11)
1251 {
1252 CONFIG_VERSION_UPDATE_INFO(11);
1253 e_config->pointer_warp_speed = e_config->winlist_warp_speed;
1254 e_config->winlist_warp_speed = 0;
1255
1256 if (e_config->focus_policy == E_FOCUS_CLICK)
1257 {
1258 if (e_config->border_raise_on_focus)
1259 {
1260 /* approximate expected behavior from removed option */
1261 e_config->always_click_to_focus = 1;
1262 e_config->always_click_to_raise = 1;
1263 }
1264 }
1265 }
1266 CONFIG_VERSION_CHECK(12)
1267 {
1268 CONFIG_VERSION_UPDATE_INFO(12);
1269 switch (e_config->desk_flip_animate_mode)
1270 {
1271 case 1: //pane
1272 e_config->desk_flip_animate_type = eina_stringshare_add("auto/pane");
1273 break;
1274 case 2: //zoom, now known as diagonal
1275 e_config->desk_flip_animate_type = eina_stringshare_add("auto/diagonal");
1276 break;
1277 default:
1278 break;
1279 }
1280 }
1281 CONFIG_VERSION_CHECK(14)
1282 {
1283 Eina_List *files, *l;
1284 Eina_Bool fail = EINA_FALSE;
1285 E_Config_Shelf *cf_es;
1286 E_Remember *rem;
1287 char buf[PATH_MAX], buf2[PATH_MAX], *f;
1288
1289 CONFIG_VERSION_UPDATE_INFO(14);
1290
1291 EINA_LIST_FOREACH(e_config->shelves, l, cf_es)
1292 {
1293 if (cf_es->popup)
1294 {
1295 if (cf_es->layer)
1296 cf_es->layer = E_LAYER_CLIENT_ABOVE;
1297 else
1298 cf_es->layer = E_LAYER_CLIENT_DESKTOP;
1299 }
1300 else if (!cf_es->layer)
1301 cf_es->layer = E_LAYER_DESKTOP; //redundant, but whatever
1302 cf_es->popup = 0;
1303 }
1304
1305 /* E layer values are higher */
1306 EINA_LIST_FOREACH(e_config->remembers, l, rem)
1307 if (rem->apply & E_REMEMBER_APPLY_LAYER)
1308 rem->prop.layer += 100;
1309
1310 // copy all of ~/.e/e/themes/* into ~/.elementary/themes
1311 // and delete original data in ~/.e/e/themes
1312 ecore_file_mkpath(elm_theme_user_dir_get());
1313 snprintf(buf, sizeof(buf), "%s/themes", e_user_dir_get());
1314 files = ecore_file_ls(buf);
1315 EINA_LIST_FREE(files, f)
1316 {
1317 snprintf(buf, sizeof(buf), "%s/themes/%s",
1318 e_user_dir_get(), f);
1319 snprintf(buf2, sizeof(buf2), "%s/%s",
1320 elm_theme_user_dir_get(), f);
1321 if (!ecore_file_cp(buf, buf2)) fail = EINA_TRUE;
1322 }
1323 if (!fail)
1324 {
1325 snprintf(buf, sizeof(buf), "%s/themes", e_user_dir_get());
1326 ecore_file_recursive_rm(buf);
1327 }
1328 }
1329 CONFIG_VERSION_CHECK(15)
1330 {
1331 E_Config_Module *em;
1332 Eina_List *l;
1333 Eina_Bool found = EINA_FALSE;
1334
1335 CONFIG_VERSION_UPDATE_INFO(15);
1336 if (e_config->desklock_use_custom_desklock)
1337 e_config->desklock_auth_method = E_DESKLOCK_AUTH_METHOD_EXTERNAL;
1338
1339 EINA_LIST_FOREACH(e_config->modules, l, em)
1340 if (!strcmp(em->name, "lokker"))
1341 {
1342 found = EINA_TRUE;
1343 break;
1344 }
1345 if (!found)
1346 {
1347 /* add new desklock module */
1348 em = E_NEW(E_Config_Module, 1);
1349 em->name = eina_stringshare_add("lokker");
1350 em->enabled = 1;
1351 e_config->modules = eina_list_append(e_config->modules, em);
1352 }
1353 }
1354 CONFIG_VERSION_CHECK(17)
1355 {
1356 E_Config_Module *em;
1357 Eina_List *l;
1358
1359 CONFIG_VERSION_UPDATE_INFO(17);
1360
1361 EINA_LIST_FOREACH(e_config->modules, l, em)
1362 if (!strcmp(em->name, "pager16"))
1363 {
1364 eina_stringshare_replace(&em->name, "pager");
1365 break;
1366 }
1367 }
1368 CONFIG_VERSION_CHECK(18)
1369 {
1370 E_Color_Class *ecc;
1371
1372 CONFIG_VERSION_UPDATE_INFO(18);
1373 EINA_LIST_FREE(e_config->color_classes, ecc)
1374 {
1375 elm_config_color_overlay_set(ecc->name, ecc->r, ecc->g, ecc->b, ecc->a, ecc->r2, ecc->g2, ecc->b2, ecc->a2, ecc->r3, ecc->g3, ecc->b3, ecc->a3);
1376 eina_stringshare_del(ecc->name);
1377 free(ecc);
1378 }
1379 }
1380 CONFIG_VERSION_CHECK(19)
1381 {
1382 CONFIG_VERSION_UPDATE_INFO(19);
1383
1384 /* set (400, 25) as the default values of repeat delay, rate */
1385 e_config->keyboard.repeat_delay = 400;
1386 e_config->keyboard.repeat_rate = 25;
1387 }
1388 CONFIG_VERSION_CHECK(20)
1389 {
1390 Eina_List *l;
1391 E_Config_Binding_Mouse *ebm;
1392 E_Config_Module *em, *module;
1393
1394 CONFIG_VERSION_UPDATE_INFO(20);
1395
1396 EINA_LIST_FOREACH(e_bindings->mouse_bindings, l, ebm)
1397 {
1398 if (eina_streq(ebm->action, "window_move"))
1399 {
1400 _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers,
1401 ebm->any_mod, "gadget_move", NULL);
1402 }
1403 else if (eina_streq(ebm->action, "window_resize"))
1404 {
1405 _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers,
1406 ebm->any_mod, "gadget_resize", NULL);
1407 }
1408 else if (eina_streq(ebm->action, "window_menu"))
1409 {
1410 _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers,
1411 ebm->any_mod, "gadget_menu", NULL);
1412 _e_config_binding_mouse_add(E_BINDING_CONTEXT_ANY, ebm->button, ebm->modifiers,
1413 ebm->any_mod, "bryce_menu", NULL);
1414 }
1415 }
1416 _e_config_binding_wheel_add(E_BINDING_CONTEXT_ANY, 0, 1, E_BINDING_MODIFIER_CTRL, 0, "bryce_resize", NULL);
1417 _e_config_binding_wheel_add(E_BINDING_CONTEXT_ANY, 0, -1, E_BINDING_MODIFIER_CTRL, 0, "bryce_resize", NULL);
1418
1419 EINA_LIST_FOREACH(e_config->modules, l, em)
1420 {
1421 if (!em->enabled) continue;
1422 if (eina_streq(em->name, "connman"))
1423 {
1424 module = E_NEW(E_Config_Module, 1);
1425 module->name = eina_stringshare_add("wireless");
1426 module->enabled = 1;
1427 e_config->modules = eina_list_append(e_config->modules, module);
1428 }
1429 else if (eina_streq(em->name, "clock"))
1430 {
1431 module = E_NEW(E_Config_Module, 1);
1432 module->name = eina_stringshare_add("time");
1433 module->enabled = 1;
1434 e_config->modules = eina_list_append(e_config->modules, module);
1435 }
1436 }
1437 }
1438
1439 CONFIG_VERSION_CHECK(21)
1440 {
1441 CONFIG_VERSION_UPDATE_INFO(21);
1442
1443 e_config->window_maximize_animate = 1;
1444 e_config->window_maximize_transition = E_EFX_EFFECT_SPEED_SINUSOIDAL;
1445 e_config->window_maximize_time = 0.15;
1446 e_config_save_queue();
1447 }
1448 CONFIG_VERSION_CHECK(22)
1449 {
1450 Eina_List *l;
1451 E_Config_Module *em, *module;
1452 Eina_Bool ibar_en = EINA_FALSE, luncher_en = EINA_FALSE;
1453
1454 CONFIG_VERSION_UPDATE_INFO(22);
1455
1456 EINA_LIST_FOREACH(e_config->modules, l, em)
1457 {
1458 if (!em->enabled) continue;
1459 if (eina_streq(em->name, "ibar"))
1460 ibar_en = EINA_TRUE;
1461 else if (eina_streq(em->name, "luncher"))
1462 luncher_en = EINA_TRUE;
1463 }
1464 if (ibar_en && !luncher_en)
1465 {
1466 module = E_NEW(E_Config_Module, 1);
1467 module->name = eina_stringshare_add("luncher");
1468 module->enabled = 1;
1469 e_config->modules = eina_list_append(e_config->modules, module);
1470 }
1471 e_config_save_queue();
1472 }
1473 CONFIG_VERSION_CHECK(23)
1474 {
1475 Eina_List *l;
1476 E_Config_Module *em, *module;
1477 Eina_Bool sysinfo_en = EINA_FALSE;
1478
1479 CONFIG_VERSION_UPDATE_INFO(23);
1480
1481 EINA_LIST_FOREACH(e_config->modules, l, em)
1482 {
1483 if (!em->enabled) continue;
1484 if (eina_streq(em->name, "sysinfo"))
1485 sysinfo_en = EINA_TRUE;
1486 }
1487 if (!sysinfo_en)
1488 {
1489 module = E_NEW(E_Config_Module, 1);
1490 module->name = eina_stringshare_add("sysinfo");
1491 module->enabled = 1;
1492 e_config->modules = eina_list_append(e_config->modules, module);
1493 }
1494 e_config_save_queue();
1495 }
1496 CONFIG_VERSION_CHECK(24)
1497 {
1498 CONFIG_VERSION_UPDATE_INFO(24);
1499
1500 if (!elm_config_profile_exists(_e_config_profile))
1501 elm_config_profile_save(_e_config_profile);
1502 e_config_save_queue();
1503 }
1504 CONFIG_VERSION_CHECK(25)
1505 {
1506 Eina_List *l;
1507 E_Config_Binding_Edge *ebe;
1508
1509 CONFIG_VERSION_UPDATE_INFO(25);
1510 EINA_LIST_FOREACH(e_bindings->edge_bindings, l, ebe)
1511 {
1512 if ((ebe->context == E_BINDING_CONTEXT_ZONE) &&
1513 (ebe->modifiers == 0) &&
1514 (ebe->edge >= 1) && (ebe->edge <= 4) &&
1515 (!ebe->any_mod) &&
1516 (ebe->action) &&
1517 (!strcmp(ebe->action, "desk_flip_in_direction")))
1518 {
1519 ebe->any_mod = 1;
1520 }
1521 }
1522 e_config_save_queue();
1523 }
1524 CONFIG_VERSION_CHECK(26)
1525 {
1526 // move from bluez4 to bluez5 automatically. you can manually
1527 // move back if that works better for you...
1528 Eina_List *l, *ll;
1529 E_Config_Module *em;
1530 E_Config_Gadcon *gc;
1531 E_Config_Gadcon_Client *gcc;
1532
1533 CONFIG_VERSION_UPDATE_INFO(26);
1534 EINA_LIST_FOREACH(e_config->modules, l, em)
1535 {
1536 if (!em->enabled) continue;
1537 if (!em->name) continue;
1538 if (eina_streq(em->name, "bluez4"))
1539 {
1540 eina_stringshare_replace(&(em->name), "bluez5");
1541 }
1542 }
1543 EINA_LIST_FOREACH(e_config->gadcons, l, gc)
1544 {
1545 EINA_LIST_FOREACH(gc->clients, ll, gcc)
1546 {
1547 if (!gcc->name) continue;
1548 if (!strncmp(gcc->name, "bluez4", 6))
1549 {
1550 char *tmp = strdup(gcc->name);
1551 if (tmp)
1552 {
1553 tmp[5] = '5';
1554 eina_stringshare_replace(&(gcc->name), tmp);
1555 free(tmp);
1556 }
1557 }
1558 }
1559 }
1560 e_config_save_queue();
1561 }
1562 CONFIG_VERSION_CHECK(28)
1563 {
1564 Eina_List *l, *ll;
1565 E_Config_Binding_Mouse *ebm;
1566
1567 CONFIG_VERSION_UPDATE_INFO(28);
1568 EINA_LIST_FOREACH_SAFE(e_bindings->mouse_bindings, l, ll, ebm)
1569 {
1570 if ((eina_streq(ebm->action, "gadget_menu")) ||
1571 (eina_streq(ebm->action, "bryce_menu")))
1572 {
1573 e_bindings->mouse_bindings =
1574 eina_list_remove_list
1575 (e_bindings->mouse_bindings, l);
1576 eina_stringshare_del(ebm->action);
1577 eina_stringshare_del(ebm->params);
1578 free(ebm);
1579 }
1580 }
1581 e_config_save_queue();
1582 }
1583 CONFIG_VERSION_CHECK(29)
1584 {
1585 Eina_List *l;
1586 E_Config_Module *em, *module;
1587 Eina_Bool mod_loaded = EINA_FALSE;
1588
1589 CONFIG_VERSION_UPDATE_INFO(29);
1590
1591 EINA_LIST_FOREACH(e_config->modules, l, em)
1592 {
1593 if (!em->enabled) continue;
1594 if (eina_streq(em->name, "polkit"))
1595 mod_loaded = EINA_TRUE;
1596 }
1597 if (!mod_loaded)
1598 {
1599 module = E_NEW(E_Config_Module, 1);
1600 module->name = eina_stringshare_add("polkit");
1601 module->enabled = 1;
1602 e_config->modules = eina_list_append(e_config->modules, module);
1603 }
1604 e_config_save_queue();
1605 }
1606 CONFIG_VERSION_CHECK(30)
1607 {
1608 Eina_List *l;
1609 E_Config_Module *em;
1610
1611 CONFIG_VERSION_UPDATE_INFO(30);
1612 EINA_LIST_FOREACH(e_config->modules, l, em)
1613 {
1614 if (!em->enabled) continue;
1615 if (!em->name) continue;
1616 if (eina_streq(em->name, "pager_plain"))
1617 {
1618 eina_stringshare_replace(&(em->name), "pager");
1619 }
1620 }
1621 e_config_save_queue();
1622 }
1623 }
1624 elm_config_profile_set(_e_config_profile);
1625 if (!e_config->remember_internal_fm_windows)
1626 e_config->remember_internal_fm_windows = !!(e_config->remember_internal_windows & E_REMEMBER_INTERNAL_FM_WINS);
1627
1628 e_bindings->config_version = E_CONFIG_BINDINGS_VERSION;
1629 e_config->config_version = E_CONFIG_FILE_VERSION;
1630
1631 /* limit values so they are sane */
1632 E_CONFIG_LIMIT(e_config->menus_scroll_speed, 1.0, 20000.0);
1633 E_CONFIG_LIMIT(e_config->show_splash, 0, 1);
1634 E_CONFIG_LIMIT(e_config->menus_fast_mouse_move_threshhold, 1.0, 2000.0);
1635 E_CONFIG_LIMIT(e_config->menus_click_drag_timeout, 0.0, 10.0);
1636 E_CONFIG_LIMIT(e_config->window_maximize_animate, 0, 1);
1637 E_CONFIG_LIMIT(e_config->window_maximize_transition, 0, E_EFX_EFFECT_SPEED_SINUSOIDAL);
1638 E_CONFIG_LIMIT(e_config->window_maximize_time, 0.0, 1.0);
1639 E_CONFIG_LIMIT(e_config->border_shade_animate, 0, 1);
1640 E_CONFIG_LIMIT(e_config->border_shade_transition, 0, 8);
1641 E_CONFIG_LIMIT(e_config->border_shade_speed, 1.0, 20000.0);
1642 E_CONFIG_LIMIT(e_config->priority, 0, 19);
1643 E_CONFIG_LIMIT(e_config->zone_desks_x_count, 1, 64);
1644 E_CONFIG_LIMIT(e_config->zone_desks_y_count, 1, 64);
1645 E_CONFIG_LIMIT(e_config->show_desktop_icons, 0, 1);
1646 E_CONFIG_LIMIT(e_config->edge_flip_dragging, 0, 1);
1647 E_CONFIG_LIMIT(e_config->window_placement_policy, E_WINDOW_PLACEMENT_SMART, E_WINDOW_PLACEMENT_MANUAL);
1648 E_CONFIG_LIMIT(e_config->window_grouping, 0, 1);
1649 E_CONFIG_LIMIT(e_config->focus_policy, 0, 2);
1650 E_CONFIG_LIMIT(e_config->focus_setting, 0, 3);
1651 E_CONFIG_LIMIT(e_config->pass_click_on, 0, 1);
1652 E_CONFIG_LIMIT(e_config->window_activehint_policy, E_ACTIVEHINT_POLICY_IGNORE, E_ACTIVEHINT_POLICY_LAST - 1);
1653 E_CONFIG_LIMIT(e_config->always_click_to_raise, 0, 1);
1654 E_CONFIG_LIMIT(e_config->always_click_to_focus, 0, 1);
1655 E_CONFIG_LIMIT(e_config->use_auto_raise, 0, 1);
1656 E_CONFIG_LIMIT(e_config->auto_raise_delay, 0.0, 9.9);
1657 E_CONFIG_LIMIT(e_config->use_resist, 0, 1);
1658 E_CONFIG_LIMIT(e_config->drag_resist, 0, 100);
1659 E_CONFIG_LIMIT(e_config->desk_resist, 0, 100);
1660 E_CONFIG_LIMIT(e_config->window_resist, 0, 100);
1661 E_CONFIG_LIMIT(e_config->gadget_resist, 0, 100);
1662 E_CONFIG_LIMIT(e_config->geometry_auto_move, 0, 1);
1663 E_CONFIG_LIMIT(e_config->geometry_auto_resize_limit, 0, 1);
1664 E_CONFIG_LIMIT(e_config->winlist_warp_while_selecting, 0, 1);
1665 E_CONFIG_LIMIT(e_config->winlist_warp_at_end, 0, 1);
1666 E_CONFIG_LIMIT(e_config->winlist_no_warp_on_direction, 0, 1);
1667 E_CONFIG_LIMIT(e_config->winlist_warp_speed, 0.0, 1.0);
1668 E_CONFIG_LIMIT(e_config->winlist_scroll_animate, 0, 1);
1669 E_CONFIG_LIMIT(e_config->winlist_scroll_speed, 0.0, 1.0);
1670 E_CONFIG_LIMIT(e_config->winlist_list_show_iconified, 0, 1);
1671 E_CONFIG_LIMIT(e_config->winlist_list_show_other_desk_iconified, 0, 1);
1672 E_CONFIG_LIMIT(e_config->winlist_list_show_other_screen_iconified, 0, 1);
1673 E_CONFIG_LIMIT(e_config->winlist_list_show_other_desk_windows, 0, 1);
1674 E_CONFIG_LIMIT(e_config->winlist_list_show_other_screen_windows, 0, 1);
1675 E_CONFIG_LIMIT(e_config->winlist_list_uncover_while_selecting, 0, 1);
1676 E_CONFIG_LIMIT(e_config->winlist_list_jump_desk_while_selecting, 0, 1);
1677 E_CONFIG_LIMIT(e_config->winlist_pos_align_x, 0.0, 1.0);
1678 E_CONFIG_LIMIT(e_config->winlist_pos_align_y, 0.0, 1.0);
1679 E_CONFIG_LIMIT(e_config->winlist_pos_size_w, 0.0, 1.0);
1680 E_CONFIG_LIMIT(e_config->winlist_pos_size_h, 0.0, 1.0);
1681 E_CONFIG_LIMIT(e_config->winlist_pos_min_w, 0, 4000);
1682 E_CONFIG_LIMIT(e_config->winlist_pos_min_h, 0, 4000);
1683 E_CONFIG_LIMIT(e_config->winlist_pos_max_w, 8, 4000);
1684 E_CONFIG_LIMIT(e_config->winlist_pos_max_h, 8, 4000);
1685 E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_FULLSCREEN, E_MAXIMIZE_DIRECTION);
1686 E_CONFIG_LIMIT(e_config->allow_manip, 0, 1);
1687 E_CONFIG_LIMIT(e_config->border_fix_on_shelf_toggle, 0, 1);
1688 E_CONFIG_LIMIT(e_config->allow_above_fullscreen, 0, 1);
1689 E_CONFIG_LIMIT(e_config->kill_if_close_not_possible, 0, 1);
1690 E_CONFIG_LIMIT(e_config->kill_process, 0, 1);
1691 E_CONFIG_LIMIT(e_config->kill_timer_wait, 0.0, 120.0);
1692 E_CONFIG_LIMIT(e_config->ping_clients, 0, 1);
1693 E_CONFIG_LIMIT(e_config->move_info_follows, 0, 1);
1694 E_CONFIG_LIMIT(e_config->resize_info_follows, 0, 1);
1695 E_CONFIG_LIMIT(e_config->move_info_visible, 0, 1);
1696 E_CONFIG_LIMIT(e_config->resize_info_visible, 0, 1);
1697 E_CONFIG_LIMIT(e_config->focus_last_focused_per_desktop, 0, 1);
1698 E_CONFIG_LIMIT(e_config->focus_revert_on_hide_or_close, 0, 1);
1699 E_CONFIG_LIMIT(e_config->focus_revert_allow_sticky, 0, 1);
1700 E_CONFIG_LIMIT(e_config->pointer_slide, 0, 1);
1701 E_CONFIG_LIMIT(e_config->disable_all_pointer_warps, 0, 1);
1702 E_CONFIG_LIMIT(e_config->pointer_warp_speed, 0.0, 1.0);
1703 E_CONFIG_LIMIT(e_config->show_cursor, 0, 1);
1704 E_CONFIG_LIMIT(e_config->use_e_cursor, 0, 1);
1705 E_CONFIG_LIMIT(e_config->cursor_size, 0, 1024);
1706 E_CONFIG_LIMIT(e_config->menu_autoscroll_margin, 0, 50);
1707 E_CONFIG_LIMIT(e_config->menu_autoscroll_cursor_margin, 0, 50);
1708 E_CONFIG_LIMIT(e_config->menu_eap_name_show, 0, 1);
1709 E_CONFIG_LIMIT(e_config->menu_eap_generic_show, 0, 1);
1710 E_CONFIG_LIMIT(e_config->menu_eap_comment_show, 0, 1);
1711 E_CONFIG_LIMIT(e_config->use_app_icon, 0, 1);
1712 E_CONFIG_LIMIT(e_config->cnfmdlg_disabled, 0, 1);
1713 E_CONFIG_LIMIT(e_config->cfgdlg_auto_apply, 0, 1);
1714 E_CONFIG_LIMIT(e_config->cfgdlg_default_mode, 0, 1);
1715 E_CONFIG_LIMIT(e_config->font_hinting, 0, 2);
1716 E_CONFIG_LIMIT(e_config->desklock_login_box_zone, -2, 1000);
1717 E_CONFIG_LIMIT(e_config->desklock_autolock_screensaver, 0, 1);
1718 E_CONFIG_LIMIT(e_config->desklock_post_screensaver_time, 0.0, 300.0);
1719 E_CONFIG_LIMIT(e_config->desklock_autolock_idle, 0, 1);
1720 E_CONFIG_LIMIT(e_config->desklock_autolock_idle_timeout, 1.0, 5400.0);
1721 E_CONFIG_LIMIT(e_config->desklock_use_custom_desklock, 0, 1);
1722 E_CONFIG_LIMIT(e_config->desklock_ask_presentation, 0, 1);
1723 E_CONFIG_LIMIT(e_config->desklock_ask_presentation_timeout, 1.0, 300.0);
1724 E_CONFIG_LIMIT(e_config->border_raise_on_mouse_action, 0, 1);
1725 E_CONFIG_LIMIT(e_config->border_raise_on_focus, 0, 1);
1726 E_CONFIG_LIMIT(e_config->raise_on_revert_focus, 0, 1);
1727 E_CONFIG_LIMIT(e_config->desk_flip_wrap, 0, 1);
1728 E_CONFIG_LIMIT(e_config->fullscreen_flip, 0, 1);
1729 E_CONFIG_LIMIT(e_config->icon_theme_overrides, 0, 1);
1730 E_CONFIG_LIMIT(e_config->remember_internal_windows, 0, 3);
1731 E_CONFIG_LIMIT(e_config->remember_internal_fm_windows, 0, 1);
1732 E_CONFIG_LIMIT(e_config->remember_internal_fm_windows_globally, 0, 1);
1733 E_CONFIG_LIMIT(e_config->desk_auto_switch, 0, 1);
1734
1735 E_CONFIG_LIMIT(e_config->screen_limits, 0, 2);
1736
1737 E_CONFIG_LIMIT(e_config->dpms_enable, 0, 1);
1738 E_CONFIG_LIMIT(e_config->dpms_standby_enable, 0, 1);
1739 E_CONFIG_LIMIT(e_config->dpms_suspend_enable, 0, 1);
1740 E_CONFIG_LIMIT(e_config->dpms_off_enable, 0, 1);
1741 E_CONFIG_LIMIT(e_config->dpms_standby_timeout, 30, 5400);
1742 E_CONFIG_LIMIT(e_config->dpms_suspend_timeout, 30, 5400);
1743 E_CONFIG_LIMIT(e_config->dpms_off_timeout, 30, 5400);
1744
1745 E_CONFIG_LIMIT(e_config->backlight.timer, 1, 3600);
1746
1747 E_CONFIG_LIMIT(e_config->screensaver_timeout, 6, 5400);
1748 E_CONFIG_LIMIT(e_config->screensaver_interval, 0, 5400);
1749 E_CONFIG_LIMIT(e_config->screensaver_blanking, 0, 2);
1750 E_CONFIG_LIMIT(e_config->screensaver_expose, 0, 2);
1751 E_CONFIG_LIMIT(e_config->screensaver_ask_presentation, 0, 1);
1752 E_CONFIG_LIMIT(e_config->screensaver_ask_presentation_timeout, 1.0, 300.0);
1753
1754 E_CONFIG_LIMIT(e_config->screensaver_wake_on_notify, 0, 1);
1755 E_CONFIG_LIMIT(e_config->screensaver_wake_on_urgent, 0, 1);
1756
1757 E_CONFIG_LIMIT(e_config->clientlist_group_by, 0, 2);
1758 E_CONFIG_LIMIT(e_config->clientlist_include_all_zones, 0, 1);
1759 E_CONFIG_LIMIT(e_config->clientlist_separate_with, 0, 2);
1760 E_CONFIG_LIMIT(e_config->clientlist_sort_by, 0, 3);
1761 E_CONFIG_LIMIT(e_config->clientlist_separate_iconified_apps, 0, 2);
1762 E_CONFIG_LIMIT(e_config->clientlist_warp_to_iconified_desktop, 0, 1);
1763 E_CONFIG_LIMIT(e_config->mouse_hand, 0, 1);
1764 E_CONFIG_LIMIT(e_config->clientlist_limit_caption_len, 0, 1);
1765 E_CONFIG_LIMIT(e_config->clientlist_max_caption_len, 2, E_CLIENTLIST_MAX_CAPTION_LEN);
1766
1767 E_CONFIG_LIMIT(e_config->mouse_accel_numerator, 1, 30);
1768 E_CONFIG_LIMIT(e_config->mouse_accel_denominator, 1, 10);
1769 E_CONFIG_LIMIT(e_config->mouse_accel_threshold, 0, 10);
1770 E_CONFIG_LIMIT(e_config->touch_tap_to_click, 0, 3);
1771
1772 E_CONFIG_LIMIT(e_config->menu_favorites_show, 0, 1);
1773 E_CONFIG_LIMIT(e_config->menu_apps_show, 0, 1);
1774 E_CONFIG_LIMIT(e_config->menu_gadcon_client_toplevel, 0, 1);
1775
1776 E_CONFIG_LIMIT(e_config->ping_clients_interval, 16, 1024);
1777
1778 E_CONFIG_LIMIT(e_config->mode.presentation, 0, 1);
1779 E_CONFIG_LIMIT(e_config->mode.offline, 0, 1);
1780
1781 E_CONFIG_LIMIT(e_config->exec.expire_timeout, 0.1, 1000);
1782 E_CONFIG_LIMIT(e_config->exec.show_run_dialog, 0, 1);
1783 E_CONFIG_LIMIT(e_config->exec.show_exit_dialog, 0, 1);
1784
1785 E_CONFIG_LIMIT(e_config->null_container_win, 0, 1);
1786
1787 E_CONFIG_LIMIT(e_config->powersave.none, 0.01, 5400.00);
1788 E_CONFIG_LIMIT(e_config->powersave.low, 0.01, 5400.00);
1789 E_CONFIG_LIMIT(e_config->powersave.medium, 0.01, 5400.00);
1790 E_CONFIG_LIMIT(e_config->powersave.high, 0.01, 5400.00);
1791 E_CONFIG_LIMIT(e_config->powersave.extreme, 0.01, 5400.00);
1792 E_CONFIG_LIMIT(e_config->powersave.min, E_POWERSAVE_MODE_NONE, E_POWERSAVE_MODE_EXTREME);
1793 E_CONFIG_LIMIT(e_config->powersave.max, E_POWERSAVE_MODE_NONE, E_POWERSAVE_MODE_EXTREME);
1794
1795 E_CONFIG_LIMIT(e_config->border_keyboard.move.dx, 1, 255);
1796 E_CONFIG_LIMIT(e_config->border_keyboard.move.dy, 1, 255);
1797 E_CONFIG_LIMIT(e_config->border_keyboard.resize.dx, 1, 255);
1798 E_CONFIG_LIMIT(e_config->border_keyboard.resize.dy, 1, 255);
1799
1800 E_CONFIG_LIMIT(e_config->multiscreen_flip, 0, 1);
1801
1802 E_CONFIG_LIMIT(e_config->backlight.normal, 0.05, 1.0);
1803 E_CONFIG_LIMIT(e_config->backlight.dim, 0.05, 1.0);
1804 E_CONFIG_LIMIT(e_config->backlight.idle_dim, 0, 1);
1805
1806 E_CONFIG_LIMIT(e_config->keyboard.repeat_delay, -1, 1000); // 1 second
1807 E_CONFIG_LIMIT(e_config->keyboard.repeat_rate, -1, 1000); // 1 second
1808
1809 if (!e_config->icon_theme)
1810 e_config->icon_theme = eina_stringshare_add("hicolor"); // FDO default
1811
1812 /* FIXME: disabled auto apply because it causes problems */
1813 e_config->cfgdlg_auto_apply = 0;
1814
1815 ecore_event_add(E_EVENT_CONFIG_LOADED, NULL, NULL, NULL);
1816 }
1817
1818 E_API int
e_config_save(void)1819 e_config_save(void)
1820 {
1821 E_FREE_FUNC(_e_config_save_defer, e_powersave_deferred_action_del);
1822 _e_config_save_cb(NULL);
1823 return e_config_domain_save("e", _e_config_edd, e_config);
1824 }
1825
1826 E_API void
e_config_save_flush(void)1827 e_config_save_flush(void)
1828 {
1829 if (_e_config_save_defer)
1830 {
1831 e_powersave_deferred_action_del(_e_config_save_defer);
1832 _e_config_save_defer = NULL;
1833 _e_config_save_cb(NULL);
1834 }
1835 }
1836
1837 E_API void
e_config_save_queue(void)1838 e_config_save_queue(void)
1839 {
1840 if (_e_config_save_defer)
1841 e_powersave_deferred_action_del(_e_config_save_defer);
1842 _e_config_save_defer = e_powersave_deferred_action_add(_e_config_save_cb,
1843 NULL);
1844 }
1845
1846 E_API const char *
e_config_profile_get(void)1847 e_config_profile_get(void)
1848 {
1849 return _e_config_profile;
1850 }
1851
1852 E_API void
e_config_profile_set(const char * prof)1853 e_config_profile_set(const char *prof)
1854 {
1855 eina_stringshare_replace(&_e_config_profile, prof);
1856 e_util_env_set("E_CONF_PROFILE", _e_config_profile);
1857 }
1858
1859 E_API char *
e_config_profile_dir_get(const char * prof)1860 e_config_profile_dir_get(const char *prof)
1861 {
1862 char buf[PATH_MAX];
1863
1864 e_user_dir_snprintf(buf, sizeof(buf), "config/%s", prof);
1865 if (ecore_file_is_dir(buf)) return strdup(buf);
1866 e_prefix_data_snprintf(buf, sizeof(buf), "data/config/%s", prof);
1867 if (ecore_file_is_dir(buf)) return strdup(buf);
1868 return NULL;
1869 }
1870
1871 static int
_cb_sort_files(char * f1,char * f2)1872 _cb_sort_files(char *f1, char *f2)
1873 {
1874 return strcmp(f1, f2);
1875 }
1876
1877 E_API Eina_List *
e_config_profile_list(void)1878 e_config_profile_list(void)
1879 {
1880 Eina_List *files;
1881 char buf[PATH_MAX], *p;
1882 Eina_List *flist = NULL;
1883 size_t len;
1884
1885 len = e_user_dir_concat_static(buf, "config");
1886 if (len + 1 >= (int)sizeof(buf))
1887 return NULL;
1888
1889 files = ecore_file_ls(buf);
1890
1891 buf[len] = '/';
1892 len++;
1893
1894 p = buf + len;
1895 len = sizeof(buf) - len;
1896 if (files)
1897 {
1898 char *file;
1899
1900 files = eina_list_sort(files, 0, (Eina_Compare_Cb)_cb_sort_files);
1901 EINA_LIST_FREE(files, file)
1902 {
1903 if (eina_strlcpy(p, file, len) >= len)
1904 {
1905 free(file);
1906 continue;
1907 }
1908 if (ecore_file_is_dir(buf))
1909 flist = eina_list_append(flist, file);
1910 else
1911 free(file);
1912 }
1913 }
1914 len = e_prefix_data_concat_static(buf, "data/config");
1915 if (len >= sizeof(buf))
1916 return NULL;
1917
1918 files = ecore_file_ls(buf);
1919
1920 buf[len] = '/';
1921 len++;
1922
1923 p = buf + len;
1924 len = sizeof(buf) - len;
1925 if (files)
1926 {
1927 char *file;
1928 files = eina_list_sort(files, 0, (Eina_Compare_Cb)_cb_sort_files);
1929 EINA_LIST_FREE(files, file)
1930 {
1931 if (eina_strlcpy(p, file, len) >= len)
1932 {
1933 free(file);
1934 continue;
1935 }
1936 if (ecore_file_is_dir(buf))
1937 {
1938 const Eina_List *l;
1939 const char *tmp;
1940 EINA_LIST_FOREACH(flist, l, tmp)
1941 if (!strcmp(file, tmp)) break;
1942
1943 if (!l) flist = eina_list_append(flist, file);
1944 else free(file);
1945 }
1946 else
1947 free(file);
1948 }
1949 }
1950 return flist;
1951 }
1952
1953 E_API void
e_config_profile_add(const char * prof)1954 e_config_profile_add(const char *prof)
1955 {
1956 char buf[4096];
1957 if (e_user_dir_snprintf(buf, sizeof(buf), "config/%s", prof) >= sizeof(buf))
1958 return;
1959 ecore_file_mkdir(buf);
1960 }
1961
1962 E_API void
e_config_profile_del(const char * prof)1963 e_config_profile_del(const char *prof)
1964 {
1965 char buf[4096];
1966 if (e_user_dir_snprintf(buf, sizeof(buf), "config/%s", prof) >= sizeof(buf))
1967 return;
1968 ecore_file_recursive_rm(buf);
1969 }
1970
1971 E_API void
e_config_save_block_set(int block)1972 e_config_save_block_set(int block)
1973 {
1974 _e_config_save_block = block;
1975 }
1976
1977 E_API int
e_config_save_block_get(void)1978 e_config_save_block_get(void)
1979 {
1980 return _e_config_save_block;
1981 }
1982
1983 /**
1984 * Loads configurations from file located in the working profile
1985 * The configurations are stored in a struct declated by the
1986 * macros E_CONFIG_DD_NEW and E_CONFIG_<b>TYPE</b>
1987 *
1988 * @param domain of the configuration file.
1989 * @param edd to struct definition
1990 * @return returns allocated struct on success, if unable to find config returns null
1991 */
1992 E_API void *
e_config_domain_load(const char * domain,E_Config_DD * edd)1993 e_config_domain_load(const char *domain, E_Config_DD *edd)
1994 {
1995 Eet_File *ef;
1996 char buf[4096];
1997 void *data = NULL;
1998 int i;
1999
2000 e_user_dir_snprintf(buf, sizeof(buf), "config/%s/%s.cfg",
2001 _e_config_profile, domain);
2002 ef = eet_open(buf, EET_FILE_MODE_READ);
2003 if (ef)
2004 {
2005 data = eet_data_read(ef, edd, "config");
2006 eet_close(ef);
2007 if (data) return data;
2008 }
2009
2010 for (i = 1; i <= _e_config_revisions; i++)
2011 {
2012 e_user_dir_snprintf(buf, sizeof(buf), "config/%s/%s.%i.cfg",
2013 _e_config_profile, domain, i);
2014 ef = eet_open(buf, EET_FILE_MODE_READ);
2015 if (ef)
2016 {
2017 data = eet_data_read(ef, edd, "config");
2018 eet_close(ef);
2019 if (data) return data;
2020 }
2021 }
2022 return e_config_domain_system_load(domain, edd);
2023 }
2024
2025 E_API void *
e_config_domain_system_load(const char * domain,E_Config_DD * edd)2026 e_config_domain_system_load(const char *domain, E_Config_DD *edd)
2027 {
2028 Eet_File *ef;
2029 char buf[4096];
2030 void *data = NULL;
2031
2032 e_prefix_data_snprintf(buf, sizeof(buf), "data/config/%s/%s.cfg",
2033 _e_config_profile, domain);
2034 ef = eet_open(buf, EET_FILE_MODE_READ);
2035 if (ef)
2036 {
2037 data = eet_data_read(ef, edd, "config");
2038 eet_close(ef);
2039 return data;
2040 }
2041
2042 return data;
2043 }
2044
2045 static void
_e_config_mv_error(const char * from,const char * to)2046 _e_config_mv_error(const char *from, const char *to)
2047 {
2048 E_Dialog *dia;
2049 char buf[8192];
2050
2051 if (_e_config_error_dialog) return;
2052
2053 dia = e_dialog_new(NULL, "E", "_sys_error_logout_slow");
2054 EINA_SAFETY_ON_NULL_RETURN(dia);
2055
2056 e_dialog_title_set(dia, _("Enlightenment Settings Write Problems"));
2057 e_dialog_icon_set(dia, "dialog-error", 64);
2058 snprintf(buf, sizeof(buf),
2059 _("Enlightenment has had an error while moving config files<ps/>"
2060 "from:<ps/>"
2061 "%s<ps/>"
2062 "<ps/>"
2063 "to:<ps/>"
2064 "%s<ps/>"
2065 "<ps/>"
2066 "The rest of the write has been aborted for safety.<ps/>"),
2067 from, to);
2068 e_dialog_text_set(dia, buf);
2069 e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
2070 e_dialog_button_focus_num(dia, 0);
2071 elm_win_center(dia->win, 1, 1);
2072 e_object_del_attach_func_set(E_OBJECT(dia),
2073 _e_config_error_dialog_cb_delete);
2074 e_dialog_show(dia);
2075 _e_config_error_dialog = dia;
2076 }
2077
2078 E_API int
e_config_profile_save(void)2079 e_config_profile_save(void)
2080 {
2081 Eet_File *ef;
2082 char buf[4096], buf2[4096];
2083 const char *s;
2084 int ok = 0;
2085 static signed char nosave = -1;
2086
2087 if (nosave == -1)
2088 {
2089 if ((s = getenv("E_CONF_PROFILE_NOSAVE")) && atoi(s)) nosave = 1;
2090 else nosave = 0;
2091 }
2092 if (nosave == 1) return 1;
2093
2094 /* FIXME: check for other sessions fo E running */
2095 e_user_dir_concat_static(buf, "config/profile.cfg");
2096 e_user_dir_concat_static(buf2, "config/profile.cfg.tmp");
2097
2098 ef = eet_open(buf2, EET_FILE_MODE_WRITE);
2099 if (ef)
2100 {
2101 ok = eet_write(ef, "config", _e_config_profile,
2102 strlen(_e_config_profile), 0);
2103 if (_e_config_eet_close_handle(ef, buf2))
2104 {
2105 Eina_Bool ret = EINA_TRUE;
2106
2107 if (_e_config_revisions > 0)
2108 {
2109 int i;
2110 char bsrc[4096], bdst[4096];
2111
2112 for (i = _e_config_revisions; i > 1; i--)
2113 {
2114 e_user_dir_snprintf(bsrc, sizeof(bsrc), "config/profile.%i.cfg", i - 1);
2115 e_user_dir_snprintf(bdst, sizeof(bdst), "config/profile.%i.cfg", i);
2116 if ((ecore_file_exists(bsrc)) &&
2117 (ecore_file_size(bsrc)))
2118 {
2119 ret = ecore_file_mv(bsrc, bdst);
2120 if (!ret)
2121 {
2122 _e_config_mv_error(bsrc, bdst);
2123 break;
2124 }
2125 }
2126 }
2127 if (ret)
2128 {
2129 e_user_dir_snprintf(bsrc, sizeof(bsrc), "config/profile.cfg");
2130 e_user_dir_snprintf(bdst, sizeof(bdst), "config/profile.1.cfg");
2131 ecore_file_mv(bsrc, bdst);
2132 // if (!ret)
2133 // _e_config_mv_error(bsrc, bdst);
2134 }
2135 }
2136 ret = ecore_file_mv(buf2, buf);
2137 if (!ret) _e_config_mv_error(buf2, buf);
2138 }
2139 ecore_file_unlink(buf2);
2140 }
2141 return ok;
2142 }
2143
2144 /**
2145 * Saves configurations to file located in the working profile
2146 * The configurations are read from a struct declated by the
2147 * macros E_CONFIG_DD_NEW and E_CONFIG_<b>TYPE</b>
2148 *
2149 * @param domain name of the configuration file.
2150 * @param edd pointer to struct definition
2151 * @param data struct to save as configuration file
2152 * @return 1 if save success, 0 on failure
2153 */
2154 E_API int
e_config_domain_save(const char * domain,E_Config_DD * edd,const void * data)2155 e_config_domain_save(const char *domain, E_Config_DD *edd, const void *data)
2156 {
2157 Eet_File *ef;
2158 char buf[4096], buf2[4096];
2159 int ok = 0, ret;
2160 size_t len, len2;
2161
2162 if (_e_config_save_block) return 0;
2163 /* FIXME: check for other sessions fo E running */
2164 len = e_user_dir_snprintf(buf, sizeof(buf), "config/%s", _e_config_profile);
2165 if (len + 1 >= sizeof(buf)) return 0;
2166
2167 ecore_file_mkdir(buf);
2168
2169 buf[len] = '/';
2170 len++;
2171
2172 len2 = eina_strlcpy(buf + len, domain, sizeof(buf) - len);
2173 if (len2 + sizeof(".cfg") >= sizeof(buf) - len) return 0;
2174
2175 len += len2;
2176
2177 memcpy(buf + len, ".cfg", sizeof(".cfg"));
2178 len += sizeof(".cfg") - 1;
2179
2180 if (len + sizeof(".tmp") >= sizeof(buf)) return 0;
2181 memcpy(buf2, buf, len);
2182 memcpy(buf2 + len, ".tmp", sizeof(".tmp"));
2183
2184 ef = eet_open(buf2, EET_FILE_MODE_WRITE);
2185 if (ef)
2186 {
2187 ok = eet_data_write(ef, edd, "config", data, 1);
2188 if (_e_config_eet_close_handle(ef, buf2))
2189 {
2190 if (_e_config_revisions > 0)
2191 {
2192 int i;
2193 char bsrc[4096], bdst[4096];
2194
2195 for (i = _e_config_revisions; i > 1; i--)
2196 {
2197 e_user_dir_snprintf(bsrc, sizeof(bsrc), "config/%s/%s.%i.cfg", _e_config_profile, domain, i - 1);
2198 e_user_dir_snprintf(bdst, sizeof(bdst), "config/%s/%s.%i.cfg", _e_config_profile, domain, i);
2199 if ((ecore_file_exists(bsrc)) &&
2200 (ecore_file_size(bsrc)))
2201 {
2202 ecore_file_mv(bsrc, bdst);
2203 }
2204 }
2205 e_user_dir_snprintf(bsrc, sizeof(bsrc), "config/%s/%s.cfg", _e_config_profile, domain);
2206 e_user_dir_snprintf(bdst, sizeof(bdst), "config/%s/%s.1.cfg", _e_config_profile, domain);
2207 ecore_file_mv(bsrc, bdst);
2208 }
2209 ret = ecore_file_mv(buf2, buf);
2210 if (!ret)
2211 ERR("*** Error saving config. ***");
2212 }
2213 ecore_file_unlink(buf2);
2214 }
2215 return ok;
2216 }
2217
2218 E_API E_Config_Binding_Mouse *
e_config_binding_mouse_match(E_Config_Binding_Mouse * eb_in)2219 e_config_binding_mouse_match(E_Config_Binding_Mouse *eb_in)
2220 {
2221 Eina_List *l;
2222 E_Config_Binding_Mouse *eb;
2223
2224 EINA_LIST_FOREACH(e_bindings->mouse_bindings, l, eb)
2225 {
2226 if ((eb->context == eb_in->context) &&
2227 (eb->button == eb_in->button) &&
2228 (eb->modifiers == eb_in->modifiers) &&
2229 (eb->any_mod == eb_in->any_mod) &&
2230 (((eb->action) && (eb_in->action) && (!strcmp(eb->action, eb_in->action))) ||
2231 ((!eb->action) && (!eb_in->action))) &&
2232 (((eb->params) && (eb_in->params) && (!strcmp(eb->params, eb_in->params))) ||
2233 ((!eb->params) && (!eb_in->params))))
2234 return eb;
2235 }
2236 return NULL;
2237 }
2238
2239 E_API E_Config_Binding_Key *
e_config_binding_key_match(E_Config_Binding_Key * eb_in)2240 e_config_binding_key_match(E_Config_Binding_Key *eb_in)
2241 {
2242 Eina_List *l;
2243 E_Config_Binding_Key *eb;
2244
2245 EINA_LIST_FOREACH(e_bindings->key_bindings, l, eb)
2246 {
2247 if ((eb->context == eb_in->context) &&
2248 (eb->modifiers == eb_in->modifiers) &&
2249 (eb->any_mod == eb_in->any_mod) &&
2250 (((eb->key) && (eb_in->key) && (!strcmp(eb->key, eb_in->key))) ||
2251 ((!eb->key) && (!eb_in->key))) &&
2252 (((eb->action) && (eb_in->action) && (!strcmp(eb->action, eb_in->action))) ||
2253 ((!eb->action) && (!eb_in->action))) &&
2254 (((eb->params) && (eb_in->params) && (!strcmp(eb->params, eb_in->params))) ||
2255 ((!eb->params) && (!eb_in->params))))
2256 return eb;
2257 }
2258 return NULL;
2259 }
2260
2261 E_API E_Config_Binding_Edge *
e_config_binding_edge_match(E_Config_Binding_Edge * eb_in)2262 e_config_binding_edge_match(E_Config_Binding_Edge *eb_in)
2263 {
2264 Eina_List *l;
2265 E_Config_Binding_Edge *eb;
2266
2267 EINA_LIST_FOREACH(e_bindings->edge_bindings, l, eb)
2268 {
2269 if ((eb->context == eb_in->context) &&
2270 (eb->modifiers == eb_in->modifiers) &&
2271 (eb->any_mod == eb_in->any_mod) &&
2272 (eb->edge == eb_in->edge) &&
2273 EINA_FLT_EQ(eb->delay, eb_in->delay) &&
2274 (eb->drag_only == eb_in->drag_only) &&
2275 (((eb->action) && (eb_in->action) && (!strcmp(eb->action, eb_in->action))) ||
2276 ((!eb->action) && (!eb_in->action))) &&
2277 (((eb->params) && (eb_in->params) && (!strcmp(eb->params, eb_in->params))) ||
2278 ((!eb->params) && (!eb_in->params))))
2279 return eb;
2280 }
2281 return NULL;
2282 }
2283
2284 E_API E_Config_Binding_Signal *
e_config_binding_signal_match(E_Config_Binding_Signal * eb_in)2285 e_config_binding_signal_match(E_Config_Binding_Signal *eb_in)
2286 {
2287 Eina_List *l;
2288 E_Config_Binding_Signal *eb;
2289
2290 EINA_LIST_FOREACH(e_bindings->signal_bindings, l, eb)
2291 {
2292 if ((eb->context == eb_in->context) &&
2293 (eb->modifiers == eb_in->modifiers) &&
2294 (eb->any_mod == eb_in->any_mod) &&
2295 (((eb->signal) && (eb_in->signal) && (!strcmp(eb->signal, eb_in->signal))) ||
2296 ((!eb->signal) && (!eb_in->signal))) &&
2297 (((eb->source) && (eb_in->source) && (!strcmp(eb->source, eb_in->source))) ||
2298 ((!eb->source) && (!eb_in->source))) &&
2299 (((eb->action) && (eb_in->action) && (!strcmp(eb->action, eb_in->action))) ||
2300 ((!eb->action) && (!eb_in->action))) &&
2301 (((eb->params) && (eb_in->params) && (!strcmp(eb->params, eb_in->params))) ||
2302 ((!eb->params) && (!eb_in->params))))
2303 return eb;
2304 }
2305 return NULL;
2306 }
2307
2308 E_API E_Config_Binding_Wheel *
e_config_binding_wheel_match(E_Config_Binding_Wheel * eb_in)2309 e_config_binding_wheel_match(E_Config_Binding_Wheel *eb_in)
2310 {
2311 Eina_List *l;
2312 E_Config_Binding_Wheel *eb;
2313
2314 EINA_LIST_FOREACH(e_bindings->wheel_bindings, l, eb)
2315 {
2316 if ((eb->context == eb_in->context) &&
2317 (eb->direction == eb_in->direction) &&
2318 (eb->z == eb_in->z) &&
2319 (eb->modifiers == eb_in->modifiers) &&
2320 (eb->any_mod == eb_in->any_mod) &&
2321 (((eb->action) && (eb_in->action) && (!strcmp(eb->action, eb_in->action))) ||
2322 ((!eb->action) && (!eb_in->action))) &&
2323 (((eb->params) && (eb_in->params) && (!strcmp(eb->params, eb_in->params))) ||
2324 ((!eb->params) && (!eb_in->params))))
2325 return eb;
2326 }
2327 return NULL;
2328 }
2329
2330 E_API E_Config_Binding_Acpi *
e_config_binding_acpi_match(E_Config_Binding_Acpi * eb_in)2331 e_config_binding_acpi_match(E_Config_Binding_Acpi *eb_in)
2332 {
2333 Eina_List *l;
2334 E_Config_Binding_Acpi *eb;
2335
2336 EINA_LIST_FOREACH(e_bindings->acpi_bindings, l, eb)
2337 {
2338 if ((eb->context == eb_in->context) &&
2339 (eb->type == eb_in->type) &&
2340 (eb->status == eb_in->status) &&
2341 (((eb->action) && (eb_in->action) &&
2342 (!strcmp(eb->action, eb_in->action))) ||
2343 ((!eb->action) && (!eb_in->action))) &&
2344 (((eb->params) && (eb_in->params) &&
2345 (!strcmp(eb->params, eb_in->params))) ||
2346 ((!eb->params) && (!eb_in->params))))
2347 return eb;
2348 }
2349 return NULL;
2350 }
2351
2352 E_API void
e_config_mode_changed(void)2353 e_config_mode_changed(void)
2354 {
2355 ecore_event_add(E_EVENT_CONFIG_MODE_CHANGED, NULL, NULL, NULL);
2356 }
2357
2358 E_API void
e_config_binding_acpi_free(E_Config_Binding_Acpi * eba)2359 e_config_binding_acpi_free(E_Config_Binding_Acpi *eba)
2360 {
2361 if (!eba) return;
2362 eina_stringshare_del(eba->action);
2363 eina_stringshare_del(eba->params);
2364 free(eba);
2365 }
2366
2367 E_API void
e_config_binding_key_free(E_Config_Binding_Key * ebk)2368 e_config_binding_key_free(E_Config_Binding_Key *ebk)
2369 {
2370 if (!ebk) return;
2371 eina_stringshare_del(ebk->key);
2372 eina_stringshare_del(ebk->action);
2373 eina_stringshare_del(ebk->params);
2374 free(ebk);
2375 }
2376
2377 E_API void
e_config_binding_edge_free(E_Config_Binding_Edge * ebe)2378 e_config_binding_edge_free(E_Config_Binding_Edge *ebe)
2379 {
2380 if (!ebe) return;
2381 eina_stringshare_del(ebe->action);
2382 eina_stringshare_del(ebe->params);
2383 free(ebe);
2384 }
2385
2386 E_API void
e_config_binding_mouse_free(E_Config_Binding_Mouse * ebm)2387 e_config_binding_mouse_free(E_Config_Binding_Mouse *ebm)
2388 {
2389 if (!ebm) return;
2390 eina_stringshare_del(ebm->action);
2391 eina_stringshare_del(ebm->params);
2392 free(ebm);
2393 }
2394
2395 E_API void
e_config_binding_wheel_free(E_Config_Binding_Wheel * ebw)2396 e_config_binding_wheel_free(E_Config_Binding_Wheel *ebw)
2397 {
2398 if (!ebw) return;
2399 eina_stringshare_del(ebw->action);
2400 eina_stringshare_del(ebw->params);
2401 free(ebw);
2402 }
2403
2404 E_API void
e_config_binding_signal_free(E_Config_Binding_Signal * ebs)2405 e_config_binding_signal_free(E_Config_Binding_Signal *ebs)
2406 {
2407 if (!ebs) return;
2408 eina_stringshare_del(ebs->signal);
2409 eina_stringshare_del(ebs->source);
2410 eina_stringshare_del(ebs->action);
2411 eina_stringshare_del(ebs->params);
2412 free(ebs);
2413 }
2414
2415 E_API void
e_config_bindings_free(E_Config_Bindings * ecb)2416 e_config_bindings_free(E_Config_Bindings *ecb)
2417 {
2418 if (!ecb) return;
2419 E_FREE_LIST(ecb->mouse_bindings, e_config_binding_mouse_free);
2420 E_FREE_LIST(ecb->key_bindings, e_config_binding_key_free);
2421 E_FREE_LIST(ecb->edge_bindings, e_config_binding_edge_free);
2422 E_FREE_LIST(ecb->signal_bindings, e_config_binding_signal_free);
2423 E_FREE_LIST(ecb->wheel_bindings, e_config_binding_wheel_free);
2424 E_FREE_LIST(ecb->acpi_bindings, e_config_binding_acpi_free);
2425 free(ecb);
2426 }
2427
2428 /* local subsystem functions */
2429 static void
_e_config_save_cb(void * data EINA_UNUSED)2430 _e_config_save_cb(void *data EINA_UNUSED)
2431 {
2432 EINTERN void e_gadget_save(void);
2433 EINTERN void e_bryce_save(void);
2434
2435 e_config_profile_save();
2436 e_module_save_all();
2437 elm_config_save();
2438 e_config_domain_save("e", _e_config_edd, e_config);
2439 e_config_domain_save("e_bindings", _e_config_binding_edd, e_bindings);
2440 e_gadget_save();
2441 e_bryce_save();
2442 _e_config_save_defer = NULL;
2443 }
2444
2445 static void
_e_config_free(E_Config * ecf)2446 _e_config_free(E_Config *ecf)
2447 {
2448 E_Config_Syscon_Action *sca;
2449 E_Font_Fallback *eff;
2450 E_Config_Module *em;
2451 E_Font_Default *efd;
2452 E_Color_Class *cc;
2453 E_Path_Dir *epd;
2454 E_Remember *rem;
2455 E_Config_Env_Var *evr;
2456 E_Config_XKB_Option *op;
2457 E_Int_Menu_Applications *ema;
2458
2459 if (!ecf) return;
2460
2461 eina_stringshare_del(ecf->xkb.default_model);
2462
2463 E_FREE_LIST(ecf->xkb.used_layouts, e_config_xkb_layout_free);
2464 EINA_LIST_FREE(ecf->xkb.used_options, op)
2465 {
2466 eina_stringshare_del(op->name);
2467 E_FREE(op);
2468 }
2469
2470 EINA_LIST_FREE(ecf->modules, em)
2471 {
2472 if (em->name) eina_stringshare_del(em->name);
2473 E_FREE(em);
2474 }
2475 EINA_LIST_FREE(ecf->font_fallbacks, eff)
2476 {
2477 if (eff->name) eina_stringshare_del(eff->name);
2478 E_FREE(eff);
2479 }
2480 EINA_LIST_FREE(ecf->font_defaults, efd)
2481 {
2482 if (efd->text_class) eina_stringshare_del(efd->text_class);
2483 if (efd->font) eina_stringshare_del(efd->font);
2484 E_FREE(efd);
2485 }
2486 EINA_LIST_FREE(ecf->path_append_data, epd)
2487 {
2488 if (epd->dir) eina_stringshare_del(epd->dir);
2489 E_FREE(epd);
2490 }
2491 EINA_LIST_FREE(ecf->path_append_images, epd)
2492 {
2493 if (epd->dir) eina_stringshare_del(epd->dir);
2494 E_FREE(epd);
2495 }
2496 EINA_LIST_FREE(ecf->path_append_fonts, epd)
2497 {
2498 if (epd->dir) eina_stringshare_del(epd->dir);
2499 E_FREE(epd);
2500 }
2501 EINA_LIST_FREE(ecf->path_append_init, epd)
2502 {
2503 if (epd->dir) eina_stringshare_del(epd->dir);
2504 E_FREE(epd);
2505 }
2506 EINA_LIST_FREE(ecf->path_append_icons, epd)
2507 {
2508 if (epd->dir) eina_stringshare_del(epd->dir);
2509 E_FREE(epd);
2510 }
2511 EINA_LIST_FREE(ecf->path_append_modules, epd)
2512 {
2513 if (epd->dir) eina_stringshare_del(epd->dir);
2514 E_FREE(epd);
2515 }
2516 EINA_LIST_FREE(ecf->path_append_backgrounds, epd)
2517 {
2518 if (epd->dir) eina_stringshare_del(epd->dir);
2519 E_FREE(epd);
2520 }
2521 EINA_LIST_FREE(ecf->path_append_messages, epd)
2522 {
2523 if (epd->dir) eina_stringshare_del(epd->dir);
2524 E_FREE(epd);
2525 }
2526 EINA_LIST_FREE(ecf->remembers, rem)
2527 {
2528 if (rem->name) eina_stringshare_del(rem->name);
2529 if (rem->class) eina_stringshare_del(rem->class);
2530 if (rem->title) eina_stringshare_del(rem->title);
2531 if (rem->role) eina_stringshare_del(rem->role);
2532 if (rem->prop.border) eina_stringshare_del(rem->prop.border);
2533 if (rem->prop.command) eina_stringshare_del(rem->prop.command);
2534 eina_stringshare_del(rem->uuid);
2535 E_FREE(rem);
2536 }
2537 EINA_LIST_FREE(ecf->menu_applications, ema)
2538 {
2539 if (ema->orig_path) eina_stringshare_del(ema->orig_path);
2540 if (ema->try_exec) eina_stringshare_del(ema->try_exec);
2541 if (ema->exec) eina_stringshare_del(ema->exec);
2542 E_FREE(ema);
2543 }
2544 EINA_LIST_FREE(ecf->color_classes, cc)
2545 {
2546 if (cc->name) eina_stringshare_del(cc->name);
2547 E_FREE(cc);
2548 }
2549 if (ecf->desktop_default_background) eina_stringshare_del(ecf->desktop_default_background);
2550 if (ecf->language) eina_stringshare_del(ecf->language);
2551 eina_stringshare_del(ecf->desklock_language);
2552 eina_stringshare_del(ecf->xkb.selected_layout);
2553 eina_stringshare_del(ecf->xkb.cur_layout);
2554 eina_stringshare_del(ecf->xkb.desklock_layout);
2555 e_config_xkb_layout_free(ecf->xkb.current_layout);
2556 e_config_xkb_layout_free(ecf->xkb.sel_layout);
2557 e_config_xkb_layout_free(ecf->xkb.lock_layout);
2558 eina_stringshare_del(ecf->desk_flip_animate_type);
2559 if (ecf->transition_start) eina_stringshare_del(ecf->transition_start);
2560 if (ecf->transition_desk) eina_stringshare_del(ecf->transition_desk);
2561 if (ecf->transition_change) eina_stringshare_del(ecf->transition_change);
2562 if (ecf->input_method) eina_stringshare_del(ecf->input_method);
2563 if (ecf->exebuf_term_cmd) eina_stringshare_del(ecf->exebuf_term_cmd);
2564 if (ecf->icon_theme) eina_stringshare_del(ecf->icon_theme);
2565 if (ecf->desktop_environment) eina_stringshare_del(ecf->desktop_environment);
2566 if (ecf->wallpaper_import_last_dev) eina_stringshare_del(ecf->wallpaper_import_last_dev);
2567 if (ecf->wallpaper_import_last_path) eina_stringshare_del(ecf->wallpaper_import_last_path);
2568 if (ecf->theme_default_border_style) eina_stringshare_del(ecf->theme_default_border_style);
2569 if (ecf->desklock_custom_desklock_cmd) eina_stringshare_del(ecf->desklock_custom_desklock_cmd);
2570 EINA_LIST_FREE(ecf->syscon.actions, sca)
2571 {
2572 if (sca->action) eina_stringshare_del(sca->action);
2573 if (sca->params) eina_stringshare_del(sca->params);
2574 if (sca->button) eina_stringshare_del(sca->button);
2575 if (sca->icon) eina_stringshare_del(sca->icon);
2576 E_FREE(sca);
2577 }
2578 EINA_LIST_FREE(ecf->env_vars, evr)
2579 {
2580 if (evr->var) eina_stringshare_del(evr->var);
2581 if (evr->val) eina_stringshare_del(evr->val);
2582 E_FREE(evr);
2583 }
2584 if (ecf->xsettings.net_icon_theme_name)
2585 eina_stringshare_del(ecf->xsettings.net_icon_theme_name);
2586 if (ecf->xsettings.net_theme_name)
2587 eina_stringshare_del(ecf->xsettings.net_theme_name);
2588 if (ecf->xsettings.gtk_font_name)
2589 eina_stringshare_del(ecf->xsettings.gtk_font_name);
2590 if (ecf->backlight.sysdev)
2591 eina_stringshare_del(ecf->backlight.sysdev);
2592
2593 E_FREE(ecf);
2594 }
2595
2596 static Eina_Bool
_e_config_cb_timer(void * data)2597 _e_config_cb_timer(void *data)
2598 {
2599 e_util_dialog_show(_("Settings Upgraded"), "%s", (char *)data);
2600 return 0;
2601 }
2602
2603 static int
_e_config_eet_close_handle(Eet_File * ef,char * file)2604 _e_config_eet_close_handle(Eet_File *ef, char *file)
2605 {
2606 Eet_Error err;
2607 char *erstr = NULL;
2608
2609 err = eet_close(ef);
2610 switch (err)
2611 {
2612 case EET_ERROR_NONE:
2613 /* all good - no error */
2614 break;
2615
2616 case EET_ERROR_BAD_OBJECT:
2617 erstr = _("The EET file handle is bad.");
2618 break;
2619
2620 case EET_ERROR_EMPTY:
2621 erstr = _("The file data is empty.");
2622 break;
2623
2624 case EET_ERROR_NOT_WRITABLE:
2625 erstr = _("The file is not writable. Perhaps the disk is read-only<ps/>or you lost permissions to your files.");
2626 break;
2627
2628 case EET_ERROR_OUT_OF_MEMORY:
2629 erstr = _("Memory ran out while preparing the write.<ps/>Please free up memory.");
2630 break;
2631
2632 case EET_ERROR_WRITE_ERROR:
2633 erstr = _("This is a generic error.");
2634 break;
2635
2636 case EET_ERROR_WRITE_ERROR_FILE_TOO_BIG:
2637 erstr = _("The settings file is too large.<ps/>It should be very small (a few hundred KB at most).");
2638 break;
2639
2640 case EET_ERROR_WRITE_ERROR_IO_ERROR:
2641 erstr = _("You have I/O errors on the disk.<ps/>Maybe it needs replacing?");
2642 break;
2643
2644 case EET_ERROR_WRITE_ERROR_OUT_OF_SPACE:
2645 erstr = _("You ran out of space while writing the file.");
2646 break;
2647
2648 case EET_ERROR_WRITE_ERROR_FILE_CLOSED:
2649 erstr = _("The file was closed while writing.");
2650 break;
2651
2652 case EET_ERROR_MMAP_FAILED:
2653 erstr = _("Memory-mapping (mmap) of the file failed.");
2654 break;
2655
2656 case EET_ERROR_X509_ENCODING_FAILED:
2657 erstr = _("X509 Encoding failed.");
2658 break;
2659
2660 case EET_ERROR_SIGNATURE_FAILED:
2661 erstr = _("Signature failed.");
2662 break;
2663
2664 case EET_ERROR_INVALID_SIGNATURE:
2665 erstr = _("The signature was invalid.");
2666 break;
2667
2668 case EET_ERROR_NOT_SIGNED:
2669 erstr = _("Not signed.");
2670 break;
2671
2672 case EET_ERROR_NOT_IMPLEMENTED:
2673 erstr = _("Feature not implemented.");
2674 break;
2675
2676 case EET_ERROR_PRNG_NOT_SEEDED:
2677 erstr = _("PRNG was not seeded.");
2678 break;
2679
2680 case EET_ERROR_ENCRYPT_FAILED:
2681 erstr = _("Encryption failed.");
2682 break;
2683
2684 case EET_ERROR_DECRYPT_FAILED:
2685 erstr = _("Decryption failed.");
2686 break;
2687
2688 default: /* if we get here eet added errors we don't know */
2689 erstr = _("The error is unknown to Enlightenment.");
2690 break;
2691 }
2692 if (erstr)
2693 {
2694 /* delete any partially-written file */
2695 ecore_file_unlink(file);
2696 /* only show dialog for first error - further ones are likely */
2697 /* more of the same error */
2698 if (!_e_config_error_dialog)
2699 {
2700 E_Dialog *dia;
2701
2702 dia = e_dialog_new(NULL, "E", "_sys_error_logout_slow");
2703 if (dia)
2704 {
2705 char buf[8192];
2706
2707 e_dialog_title_set(dia, _("Enlightenment Settings Write Problems"));
2708 e_dialog_icon_set(dia, "dialog-error", 64);
2709 snprintf(buf, sizeof(buf),
2710 _("Enlightenment has had an error while writing<ps/>"
2711 "its config file.<ps/>"
2712 "%s<ps/>"
2713 "<ps/>"
2714 "The file where the error occurred was:<ps/>"
2715 "%s<ps/>"
2716 "<ps/>"
2717 "This file has been deleted to avoid corrupt data.<ps/>"),
2718 erstr, file);
2719 e_dialog_text_set(dia, buf);
2720 e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
2721 e_dialog_button_focus_num(dia, 0);
2722 elm_win_center(dia->win, 1, 1);
2723 e_object_del_attach_func_set(E_OBJECT(dia),
2724 _e_config_error_dialog_cb_delete);
2725 e_dialog_show(dia);
2726 _e_config_error_dialog = dia;
2727 }
2728 }
2729 return 0;
2730 }
2731 return 1;
2732 }
2733
2734