Tizen 2.1 release
[platform/core/uifw/e17.git] / src / modules / conf_display / e_int_config_desklock.c
1 #include "e.h"
2 #include "e_mod_main.h"
3
4 static void        *_create_data(E_Config_Dialog *cfd);
5 static void         _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static void         _fill_data(E_Config_Dialog_Data *cfdata);
7 static int          _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
8 static int          _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
9 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
10
11 static void         _cb_method_change(void *data, Evas_Object *obj, void *event_info);
12 static void         _cb_login_change(void *data, Evas_Object *obj);
13 static int          _zone_count_get(void);
14
15 static void         _cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event);
16 static void         _cb_ask_presentation_changed(void *data, Evas_Object *obj);
17
18 typedef enum _E_Desklock_Background_Method {
19     E_DESKLOCK_BACKGROUND_METHOD_THEME_DESKLOCK = 0,
20     E_DESKLOCK_BACKGROUND_METHOD_THEME,
21     E_DESKLOCK_BACKGROUND_METHOD_WALLPAPER,
22     E_DESKLOCK_BACKGROUND_METHOD_CUSTOM,
23 } E_Desklock_Background_Method;
24
25 struct _E_Config_Dialog_Data
26 {
27    E_Config_Dialog *cfd, *bg_fsel;
28
29    /* Common vars */
30    int              use_xscreensaver;
31    int              zone_count;
32
33    /* Locking */
34    int              start_locked;
35    int              lock_on_suspend;
36    int              auto_lock;
37    int              locking_method;
38    int              login_zone;
39    int              zone;
40    char            *custom_lock_cmd;
41
42    /* Timers */
43    int              screensaver_lock;
44    double           idle_time;
45    double           post_screensaver_time;
46
47    /* Adv props */
48    E_Desklock_Background_Method bg_method;
49    int              bg_method_prev;
50    Eina_List       *bgs;
51    int              custom_lock;
52    int              ask_presentation;
53    double           ask_presentation_timeout;
54
55    struct
56    {
57       Evas_Object *loginbox_slider;
58       Evas_Object *post_screensaver_slider;
59       Evas_Object *auto_lock_slider;
60       Evas_Object *ask_presentation_slider;
61       Evas_Object *o_table;
62       Eina_List *bgs;
63    } gui;
64 };
65
66 E_Config_Dialog *
67 e_int_config_desklock(E_Container *con, const char *params __UNUSED__)
68 {
69    E_Config_Dialog *cfd;
70    E_Config_Dialog_View *v;
71
72    if (e_config_dialog_find("E", "screen/screen_lock")) return NULL;
73    v = E_NEW(E_Config_Dialog_View, 1);
74    if (!v) return NULL;
75
76    v->create_cfdata = _create_data;
77    v->free_cfdata = _free_data;
78    v->basic.create_widgets = _basic_create;
79    v->basic.apply_cfdata = _basic_apply;
80    v->basic.check_changed = _basic_check_changed;
81    v->override_auto_apply = 1;
82
83    cfd = e_config_dialog_new(con, _("Screen Lock Settings"), "E",
84                              "screen/screen_lock", "preferences-system-lock-screen",
85                              0, v, NULL);
86    return cfd;
87 }
88
89 void
90 e_int_config_desklock_fsel_done(E_Config_Dialog *cfd, Evas_Object *bg, const char *bg_file)
91 {
92    E_Config_Dialog_Data *cfdata;
93    Eina_List *l;
94    const char *cbg;
95
96    if (!(cfdata = cfd->cfdata)) return;
97    cfdata->bg_fsel = NULL;
98    if (!bg_file) return;
99    e_widget_preview_file_get(bg, &cbg, NULL);
100    l = eina_list_data_find_list(cfdata->bgs, cbg);
101    if (l && l->data)
102      eina_stringshare_replace((const char**)&l->data, bg_file);
103    else
104      eina_list_data_set(l, eina_stringshare_add(bg_file));
105    e_widget_preview_edje_set(bg, bg_file, "e/desktop/background");
106 }
107
108 static void
109 _fill_data(E_Config_Dialog_Data *cfdata)
110 {
111    Eina_List *l;
112    E_Config_Desklock_Background *bg;
113    int x;
114
115    cfdata->zone_count = _zone_count_get();
116    EINA_LIST_FOREACH(e_config->desklock_backgrounds, l, bg)
117      cfdata->bgs = eina_list_append(cfdata->bgs, eina_stringshare_ref(bg->file));
118    if (!cfdata->bgs)
119      for (x = 0; x < cfdata->zone_count; x++)
120      cfdata->bgs = eina_list_append(cfdata->bgs, eina_stringshare_add("theme_desklock_background"));
121
122    if (!e_util_strcmp(eina_list_data_get(cfdata->bgs), "theme_desklock_background"))
123      cfdata->bg_method = E_DESKLOCK_BACKGROUND_METHOD_THEME_DESKLOCK;
124    else if (!e_util_strcmp(eina_list_data_get(cfdata->bgs), "theme_background"))
125      cfdata->bg_method = E_DESKLOCK_BACKGROUND_METHOD_THEME;
126    else if (!e_util_strcmp(eina_list_data_get(cfdata->bgs), "user_background"))
127      cfdata->bg_method = E_DESKLOCK_BACKGROUND_METHOD_WALLPAPER;
128    else
129      cfdata->bg_method = E_DESKLOCK_BACKGROUND_METHOD_CUSTOM;
130
131    cfdata->bg_method_prev = cfdata->bg_method;
132    cfdata->use_xscreensaver = ecore_x_screensaver_event_available_get();
133
134    cfdata->custom_lock = e_config->desklock_use_custom_desklock;
135    if (e_config->desklock_custom_desklock_cmd)
136      cfdata->custom_lock_cmd = strdup(e_config->desklock_custom_desklock_cmd);
137
138    cfdata->start_locked = e_config->desklock_start_locked;
139    cfdata->lock_on_suspend = e_config->desklock_on_suspend;
140    cfdata->auto_lock = e_config->desklock_autolock_idle;
141    cfdata->screensaver_lock = e_config->desklock_autolock_screensaver;
142    cfdata->idle_time = e_config->desklock_autolock_idle_timeout / 60;
143    cfdata->post_screensaver_time = e_config->desklock_post_screensaver_time;
144    if (e_config->desklock_login_box_zone >= 0)
145      {
146         cfdata->login_zone = 0;
147         cfdata->zone = e_config->desklock_login_box_zone;
148      }
149    else
150      {
151         cfdata->login_zone = e_config->desklock_login_box_zone;
152         cfdata->zone = 0;
153      }
154
155    cfdata->ask_presentation = e_config->desklock_ask_presentation;
156    cfdata->ask_presentation_timeout =
157      e_config->desklock_ask_presentation_timeout;
158 }
159
160 static void *
161 _create_data(E_Config_Dialog *cfd)
162 {
163    E_Config_Dialog_Data *cfdata;
164
165    cfdata = E_NEW(E_Config_Dialog_Data, 1);
166    cfdata->cfd = cfd;
167    _fill_data(cfdata);
168    return cfdata;
169 }
170
171 static void
172 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
173 {
174    const char *bg;
175    if (cfdata->bg_fsel)
176      e_object_del(E_OBJECT(cfdata->bg_fsel));
177    E_FREE(cfdata->custom_lock_cmd);
178    EINA_LIST_FREE(cfdata->bgs, bg)
179      eina_stringshare_del(bg);
180    E_FREE(cfdata);
181 }
182
183 static void
184 _basic_auto_lock_cb_changed(void *data, Evas_Object *o __UNUSED__)
185 {
186    E_Config_Dialog_Data *cfdata;
187    int disable;
188
189    if (!(cfdata = data)) return;
190    disable = ((!cfdata->use_xscreensaver) || (!cfdata->auto_lock));
191    e_widget_disabled_set(cfdata->gui.auto_lock_slider, disable);
192 }
193
194 static void
195 _basic_screensaver_lock_cb_changed(void *data, Evas_Object *o __UNUSED__)
196 {
197    E_Config_Dialog_Data *cfdata;
198    int disable;
199
200    if (!(cfdata = data)) return;
201    disable = ((!cfdata->use_xscreensaver) || (!cfdata->screensaver_lock));
202    e_widget_disabled_set(cfdata->gui.post_screensaver_slider, disable);
203 }
204
205 static Evas_Object *
206 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
207 {
208    Evas_Object *otb, *ol, *ow, *of, *ot;
209    Eina_List *l, *ll, *lll;
210    E_Zone *zone;
211    E_Radio_Group *rg;
212    E_Manager *man;
213    E_Container *con;
214    int screen_count, x = 0;
215
216    screen_count = ecore_x_xinerama_screen_count_get();
217
218    otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale));
219
220    /* Locking */
221    ol = e_widget_list_add(evas, 0, 0);
222    ow = e_widget_check_add(evas, _("Lock on Startup"), &cfdata->start_locked);
223    e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
224    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
225    ow = e_widget_check_add(evas, _("Lock on Suspend"), &cfdata->lock_on_suspend);
226    e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
227    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
228
229    of = e_widget_framelist_add(evas, _("Custom Screenlock Command"), 0);
230    ow = e_widget_entry_add(evas, &(cfdata->custom_lock_cmd), NULL, NULL, NULL);
231    e_widget_framelist_object_append(of, ow);
232
233    ow = e_widget_check_add(evas, _("Use Custom Screenlock Command"), &cfdata->custom_lock);
234    e_widget_framelist_object_append(of, ow);
235    e_widget_list_object_append(ol, of, 1, 1, 0.5);
236    e_widget_toolbook_page_append(otb, NULL, _("Locking"), ol,
237                                  1, 0, 1, 0, 0.5, 0.0);
238
239    /* Login */
240    ol = e_widget_list_add(evas, 0, 0);
241    rg = e_widget_radio_group_new(&(cfdata->login_zone));
242    ow = e_widget_radio_add(evas, _("Show on all screens"), -1, rg);
243    e_widget_on_change_hook_set(ow, _cb_login_change, cfdata);
244    e_widget_disabled_set(ow, (screen_count <= 0));
245    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
246
247    ow = e_widget_radio_add(evas, _("Show on current screen"), -2, rg);
248    e_widget_on_change_hook_set(ow, _cb_login_change, cfdata);
249    e_widget_disabled_set(ow, (screen_count <= 0));
250    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
251
252    ow = e_widget_radio_add(evas, _("Show on screen #:"), 0, rg);
253    e_widget_on_change_hook_set(ow, _cb_login_change, cfdata);
254    e_widget_disabled_set(ow, (screen_count <= 0));
255    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
256
257    cfdata->gui.loginbox_slider =
258      e_widget_slider_add(evas, 1, 0, _("%1.0f"), 0.0, (cfdata->zone_count - 1),
259                          1.0, 0, NULL, &(cfdata->zone), 100);
260    e_widget_disabled_set(cfdata->gui.loginbox_slider, (screen_count <= 0));
261    e_widget_list_object_append(ol, cfdata->gui.loginbox_slider, 1, 1, 0.5);
262    e_widget_toolbook_page_append(otb, NULL, _("Login Box"), ol,
263                                  1, 0, 1, 0, 0.5, 0.0);
264
265    /* Timers */
266    ol = e_widget_list_add(evas, 0, 0);
267    ow = e_widget_check_add(evas, _("Lock after X screensaver activates"),
268                            &cfdata->screensaver_lock);
269    e_widget_on_change_hook_set(ow, _basic_screensaver_lock_cb_changed, cfdata);
270    e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
271    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
272
273    ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"), 0.0, 300.0, 10.0, 0,
274                             &(cfdata->post_screensaver_time), NULL, 100);
275    cfdata->gui.post_screensaver_slider = ow;
276    e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
277    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
278
279    ow = e_widget_check_add(evas, _("Lock when idle time exceeded"),
280                            &cfdata->auto_lock);
281    e_widget_on_change_hook_set(ow, _basic_auto_lock_cb_changed, cfdata);
282    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
283
284    ow = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
285                             &(cfdata->idle_time), NULL, 100);
286    cfdata->gui.auto_lock_slider = ow;
287    e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
288    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
289    e_widget_toolbook_page_append(otb, NULL, _("Timers"), ol,
290                                  1, 0, 1, 0, 0.5, 0.0);
291
292    /* Presentation */
293    ol = e_widget_list_add(evas, 0, 0);
294    ow = e_widget_check_add(evas, _("Suggest if deactivated before"),
295                            &(cfdata->ask_presentation));
296    e_widget_on_change_hook_set(ow, _cb_ask_presentation_changed, cfdata);
297    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
298    ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"), 1.0, 300.0, 10.0, 0,
299                             &(cfdata->ask_presentation_timeout), NULL, 100);
300    cfdata->gui.ask_presentation_slider = ow;
301    e_widget_disabled_set(ow, (!cfdata->ask_presentation));
302    e_widget_list_object_append(ol, ow, 1, 1, 0.5);
303    e_widget_toolbook_page_append(otb, NULL, _("Presentation Mode"), ol,
304                                  1, 0, 1, 0, 0.5, 0.0);
305
306    /* Wallpapers */
307    ol = e_widget_list_add(evas, 0, 0);
308    of = e_widget_table_add(evas, 1);
309    rg = e_widget_radio_group_new((int *)&(cfdata->bg_method));
310    ow = e_widget_radio_add(evas, _("Theme Defined"),
311                            E_DESKLOCK_BACKGROUND_METHOD_THEME_DESKLOCK, rg);
312    evas_object_smart_callback_add(ow, "changed", _cb_method_change, cfdata);
313    e_widget_table_object_append(of, ow, 0, 0, 1, 1, 1, 0, 1, 0);
314    ow = e_widget_radio_add(evas, _("Theme Wallpaper"),
315                            E_DESKLOCK_BACKGROUND_METHOD_THEME, rg);
316    evas_object_smart_callback_add(ow, "changed", _cb_method_change, cfdata);
317    e_widget_table_object_append(of, ow, 0, 1, 1, 1, 1, 0, 1, 0);
318    ow = e_widget_radio_add(evas, _("Current Wallpaper"),
319                            E_DESKLOCK_BACKGROUND_METHOD_WALLPAPER, rg);
320    evas_object_smart_callback_add(ow, "changed", _cb_method_change, cfdata);
321    e_widget_table_object_append(of, ow, 1, 0, 1, 1, 1, 0, 1, 0);
322    ow = e_widget_radio_add(evas, _("Custom"),
323                            E_DESKLOCK_BACKGROUND_METHOD_CUSTOM, rg);
324    evas_object_smart_callback_add(ow, "changed", _cb_method_change, cfdata);
325    e_widget_table_object_append(of, ow, 1, 1, 1, 1, 1, 0, 1, 0);
326    e_widget_list_object_append(ol, of, 1, 1, 0.5);
327
328    cfdata->gui.o_table = ot = e_widget_table_add(evas, 1);
329
330    EINA_LIST_FOREACH(e_manager_list(), l, man)
331      EINA_LIST_FOREACH(man->containers, ll, con)
332        EINA_LIST_FOREACH(con->zones, lll, zone)
333          {
334             ow = e_widget_preview_add(evas, 100, 140);
335             cfdata->gui.bgs = eina_list_append(cfdata->gui.bgs, ow);
336             evas_object_data_set(ow, "zone", zone);
337             e_widget_disabled_set(ow,
338               (cfdata->bg_method < E_DESKLOCK_BACKGROUND_METHOD_CUSTOM));
339             evas_object_event_callback_add(ow, EVAS_CALLBACK_MOUSE_DOWN, _cb_bg_mouse_down, cfdata);
340             e_widget_table_object_append(cfdata->gui.o_table, ow, x++, 0, 1, 1, 1, 1, 1, 1);
341          }
342    _cb_method_change(cfdata, NULL, NULL);
343    e_widget_list_object_append(ol, cfdata->gui.o_table, 1, 1, 0.5);
344    e_widget_toolbook_page_append(otb, NULL, _("Wallpaper"), ol,
345                                  1, 0, 1, 0, 0.5, 0.0);
346
347    e_widget_toolbook_page_show(otb, 0);
348
349    _basic_auto_lock_cb_changed(cfdata, NULL);
350    _basic_screensaver_lock_cb_changed(cfdata, NULL);
351
352    return otb;
353 }
354
355 static int
356 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
357 {
358    Eina_List *l;
359    const char *bg;
360    E_Config_Desklock_Background *cbg;
361
362    e_config->desklock_start_locked = cfdata->start_locked;
363    e_config->desklock_on_suspend = cfdata->lock_on_suspend;
364    e_config->desklock_autolock_idle = cfdata->auto_lock;
365    e_config->desklock_post_screensaver_time = cfdata->post_screensaver_time;
366    e_config->desklock_autolock_screensaver = cfdata->screensaver_lock;
367    e_config->desklock_autolock_idle_timeout = (cfdata->idle_time * 60);
368    e_config->desklock_ask_presentation = cfdata->ask_presentation;
369    e_config->desklock_ask_presentation_timeout =
370      cfdata->ask_presentation_timeout;
371
372    if (cfdata->bgs)
373      {
374         EINA_LIST_FREE(e_config->desklock_backgrounds, cbg)
375           {
376              e_filereg_deregister(cbg->file);
377              eina_stringshare_del(cbg->file);
378              free(cbg);
379           }
380         EINA_LIST_FOREACH(cfdata->bgs, l, bg)
381           {
382              cbg = E_NEW(E_Config_Desklock_Background, 1);
383              cbg->file = eina_stringshare_ref(bg);
384              e_config->desklock_backgrounds = eina_list_append(e_config->desklock_backgrounds, cbg);
385              e_filereg_register(bg);
386           }
387      }
388
389    if (cfdata->login_zone < 0)
390      e_config->desklock_login_box_zone = cfdata->login_zone;
391    else
392      e_config->desklock_login_box_zone = cfdata->zone;
393
394    e_config->desklock_use_custom_desklock = cfdata->custom_lock;
395    if (cfdata->custom_lock_cmd)
396      eina_stringshare_replace(&e_config->desklock_custom_desklock_cmd,
397                               cfdata->custom_lock_cmd);
398
399    cfdata->bg_method_prev = cfdata->bg_method;
400    e_config_save_queue();
401    return 1;
402 }
403
404 static int
405 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
406 {
407    Eina_List *l, *ll;
408    E_Config_Desklock_Background *cbg;
409    if (e_config->desklock_start_locked != cfdata->start_locked)
410      return 1;
411
412    if (e_config->desklock_on_suspend != cfdata->lock_on_suspend)
413      return 1;
414
415    if (e_config->desklock_autolock_idle != cfdata->auto_lock)
416      return 1;
417
418    if (e_config->desklock_autolock_screensaver != cfdata->screensaver_lock)
419      return 1;
420
421    if (e_config->desklock_post_screensaver_time !=
422        cfdata->post_screensaver_time)
423      return 1;
424
425    if (e_config->desklock_autolock_idle_timeout != cfdata->idle_time * 60)
426      return 1;
427
428    if (cfdata->bg_method_prev != (int)cfdata->bg_method) return 1;
429    ll = cfdata->bgs;
430    EINA_LIST_FOREACH(e_config->desklock_backgrounds, l, cbg)
431      {
432         if (!ll) return 1;
433         if (cbg->file != ll->data) return 1;
434         ll = ll->next;
435      }
436
437    if (cfdata->login_zone < 0)
438      {
439         if (e_config->desklock_login_box_zone != cfdata->login_zone)
440           return 1;
441      }
442    else
443      {
444         if (e_config->desklock_login_box_zone != cfdata->zone)
445           return 1;
446      }
447
448    if (e_config->desklock_use_custom_desklock != cfdata->custom_lock)
449      return 1;
450
451    if (e_config->desklock_custom_desklock_cmd && cfdata->custom_lock_cmd)
452      {
453         if (strcmp(e_config->desklock_custom_desklock_cmd, cfdata->custom_lock_cmd) != 0)
454           return 1;
455      }
456    else if (e_config->desklock_custom_desklock_cmd != cfdata->custom_lock_cmd)
457      return 1;
458
459    return (e_config->desklock_ask_presentation != cfdata->ask_presentation) ||
460           (e_config->desklock_ask_presentation_timeout != cfdata->ask_presentation_timeout);
461 }
462
463 static void
464 _cb_method_change(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
465 {
466    E_Config_Dialog_Data *cfdata;
467    Eina_List *l;
468    Evas_Object *bg;
469    const char *theme = NULL;
470    int x;
471
472    if (!(cfdata = data)) return;
473    EINA_LIST_FOREACH(cfdata->gui.bgs, l, bg)
474      e_widget_disabled_set(bg,
475        (cfdata->bg_method < E_DESKLOCK_BACKGROUND_METHOD_CUSTOM));
476
477    switch (cfdata->bg_method)
478      {
479       case E_DESKLOCK_BACKGROUND_METHOD_THEME_DESKLOCK:
480         EINA_LIST_FREE(cfdata->bgs, theme)
481           eina_stringshare_del(theme);
482         for (x = 0; x < cfdata->zone_count; x++)
483           cfdata->bgs = eina_list_append(cfdata->bgs, eina_stringshare_add("theme_desklock_background"));
484         theme = e_theme_edje_file_get("base/theme/desklock",
485                                       "e/desklock/background");
486         if (theme)
487           EINA_LIST_FOREACH(cfdata->gui.bgs, l, bg)
488             e_widget_preview_edje_set(bg, theme, "e/desklock/background");
489         break;
490
491       case E_DESKLOCK_BACKGROUND_METHOD_THEME:
492         theme = e_theme_edje_file_get("base/theme/backgrounds",
493                                       "e/desktop/background");
494         if (theme)
495           {
496              EINA_LIST_FOREACH(cfdata->gui.bgs, l, bg)
497                e_widget_preview_edje_set(bg, theme, "e/desktop/background");
498              EINA_LIST_FREE(cfdata->bgs, theme)
499                eina_stringshare_del(theme);
500              for (x = 0; x < cfdata->zone_count; x++)
501                cfdata->bgs = eina_list_append(cfdata->bgs, eina_stringshare_add("theme_background"));
502           }
503         break;
504
505       case E_DESKLOCK_BACKGROUND_METHOD_WALLPAPER:
506         if (e_config->desktop_backgrounds)
507           {
508              E_Config_Desktop_Background *cdb;
509              int y = 0;
510              if (eina_str_has_extension(e_config->desktop_default_background, "edj"))
511                {
512                   EINA_LIST_FOREACH(cfdata->gui.bgs, l, bg)
513                     e_widget_preview_edje_set(bg, e_config->desktop_default_background, "e/desktop/background");
514                   EINA_LIST_FREE(cfdata->bgs, theme)
515                     eina_stringshare_del(theme);
516                   for (y = 0; y < cfdata->zone_count; y++)
517                     cfdata->bgs = eina_list_append(cfdata->bgs, eina_stringshare_add("user_background"));
518                }
519              /* attempt to set wallpaper from desktop 0,0 on each zone as a desklock bg */
520              EINA_LIST_FOREACH(e_config->desktop_backgrounds, l, cdb)
521                if ((!cdb->desk_x) && (!cdb->desk_y))
522                  {
523                     Eina_List *ll;
524                     ll = eina_list_nth_list(cfdata->bgs, cdb->zone);
525                     if (ll)
526                       {
527                          theme = eina_list_data_get(ll);
528                          eina_stringshare_replace(&theme, cdb->file);
529                          eina_list_data_set(ll, theme);
530                       }
531                     else
532                       cfdata->bgs = eina_list_append(cfdata->bgs, cdb->file);
533                     bg = eina_list_nth(cfdata->gui.bgs, cdb->zone);
534                     if (bg)
535                       e_widget_preview_edje_set(bg, cdb->file, "e/desktop/background");
536                  }
537           }
538         else if (e_config->desktop_default_background && eina_str_has_extension(e_config->desktop_default_background, "edj"))
539           {
540              EINA_LIST_FOREACH(cfdata->gui.bgs, l, bg)
541                e_widget_preview_edje_set(bg, e_config->desktop_default_background, "e/desktop/background");
542              EINA_LIST_FREE(cfdata->bgs, theme)
543                eina_stringshare_del(theme);
544              for (x = 0; x < cfdata->zone_count; x++)
545                cfdata->bgs = eina_list_append(cfdata->bgs, eina_stringshare_add("user_background"));
546           }
547         break;
548
549       case E_DESKLOCK_BACKGROUND_METHOD_CUSTOM:
550         {
551              Eina_List *ll;
552              E_Config_Desklock_Background *cbg;
553
554              EINA_LIST_FREE(cfdata->bgs, theme)
555                eina_stringshare_del(theme);
556              ll = cfdata->gui.bgs;
557              EINA_LIST_FOREACH(e_config->desklock_backgrounds, l, cbg)
558                {
559                   if (!ll) break;
560                   e_widget_preview_edje_set(ll->data, cbg->file, "e/desktop/background");
561                   cfdata->bgs = eina_list_append(cfdata->bgs, eina_stringshare_ref(cbg->file));
562                   ll = ll->next;
563                }
564         }
565         break;
566
567       default:
568         break;
569      }
570 }
571
572 static void
573 _cb_login_change(void *data, Evas_Object *obj __UNUSED__)
574 {
575    E_Config_Dialog_Data *cfdata;
576
577    if (!(cfdata = data)) return;
578    e_widget_disabled_set(cfdata->gui.loginbox_slider, (cfdata->login_zone < 0));
579 }
580
581 static int
582 _zone_count_get(void)
583 {
584    int num = 0;
585    E_Manager *m;
586    Eina_List *ml;
587
588    EINA_LIST_FOREACH(e_manager_list(), ml, m)
589      {
590         Eina_List *cl;
591         E_Container *con;
592
593         EINA_LIST_FOREACH(m->containers, cl, con)
594           num += eina_list_count(con->zones);
595      }
596    return num;
597 }
598
599 static void
600 _cb_bg_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
601 {
602    E_Config_Dialog_Data *cfdata;
603
604    if (e_widget_disabled_get(obj)) return;
605    if (!(cfdata = data)) return;
606    if (cfdata->bg_fsel)
607      e_win_raise(cfdata->bg_fsel->dia->win);
608    else
609      cfdata->bg_fsel = e_int_config_desklock_fsel(cfdata->cfd, obj);
610 }
611
612 static void
613 _cb_ask_presentation_changed(void *data, Evas_Object *obj __UNUSED__)
614 {
615    E_Config_Dialog_Data *cfdata;
616    Eina_Bool disable;
617
618    if (!(cfdata = data)) return;
619    disable = (!cfdata->ask_presentation);
620    e_widget_disabled_set(cfdata->gui.ask_presentation_slider, disable);
621 }
622