Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_config_desklock.c 


Log Message:
Clean up the desklock/screenlock dialog.
      - Cleaner code.
      - Fits in 640x480 now.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_desklock.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -3 -r1.48 -r1.49
--- e_int_config_desklock.c     28 Feb 2007 17:17:35 -0000      1.48
+++ e_int_config_desklock.c     1 Mar 2007 21:12:46 -0000       1.49
@@ -1,541 +1,217 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
 #include "e.h"
 
-#define LOGINBOX_SHOW_ALL_SCREENS        -1
-#define LOGINBOX_SHOW_CURRENT_SCREENS     -2
-#define LOGINBOX_SHOW_SPECIFIC_SCREEN    0
-
-#define BG_LIST_ICON_SIZE_W 32
-#define BG_LIST_ICON_SIZE_H 32
-
-#define BG_PREVIEW_W 280
-#define BG_PREVIEW_H ((BG_PREVIEW_W * 
e_zone_current_get(cfd->dia->win->container)->h) / \
-                    e_zone_current_get(cfd->dia->win->container)->w)
-
-#define DEF_DESKLOCK_BACKGROUND        "theme_desklock_background"
-#define DEF_THEME_BACKGROUND   "theme_background"
-
-static void *_create_data(E_Config_Dialog *cfd);
-static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
-static int  _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
-static Evas_Object  *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas,
-                                          E_Config_Dialog_Data *cfdata);
-static int  _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
-static Evas_Object  *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas,
-                                             E_Config_Dialog_Data *cfdata);
-static int  _e_desklock_zone_num_get(void);
-static void _e_desklock_cb_lb_show_change(void *data, Evas_Object *obj);
+static void *_create_data (E_Config_Dialog *cfd);
+static void  _free_data   (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
+static void  _fill_data   (E_Config_Dialog_Data *cfdata);
+static int   _basic_apply (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
+static int   _adv_apply   (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
+
+static Evas_Object *_basic_create (E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
+static Evas_Object *_adv_create   (E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
+
+static void _cb_method_change (void *data, Evas_Object *obj, void *event_info);
+static void _cb_radio_change  (void *data, Evas_Object *obj);
+static void _cb_login_change  (void *data, Evas_Object *obj);
+static void _cb_button_up     (void *data1, void *data2);
+static void _cb_fm_dir_change (void *data, Evas_Object *obj, void *event_info);
+static void _cb_fm_sel_change (void *data, Evas_Object *obj, void *event_info);
+static void _cb_fm_change     (void *data, Evas_Object *obj, void *event_info);
 
-struct _E_Config_Dialog_Data
+static int _zone_count_get(void);
+
+struct _E_Config_Dialog_Data 
 {
    E_Config_Dialog *cfd;
+   Evas_Object *o_prev;
+   Evas_Object *o_fm, *o_sf;
+   Evas_Object *o_btn, *o_custom;
+   Evas_Object *o_login_slider;
    
-   Evas_Object *o_frame;
-   Evas_Object *o_fm;
-   Evas_Object *o_up_button;
-   Evas_Object *o_preview;
-   Evas_Object *o_personal;
-   Evas_Object *o_system;
-   Evas_Object *o_bg_mode_theme;
-   Evas_Object *o_bg_mode_bg;
-   Evas_Object *o_bg_mode_custom;
+   /* Common vars */
+   int use_xscreensaver;
    int fmdir;
+   int zone_count;
    
-   char *desklock_passwd;
-   char *desklock_passwd_cp;
-   int show_password; // local
-   
-   int autolock_screensaver;
-   int autolock; // in e_config;
-   double timeout; // in e_config;
-   
-   int login_box_zone; // in e_config;
-   int specific_lb_zone; // local variable
-   int specific_lb_zone_backup; // used to have smart iface
-   
-   int use_custom_desklock;
-   char *custom_desklock_cmd;
-   
-   int zone_count; // local variable;
-   int use_xscreensaver; // local
-   
-   int bg_mode; // config
-   char *bg; // config
-   Evas_Object *preview_image; // local variable
-
-#ifdef HAVE_PAM
-   int auth_method;
-#endif
-   
-   struct 
-     {
-       Evas_Object *passwd_field;
-       //      Evas_Object *bg_list;
-       Evas_Object *show_passwd_check; 
-       struct 
-         {
-            Evas_Object *show_all_screens;
-            Evas_Object *show_current_screen;
-            Evas_Object *show_specific_screen;
-            Evas_Object *screen_slider;
-         } loginbox_obj;
-     } gui;
+   /* Basic props */
+   int auto_lock;
+   int screensaver_lock;
+   double idle_time;
+   
+   /* Adv props */
+   int bg_method;
+   char *bg;
+   int custom_lock;
+   char *custom_lock_cmd;
+   int login_zone;
+   int zone;
 };
 
 EAPI E_Config_Dialog *
-e_int_config_desklock(E_Container *con)
+e_int_config_desklock(E_Container *con) 
 {
    E_Config_Dialog *cfd;
    E_Config_Dialog_View *v;
    
-   if (e_config_dialog_find("E", "_config_desklock_dialog")) return NULL;
+   if (e_config_dialog_find("E", "_config_desklock_dlg")) return NULL;
    v = E_NEW(E_Config_Dialog_View, 1);
-   
+   if (!v) return;
    v->create_cfdata = _create_data;
-   v->free_cfdata = _free_data;
-   v->basic.apply_cfdata = _basic_apply_data;
-   v->basic.create_widgets = _basic_create_widgets;
-   v->advanced.apply_cfdata = _advanced_apply_data;
-   v->advanced.create_widgets = _advanced_create_widgets;
+   v->free_cfdata =   _free_data;
+
+   v->basic.create_widgets = _basic_create;
+   v->basic.apply_cfdata =   _basic_apply;
    
+   v->advanced.create_widgets =  _adv_create;
+   v->advanced.apply_cfdata =    _adv_apply;
    v->override_auto_apply = 1;
    
-   cfd = e_config_dialog_new(con,
-                            _("Screen Lock Settings"),
-                            "E", "_config_desklock_dialog",
-                            "enlightenment/desklock", 0, v, NULL);
+   cfd = e_config_dialog_new(con, _("Screen Lock Settings"), "E", 
+                            "_config_desklock_dlg", "enlightenment/desklock",
+                            0, v, NULL);
    return cfd;
 }
 
-static void
-_cb_button_up(void *data1, void *data2)
-{
-   E_Config_Dialog_Data *cfdata;
-   
-   cfdata = data1;
-   if (cfdata->o_fm)
-     e_fm2_parent_go(cfdata->o_fm);
-   if (cfdata->o_frame)
-     e_widget_scrollframe_child_pos_set(cfdata->o_frame, 0, 0);
-}
-
-static void
-_cb_files_changed(void *data, Evas_Object *obj, void *event_info)
-{
-   E_Config_Dialog_Data *cfdata;
-   
-   cfdata = data;
-   if (!cfdata->o_fm) return;
-   if (!e_fm2_has_parent_get(cfdata->o_fm))
-     {
-       if (cfdata->o_up_button)
-         e_widget_disabled_set(cfdata->o_up_button, 1);
-     }
-   else
-     {
-       if (cfdata->o_up_button)
-         e_widget_disabled_set(cfdata->o_up_button, 0);
-     }
-   if (cfdata->o_frame)
-     e_widget_scrollframe_child_pos_set(cfdata->o_frame, 0, 0);
-}
-
-static void
-_cb_files_selection_change(void *data, Evas_Object *obj, void *event_info)
-{
-   E_Config_Dialog_Data *cfdata;
-   Evas_List *selected;
-   E_Fm2_Icon_Info *ici;
-   const char *realpath;
-   char buf[4096];
-   
-   cfdata = data;
-   if (!cfdata->o_fm) return;
-   selected = e_fm2_selected_list_get(cfdata->o_fm);
-   if (!selected) return;
-   ici = selected->data;
-   realpath = e_fm2_real_path_get(cfdata->o_fm);
-   if (!strcmp(realpath, "/"))
-     snprintf(buf, sizeof(buf), "/%s", ici->file);
-   else
-     snprintf(buf, sizeof(buf), "%s/%s", realpath, ici->file);
-   evas_list_free(selected);
-   if (ecore_file_is_dir(buf)) return;
-   E_FREE(cfdata->bg);
-   cfdata->bg = strdup(buf);
-   if (cfdata->o_preview)
-     e_widget_preview_edje_set(cfdata->o_preview, buf, "e/desktop/background");
-   if (cfdata->o_frame)
-     e_widget_change(cfdata->o_frame);
-   e_widget_radio_toggle_set(cfdata->o_bg_mode_custom, 1);
-}
-
-static void
-_cb_files_selected(void *data, Evas_Object *obj, void *event_info)
-{
-   E_Config_Dialog_Data *cfdata;
-   
-   cfdata = data;
-}
-
-static void
-_cb_files_files_changed(void *data, Evas_Object *obj, void *event_info)
+static void 
+_fill_data(E_Config_Dialog_Data *cfdata) 
 {
-   E_Config_Dialog_Data *cfdata;
-   const char *p, *homedir;
-   char buf[4096];
-   
-   cfdata = data;
-   if (!cfdata->bg) return;
-   if (!cfdata->o_fm) return;
-   p = e_fm2_real_path_get(cfdata->o_fm);
-   if (p)
+   cfdata->fmdir = 0;
+   if (e_config->desklock_background) 
      {
-       if (strncmp(p, cfdata->bg, strlen(p))) return;
+       cfdata->bg = strdup(e_config->desklock_background);
+       if (!strstr(cfdata->bg, e_user_homedir_get()))
+         cfdata->fmdir = 1;
      }
-   homedir = e_user_homedir_get();
-   snprintf(buf, sizeof(buf), "%s/.e/e/backgrounds", homedir);
-   if (!p) return;
-   if (!strncmp(cfdata->bg, buf, strlen(buf)))
-     p = cfdata->bg + strlen(buf) + 1;
-   else
-     {
-       snprintf(buf, sizeof(buf), "%s/data/backgrounds", e_prefix_data_get());
-       if (!strncmp(cfdata->bg, buf, strlen(buf)))
-         p = cfdata->bg + strlen(buf) + 1;
-       else
-         p = cfdata->bg;
-     }
-   e_fm2_select_set(cfdata->o_fm, p, 1);
-   e_fm2_file_show(cfdata->o_fm, p);
-}
-
-static void
-_cb_dir(void *data, Evas_Object *obj, void *event_info)
-{
-   E_Config_Dialog_Data *cfdata;
-   char path[4096];
-   const char *homedir;
-   
-   cfdata = data;
-   if (cfdata->fmdir == 1)
-     snprintf(path, sizeof(path), "%s/data/backgrounds", e_prefix_data_get());
    else 
-     {
-       homedir = e_user_homedir_get();
-       snprintf(path, sizeof(path), "%s/.e/e/backgrounds", homedir);
-     }
-   e_fm2_path_set(cfdata->o_fm, path, "/");
-}
-
-static void
-_bg_mode(void *data, Evas_Object *obj, void *event_info)
-{
-   E_Config_Dialog_Data *cfdata;
-   const char *f;
-   
-   cfdata = data;
-   if (cfdata->bg_mode == 0)
-     {
-        f = e_theme_edje_file_get("base/theme/desklock", 
"e/desklock/background");
-       if (cfdata->o_preview)
-         e_widget_preview_edje_set(cfdata->o_preview, f, 
"e/desklock/background");
-       E_FREE(cfdata->bg);
-       cfdata->bg = strdup("theme_desklock_background");
-     }
-   else if (cfdata->bg_mode == 1)
-     {
-        f = e_theme_edje_file_get("base/theme/backgrounds", 
"e/desktop/background");
-       if (cfdata->o_preview)
-         e_widget_preview_edje_set(cfdata->o_preview, f, 
"e/desktop/background");
-       E_FREE(cfdata->bg);
-       cfdata->bg = strdup("theme_background");
-     }
-   else if (cfdata->bg_mode == 2)
-     {
-       Evas_List *l;
-       E_Fm2_Icon_Info *ic;
-       char buf[4096];
-       const char *realpath;
-               
-       l = e_fm2_selected_list_get(cfdata->o_fm);
-       if (!l)
-         l = e_fm2_all_list_get(cfdata->o_fm);
-       ic = evas_list_nth(l, 0);
+     cfdata->bg = strdup("theme_desklock_background");
        
-       e_fm2_select_set(cfdata->o_fm, ic->file, 1);
-       realpath = e_fm2_real_path_get(cfdata->o_fm);
-       if (!strcmp(realpath, "/"))
-         snprintf(buf, sizeof(buf), "/%s", ic->file);
-       else
-         snprintf(buf, sizeof(buf), "%s/%s", realpath, ic->file);
-       evas_list_free(l);
-       if (ecore_file_is_dir(buf)) return;
-       E_FREE(cfdata->bg);
-       cfdata->bg = strdup(buf);
-       if (cfdata->o_preview)
-         e_widget_preview_edje_set(cfdata->o_preview, buf, 
-                                   "e/desktop/background");
-     }
-}
-
-static void
-_fill_data(E_Config_Dialog_Data *cfdata)
-{
-   char path[4096];
-   const char *homedir;
-
-   // we have to read it from e_config->...
-   if (e_config->desklock_personal_passwd)
-     {
-       cfdata->desklock_passwd = strdup(e_config->desklock_personal_passwd);
-       cfdata->desklock_passwd_cp = strdup(e_config->desklock_personal_passwd);
-     }
+   if (!strcmp(cfdata->bg, "theme_desklock_background"))
+     cfdata->bg_method = 0;
+   else if (!strcmp(cfdata->bg, "theme_background"))
+     cfdata->bg_method = 1;
    else
-     {
-       cfdata->desklock_passwd = strdup("");
-       cfdata->desklock_passwd_cp = strdup("");
-     }
-   
-   cfdata->autolock_screensaver = e_config->desklock_autolock_screensaver;
-   cfdata->autolock = e_config->desklock_autolock_idle;
-   cfdata->timeout = e_config->desklock_autolock_idle_timeout / 60;
-   
-   /* should be taken from e_config */
-   //cfdata->login_box_on_zone = -1;
+     cfdata->bg_method = 2;
+
+   cfdata->use_xscreensaver = ecore_x_screensaver_event_available_get();
+   cfdata->zone_count = _zone_count_get();
    
-   if (e_config->desklock_login_box_zone >= 0)
-     {
-       cfdata->login_box_zone = LOGINBOX_SHOW_SPECIFIC_SCREEN;
-       cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone =
-         e_config->desklock_login_box_zone;
-     }
-   else
+   if (e_config->desklock_custom_desklock_cmd)
+     cfdata->custom_lock_cmd = strdup(e_config->desklock_custom_desklock_cmd);
+   cfdata->auto_lock = e_config->desklock_autolock_idle;
+   cfdata->screensaver_lock = e_config->desklock_autolock_screensaver;
+   cfdata->idle_time = e_config->desklock_autolock_idle_timeout / 60;
+   if (e_config->desklock_login_box_zone >= 0) 
      {
-       cfdata->login_box_zone = e_config->desklock_login_box_zone;
-       cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone = 0;
+       cfdata->login_zone = 0;
+       cfdata->zone = e_config->desklock_login_box_zone;
      }
-   
-   cfdata->zone_count = _e_desklock_zone_num_get();
-   cfdata->use_xscreensaver = ecore_x_screensaver_event_available_get();
-   cfdata->show_password = 0;
- 
-   if ((!e_config->desklock_background) ||
-       (!strcmp(e_config->desklock_background, "theme_desklock_background")))
-     cfdata->bg_mode = 0;
-   else if (!strcmp(e_config->desklock_background, "theme_background"))
-     cfdata->bg_mode = 1;
-   else
-     cfdata->bg_mode = 2;
-   if (!e_config->desklock_background)
-     cfdata->bg = strdup(DEF_DESKLOCK_BACKGROUND);
-   else
-     cfdata->bg = strdup(e_config->desklock_background);
-
-   if (cfdata->bg[0] != '/')
+   else 
      {
-       homedir = e_user_homedir_get();
-       snprintf(path, sizeof(path), "%s/.e/e/backgrounds/%s", homedir, 
cfdata->bg);
-       if (ecore_file_exists(path))
-         {
-            E_FREE(cfdata->bg);
-            cfdata->bg = strdup(path);
-         }
-       else
-         {
-            snprintf(path, sizeof(path), "%s/data/backgrounds/%s", 
e_prefix_data_get(), cfdata->bg);
-            if (ecore_file_exists(path))
-              {
-                 E_FREE(cfdata->bg);
-                 cfdata->bg = strdup(path);
-              }
-         }
+       cfdata->login_zone = e_config->desklock_login_box_zone;
+       cfdata->zone = 0;
      }
-   
-#ifdef HAVE_PAM
-   cfdata->auth_method = e_config->desklock_auth_method;
-#endif
-   
-   cfdata->use_custom_desklock = e_config->desklock_use_custom_desklock;
-   if (e_config->desklock_custom_desklock_cmd)
-      cfdata->custom_desklock_cmd = 
strdup(e_config->desklock_custom_desklock_cmd);
-     
-   //vertical_lb_align = e_config->desklock_login
 }
 
 static void *
-_create_data(E_Config_Dialog *cfd)
+_create_data(E_Config_Dialog *cfd) 
 {
    E_Config_Dialog_Data *cfdata;
-
+   
    cfdata = E_NEW(E_Config_Dialog_Data, 1);
-   cfdata->cfd = cfd;
-  _fill_data(cfdata);
-  return cfdata;
+   _fill_data(cfdata);
+   return cfdata;
 }
+
 static void
-_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
+_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
 {
-   if (!cfdata) return;
-
-   E_FREE(cfdata->desklock_passwd);
-   E_FREE(cfdata->desklock_passwd_cp);
+   E_FREE(cfdata->custom_lock_cmd);
    E_FREE(cfdata->bg);
    E_FREE(cfdata);
 }
 
-static int
-_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
-{
-   if (cfdata->desklock_passwd_cp)
-     {
-       if (e_config->desklock_personal_passwd)
-         evas_stringshare_del(e_config->desklock_personal_passwd);
-     }
-   e_config->desklock_personal_passwd = 
evas_stringshare_add(cfdata->desklock_passwd_cp);
-   
-   e_config->desklock_autolock_screensaver = cfdata->autolock_screensaver;
-   e_config->desklock_autolock_idle = cfdata->autolock;
-   e_config->desklock_autolock_idle_timeout = cfdata->timeout * 60;
-     
-#ifdef HAVE_PAM
-   e_config->desklock_auth_method = cfdata->auth_method;
-#endif
-     
-   e_config_save_queue();
-  return 1;
-}
-
 static Evas_Object *
-_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data 
*cfdata)
+_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) 
 {
-   Evas_Object *o, *of, *ob;
+   Evas_Object *o, *of, *ow;
+   
    o = e_widget_list_add(evas, 0, 0);
-
    of = e_widget_framelist_add(evas, _("Automatic Locking"), 0);
    e_widget_disabled_set(of, !cfdata->use_xscreensaver);
-   
-   ob = e_widget_check_add(evas, _("Lock when X screensaver activates"), 
-                           &(cfdata->autolock_screensaver));
-   e_widget_disabled_set(ob, !cfdata->use_xscreensaver);
-   e_widget_framelist_object_append(of, ob);
-   
-   ob = e_widget_check_add(evas, _("Lock when idle time exceeded"), 
-                          &(cfdata->autolock));
-   e_widget_disabled_set(ob, !cfdata->use_xscreensaver);
-   e_widget_framelist_object_append(of, ob);
-
-   ob = e_widget_label_add(evas, _("Idle time to exceed"));
-   e_widget_disabled_set(ob, !cfdata->use_xscreensaver);
-   e_widget_framelist_object_append(of, ob);
-   ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0, 
-                           &(cfdata->timeout), NULL, 200);
-   e_widget_framelist_object_append(of, ob);
+   ow = e_widget_check_add(evas, _("Lock when X screensaver activates"), 
+                          &cfdata->auto_lock);
+   e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
+   e_widget_framelist_object_append(of, ow);
+   ow = e_widget_check_add(evas, _("Lock when idle time exceeded"), 
+                          &cfdata->screensaver_lock);
+   e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
+   e_widget_framelist_object_append(of, ow);
+   ow = e_widget_label_add(evas, _("Idle time to exceed"));
+   e_widget_disabled_set(ow, !cfdata->use_xscreensaver);
+   e_widget_framelist_object_append(of, ow);
+   ow = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
+                           &(cfdata->idle_time), NULL, 100);
+   e_widget_framelist_object_append(of, ow);
    e_widget_list_object_append(o, of, 1, 1, 0.5);
-   e_dialog_resizable_set(cfd->dia, 0);
    return o;
 }
 
-/* advanced window */
 static int
-_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
+_basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
 {
-   if (!cfdata) return 0;
-   
-   if (cfdata->desklock_passwd_cp)
-     {
-       if (e_config->desklock_personal_passwd)
-         evas_stringshare_del(e_config->desklock_personal_passwd);
-     }
-   e_config->desklock_personal_passwd = 
evas_stringshare_add(cfdata->desklock_passwd_cp);
-
-   if (cfdata->bg)
-     {
-       if (e_config->desklock_background)
-         {
-            e_filereg_deregister(e_config->desklock_background);
-            evas_stringshare_del(e_config->desklock_background);
-         }
-       e_config->desklock_background = evas_stringshare_add(cfdata->bg);
-        e_filereg_register(e_config->desklock_background);
-     }
-   
-   if (_e_desklock_zone_num_get() > 1)
-     {
-       if (cfdata->login_box_zone >= 0)
-         e_config->desklock_login_box_zone = cfdata->specific_lb_zone;
-       else
-         e_config->desklock_login_box_zone = cfdata->login_box_zone;
-     }
-   else
-     e_config->desklock_login_box_zone = LOGINBOX_SHOW_ALL_SCREENS;
-
-   e_config->desklock_autolock_screensaver = cfdata->autolock_screensaver;
-   e_config->desklock_autolock_idle = cfdata->autolock;
-   e_config->desklock_autolock_idle_timeout = cfdata->timeout * 60;
-#ifdef HAVE_PAM
-   e_config->desklock_auth_method = cfdata->auth_method;
-#endif
-
-   e_config->desklock_use_custom_desklock = cfdata->use_custom_desklock;
-   if (cfdata->custom_desklock_cmd) 
-     {
-       if (e_config->desklock_custom_desklock_cmd)
-         evas_stringshare_del(e_config->desklock_custom_desklock_cmd);
-       e_config->desklock_custom_desklock_cmd = 
evas_stringshare_add(cfdata->custom_desklock_cmd);
-     }
-   
+   e_config->desklock_autolock_idle = cfdata->auto_lock;
+   e_config->desklock_autolock_screensaver = cfdata->screensaver_lock;
+   e_config->desklock_autolock_idle_timeout = cfdata->idle_time * 60;
    e_config_save_queue();
    return 1;
 }
 
 static Evas_Object *
-_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata)
+_adv_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) 
 {
-   Evas_Object *ob;
-   Evas_Object *o, *ot, *of, *il, *ol;
-   char path[4096];
-   const char *homedir;
-   const char *f;
-   E_Fm2_Config fmc;
-   E_Zone *z;
+   Evas_Object *mt, *rt, *ft, *ow, *of;
    E_Radio_Group *rg;
+   E_Fm2_Config fmc;
+   E_Zone *zone;
+   int screen_count;
+   char path[PATH_MAX];
+   const char *f;
    
-   homedir = e_user_homedir_get();
-
-   z = e_zone_current_get(cfd->con);   
- 
-   cfdata->o_fm = NULL;
-   cfdata->o_frame = NULL;
-   
-   ot = e_widget_table_add(evas, 0);
-   ol = e_widget_table_add(evas, 0);
-   il = e_widget_table_add(evas, 1);
+   zone = e_zone_current_get(cfd->con);
+   screen_count = ecore_x_xinerama_screen_count_get();
    
-   rg = e_widget_radio_group_new(&(cfdata->fmdir));
-   o = e_widget_radio_add(evas, _("Personal"), 0, rg);
-   cfdata->o_personal = o;
-   evas_object_smart_callback_add(o, "changed",
-                                 _cb_dir, cfdata);
-   e_widget_table_object_append(il, o, 0, 0, 1, 1, 1, 1, 0, 0);
-   o = e_widget_radio_add(evas, _("System"), 1, rg);
-   cfdata->o_system = o;
-   evas_object_smart_callback_add(o, "changed", _cb_dir, cfdata);
-   e_widget_table_object_append(il, o, 1, 0, 1, 1, 1, 1, 0, 0);
-   
-   e_widget_table_object_append(ol, il, 0, 0, 1, 1, 0, 0, 0, 0);
-   
-   o = e_widget_button_add(evas, _("Go up a Directory"), "widget/up_dir",
-                          _cb_button_up, cfdata, NULL);
-   cfdata->o_up_button = o;
-   e_widget_table_object_append(ol, o, 0, 1, 1, 1, 0, 0, 0, 0);
+   mt = e_widget_table_add(evas, 0);
+   ft = e_widget_table_add(evas, 0);
    
+   rt = e_widget_table_add(evas, 1);
+   rg = e_widget_radio_group_new(&(cfdata->fmdir));
+   ow = e_widget_radio_add(evas, _("Personal"), 0, rg);
+   e_widget_on_change_hook_set(ow, _cb_radio_change, cfdata);
+   e_widget_table_object_append(rt, ow, 0, 0, 1, 1, 1, 1, 0, 0);
+   ow = e_widget_radio_add(evas, _("System"), 1, rg);
+   e_widget_on_change_hook_set(ow, _cb_radio_change, cfdata);
+   e_widget_table_object_append(rt, ow, 1, 0, 1, 1, 1, 1, 0, 0);
+   e_widget_table_object_append(ft, rt, 0, 0, 1, 1, 0, 0, 0, 0);
+   cfdata->o_btn = e_widget_button_add(evas, _("Go up a Directory"), 
+                                      "widgets/up_dir", _cb_button_up, 
+                                      cfdata, NULL);
+   e_widget_table_object_append(ft, cfdata->o_btn, 0, 1, 1, 1, 0, 0, 0, 0);
+
+   cfdata->fmdir = 0;
+   if (cfdata->bg) 
+     {
+       if (!strstr(cfdata->bg, e_user_homedir_get()))
+         cfdata->fmdir = 1;
+     }
    if (cfdata->fmdir == 1)
      snprintf(path, sizeof(path), "%s/data/backgrounds", e_prefix_data_get());
    else
-     snprintf(path, sizeof(path), "%s/.e/e/backgrounds", homedir);
+     snprintf(path, sizeof(path), "%s/.e/e/backgrounds", e_user_homedir_get());
    
-   o = e_fm2_add(evas);
-   cfdata->o_fm = o;
+   ow = e_fm2_add(evas);
+   cfdata->o_fm = ow;
    memset(&fmc, 0, sizeof(E_Fm2_Config));
    fmc.view.mode = E_FM2_VIEW_MODE_LIST;
    fmc.view.open_dirs_in_place = 1;
@@ -554,270 +230,338 @@
    fmc.list.sort.dirs.last = 1;
    fmc.selection.single = 1;
    fmc.selection.windows_modifiers = 0;
-   e_fm2_config_set(o, &fmc);
-   e_fm2_icon_menu_flags_set(o, E_FM2_MENU_NO_SHOW_HIDDEN);
-   evas_object_smart_callback_add(o, "dir_changed",
-                                 _cb_files_changed, cfdata);
-   evas_object_smart_callback_add(o, "selection_change",
-                                 _cb_files_selection_change, cfdata);
-   evas_object_smart_callback_add(o, "selected",
-                                 _cb_files_selected, cfdata);
-   evas_object_smart_callback_add(o, "changed",
-                                 _cb_files_files_changed, cfdata);
-   e_fm2_path_set(o, path, "/");
-   
-   of = e_widget_scrollframe_pan_add(evas, o,
-                                    e_fm2_pan_set,
-                                    e_fm2_pan_get,
-                                    e_fm2_pan_max_get,
-                                    e_fm2_pan_child_size_get);
-   cfdata->o_frame = of;
-   e_widget_min_size_set(of, 100, 100);
-   e_widget_table_object_append(ol, of, 0, 2, 1, 1, 1, 1, 1, 1);
-   e_widget_table_object_append(ot, ol, 0, 0, 1, 2, 1, 1, 1, 1);   
-
-   of = e_widget_framelist_add(evas, _("Wallpaper Mode"), 0);
-   e_widget_framelist_content_align_set(of, 0.0, 0.0);
-   
-   rg = e_widget_radio_group_new(&(cfdata->bg_mode));
-   o = e_widget_radio_add(evas, _("Theme Defined"), 0, rg);
-   cfdata->o_bg_mode_theme = o;
-   evas_object_smart_callback_add(o, "changed", _bg_mode, cfdata);
-   e_widget_framelist_object_append(of, o);
-   o = e_widget_radio_add(evas, _("Theme Wallpaper"), 1, rg);
-   cfdata->o_bg_mode_bg = o;
-   evas_object_smart_callback_add(o, "changed", _bg_mode, cfdata);
-   e_widget_framelist_object_append(of, o);
-   o = e_widget_radio_add(evas, _("Custom"), 2, rg);
-   cfdata->o_bg_mode_custom = o;
-   evas_object_smart_callback_add(o, "changed", _bg_mode, cfdata);
-   e_widget_framelist_object_append(of, o);
-
-#ifdef HAVE_PAM
-   e_widget_table_object_append(ot, of, 0, 2, 1, 2 ,1 ,1 ,1 ,1);
-#else
-   e_widget_table_object_append(ot, of, 0, 2, 1, 1 ,1 ,1 ,1 ,1);
-#endif
-   
-   of = e_widget_list_add(evas, 0, 0);
-   o = e_widget_preview_add(evas, 200, (200 * z->h) / z->w);
-   cfdata->o_preview = o;
-   if (cfdata->bg_mode == 0)
-     {
-        f = e_theme_edje_file_get("base/theme/desklock", 
"e/desklock/background");
-       if (cfdata->o_preview)
-         e_widget_preview_edje_set(cfdata->o_preview, f, 
"e/desklock/background");
+   e_fm2_config_set(ow, &fmc);
+   e_fm2_icon_menu_flags_set(ow, E_FM2_MENU_NO_SHOW_HIDDEN);
+   e_fm2_path_set(ow, path, "/");
+   evas_object_smart_callback_add(ow, "dir_changed", 
+                                 _cb_fm_dir_change, cfdata);
+   evas_object_smart_callback_add(ow, "selection_change", 
+                                 _cb_fm_sel_change, cfdata);
+   evas_object_smart_callback_add(ow, "changed", _cb_fm_change, cfdata);
+   
+   cfdata->o_sf = e_widget_scrollframe_pan_add(evas, ow, e_fm2_pan_set, 
+                                              e_fm2_pan_get,
+                                              e_fm2_pan_max_get, 
+                                              e_fm2_pan_child_size_get);
+   e_widget_min_size_set(cfdata->o_sf, 100, 100);
+   e_widget_table_object_append(ft, cfdata->o_sf, 0, 2, 1, 1, 1, 1, 1, 1);
+   e_widget_table_object_append(mt, ft, 0, 0, 1, 3, 1, 1, 1, 1);
+
+   ow = e_widget_preview_add(evas, 200, (200 * zone->h) / zone->w);
+   cfdata->o_prev = ow;
+   if (cfdata->bg_method == 0)
+     {
+       f = e_theme_edje_file_get("base/theme/desklock", 
+                                 "e/desklock/background");
+       e_widget_preview_edje_set(cfdata->o_prev, f, "e/desklock/background");
        E_FREE(cfdata->bg);
        cfdata->bg = strdup("theme_desklock_background");
      }
-   else if (cfdata->bg_mode == 1)
+   else if (cfdata->bg_method == 1) 
      {
-        f = e_theme_edje_file_get("base/theme/backgrounds", 
"e/desktop/background");
-       if (cfdata->o_preview)
-         e_widget_preview_edje_set(cfdata->o_preview, f, 
"e/desktop/background");
+       f = e_theme_edje_file_get("base/theme/backgrounds", 
+                                 "e/desktop/background");
+       e_widget_preview_edje_set(cfdata->o_prev, f, "e/desktop/background");
        E_FREE(cfdata->bg);
        cfdata->bg = strdup("theme_background");
      }
-   else if (cfdata->bg_mode == 2)
+   else 
      {
        if (cfdata->bg) 
          {
-            f = cfdata->bg;
-            e_widget_preview_edje_set(o, f, "e/desktop/background");
+            e_widget_preview_edje_set(cfdata->o_prev, cfdata->bg, 
+                                      "e/desktop/background");
          }
-       else
+       else 
          {
-            f = e_theme_edje_file_get("base/theme/backgrounds", 
"e/desktop/background");
-            if (cfdata->o_preview)
-              e_widget_preview_edje_set(cfdata->o_preview, f, 
"e/desktop/background");
+            f = e_theme_edje_file_get("base/theme/backgrounds", 
+                                      "e/desktop/background");
+            e_widget_preview_edje_set(cfdata->o_prev, f, 
"e/desktop/background");
             E_FREE(cfdata->bg);
             cfdata->bg = strdup("theme_background");
          }
      }
-   e_widget_list_object_append(of, o, 1, 0, 0.5);
-   e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1);
+   e_widget_table_object_append(mt, ow, 1, 0, 1, 1, 1, 1, 1, 1);
+
+   of = e_widget_framelist_add(evas, _("Login Box Settings"), 0);
+   e_widget_framelist_content_align_set(of, 0.0, 0.0);
+   e_widget_disabled_set(of, (screen_count <= 0));
+   rg = e_widget_radio_group_new(&(cfdata->login_zone));
+   ow = e_widget_radio_add(evas, _("Show on all screen zones"), -1, rg);
+   e_widget_on_change_hook_set(ow, _cb_login_change, cfdata);
+   e_widget_disabled_set(ow, (screen_count <= 0));
+   e_widget_framelist_object_append(of, ow);
+   ow = e_widget_radio_add(evas, _("Show on current screen zone"), -2, rg);
+   e_widget_on_change_hook_set(ow, _cb_login_change, cfdata);
+   e_widget_disabled_set(ow, (screen_count <= 0));
+   e_widget_framelist_object_append(of, ow);
+   ow = e_widget_radio_add(evas, _("Show on screen zone #:"), 0, rg);
+   e_widget_on_change_hook_set(ow, _cb_login_change, cfdata);
+   e_widget_disabled_set(ow, (screen_count <= 0));
+   e_widget_framelist_object_append(of, ow);
+   cfdata->o_login_slider = e_widget_slider_add(evas, 1, 0, _("%1.0f"), 0.0, 
+                                               (cfdata->zone_count -1), 1.0, 
+                                               0, NULL, &(cfdata->zone), 100);
+   e_widget_disabled_set(cfdata->o_login_slider, (screen_count <= 0));
+   e_widget_framelist_object_append(of, cfdata->o_login_slider);
+   e_widget_table_object_append(mt, of, 2, 0, 1, 1, 1, 1, 1, 1);
+   
+   of = e_widget_framelist_add(evas, _("Wallpaper Mode"), 0);
+   e_widget_framelist_content_align_set(of, 0.0, 0.0);
+   rg = e_widget_radio_group_new(&(cfdata->bg_method));
+   ow = e_widget_radio_add(evas, _("Theme Defined"), 0, rg);
+   evas_object_smart_callback_add(ow, "changed", _cb_method_change, cfdata);
+   e_widget_framelist_object_append(of, ow);
+   ow = e_widget_radio_add(evas, _("Theme Wallpaper"), 1, rg);
+   evas_object_smart_callback_add(ow, "changed", _cb_method_change, cfdata);
+   e_widget_framelist_object_append(of, ow);
+   cfdata->o_custom = e_widget_radio_add(evas, _("Custom"), 2, rg);
+   evas_object_smart_callback_add(cfdata->o_custom, "changed", 
+                                 _cb_method_change, cfdata);
+   e_widget_framelist_object_append(of, cfdata->o_custom);
+   e_widget_table_object_append(mt, of, 1, 1, 1, 1, 1, 1, 1, 1);
+
+   ow = _basic_create(cfd, evas, cfdata);
+   e_widget_table_object_append(mt, ow, 2, 1, 1, 1, 1, 1, 1, 1);
+
+   of = e_widget_framelist_add(evas, _("Custom Screenlock"), 0);
+   ow = e_widget_check_add(evas, _("Use custom screenlock"), 
+                          &(cfdata->custom_lock));
+   e_widget_framelist_object_append(of, ow);
+   ow = e_widget_entry_add(evas, &(cfdata->custom_lock_cmd));
+   e_widget_framelist_object_append(of, ow);
+   e_widget_table_object_append(mt, of, 1, 2, 2, 1, 1, 1, 1, 1);
+   
+   return mt;
+}
+
+static int
+_adv_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
+{
+   e_config->desklock_autolock_idle = cfdata->auto_lock;
+   e_config->desklock_autolock_screensaver = cfdata->screensaver_lock;
+   e_config->desklock_autolock_idle_timeout = cfdata->idle_time * 60;
+
+   if (cfdata->bg) 
+     {
+       if (e_config->desklock_background) 
+         {
+            e_filereg_deregister(e_config->desklock_background);
+            evas_stringshare_del(e_config->desklock_background);
+         }
+       e_config->desklock_background = evas_stringshare_add(cfdata->bg);
+       e_filereg_register(e_config->desklock_background);
+     }
+
+   e_config->desklock_login_box_zone = -1;
+   if (cfdata->zone_count > 1) 
+     {
+       if (cfdata->login_zone >= 0) 
+         e_config->desklock_login_box_zone = cfdata->zone;
+       else
+         e_config->desklock_login_box_zone = cfdata->login_zone;
+     }
+   e_config->desklock_use_custom_desklock = cfdata->custom_lock;
+   if (cfdata->custom_lock_cmd) 
+     {
+       if (e_config->desklock_custom_desklock_cmd)
+         evas_stringshare_del(e_config->desklock_custom_desklock_cmd);
+       e_config->desklock_custom_desklock_cmd = 
+         evas_stringshare_add(cfdata->custom_lock_cmd);
+     }
    
-   /* start: login box options */
+   e_config_save_queue();
+   return 1;
+}
+
+static void 
+_cb_method_change(void *data, Evas_Object *obj, void *event_info) 
+{
+   E_Config_Dialog_Data *cfdata;
+   Evas_List *sel;
+   E_Fm2_Icon_Info *ic;
+   char path[PATH_MAX];
+   const char *f;
    
-   /* Actually I do not know if I have to enable this if. However, if it is 
enabled
-    * this options will be seen only for those peoples who has xinerama.
-    * Otherwise, all the other world will not even know about them.
-    * Let the world know about them. Maybe in the feature somebody will turn 
this if
-    * 
-    * Use: if (ecore_x_xinerama_screen_count_get() > 0) to determine if 
-    * xinerama is available
-    */
-   if ((1) || (_e_desklock_zone_num_get() > 1))
+   cfdata = data;
+   if (cfdata->bg_method == 0)
      {
-       of = e_widget_framelist_add(evas, _("Login Box Settings"), 0);
-       rg = e_widget_radio_group_new(&(cfdata->login_box_zone));
-       
-       ob = e_widget_radio_add(evas, _("Show on all screen zones"), 
-                               LOGINBOX_SHOW_ALL_SCREENS, rg);
-       e_widget_on_change_hook_set(ob, _e_desklock_cb_lb_show_change, cfdata);
-       cfdata->gui.loginbox_obj.show_all_screens = ob;
-       if (cfdata->zone_count == 1) e_widget_disabled_set(ob, 1);
-       e_widget_framelist_object_append(of, ob);
-       
-       ob = e_widget_radio_add(evas, _("Show on current screen zone"),
-                               LOGINBOX_SHOW_CURRENT_SCREENS, rg);
-       e_widget_on_change_hook_set(ob, _e_desklock_cb_lb_show_change, cfdata);
-       cfdata->gui.loginbox_obj.show_current_screen = ob;
-       if (cfdata->zone_count == 1) e_widget_disabled_set(ob, 1);
-       e_widget_framelist_object_append(of, ob);
-       
-       ob = e_widget_radio_add(evas, _("Show on screen zone #:"), 
-                               LOGINBOX_SHOW_SPECIFIC_SCREEN, rg);
-       e_widget_on_change_hook_set(ob, _e_desklock_cb_lb_show_change, cfdata);
-       cfdata->gui.loginbox_obj.show_specific_screen = ob;
-       if (cfdata->zone_count == 1) e_widget_disabled_set(ob, 1);
-       e_widget_framelist_object_append(of, ob);
-       
-       ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), 0.0, 
-                                (double)(cfdata->zone_count - 1),
-                                1.0, 0, NULL, &(cfdata->specific_lb_zone), 
-                                100);
-       cfdata->gui.loginbox_obj.screen_slider = ob;
-       if ((cfdata->zone_count == 1) || 
-           (cfdata->login_box_zone == LOGINBOX_SHOW_ALL_SCREENS))
-         e_widget_disabled_set(ob, 1);
-       e_widget_framelist_object_append(of, ob);
-       e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1);
+       f = e_theme_edje_file_get("base/theme/desklock", 
+                                 "e/desklock/background");
+       e_widget_preview_edje_set(cfdata->o_prev, f, "e/desklock/background");
+       E_FREE(cfdata->bg);
+       cfdata->bg = strdup("theme_desklock_background");
+     }
+   else if (cfdata->bg_method == 1) 
+     {
+       f = e_theme_edje_file_get("base/theme/backgrounds", 
+                                 "e/desktop/background");
+       e_widget_preview_edje_set(cfdata->o_prev, f, "e/desktop/background");
+       E_FREE(cfdata->bg);
+       cfdata->bg = strdup("theme_background");
      }
    else 
-     cfdata->login_box_zone = LOGINBOX_SHOW_CURRENT_SCREENS;
+     {
+       sel = e_fm2_selected_list_get(cfdata->o_fm);
+       if (!sel) sel = e_fm2_all_list_get(cfdata->o_fm);
+       if (!sel) return;
+       ic = evas_list_nth(sel, 0);
+       evas_list_free(sel);
+       if (!ic) return;
+       e_fm2_select_set(cfdata->o_fm, ic->file, 1);
+       if (cfdata->fmdir == 0)
+         snprintf(path, sizeof(path), "%s/.e/e/backgrounds/%s", 
+                  e_user_homedir_get(), ic->file);
+       else
+         snprintf(path, sizeof(path), "%s/data/backgrounds/%s", 
+                  e_prefix_data_get(), ic->file);
+       if (ecore_file_is_dir(path)) return;
+       E_FREE(cfdata->bg);
+       cfdata->bg = strdup(path);
+       e_widget_preview_edje_set(cfdata->o_prev, path, 
+                                 "e/desktop/background");
+     }
+}
+
+static void 
+_cb_radio_change(void *data, Evas_Object *obj) 
+{
+   E_Config_Dialog_Data *cfdata;
+   char path[4096];
    
-   /* end: login box options */
+   cfdata = data;
+   if (!cfdata->o_fm) return;
+   if (cfdata->fmdir == 0) 
+     snprintf(path, sizeof(path), "%s/.e/e/backgrounds", e_user_homedir_get());
+   else 
+     snprintf(path, sizeof(path), "%s/data/backgrounds", e_prefix_data_get());
+   e_fm2_path_set(cfdata->o_fm, path, "/");
+}
 
-   /*
-#ifdef HAVE_PAM
-   of = e_widget_framelist_add(evas, _("Password Type"), 0);
-   
-   rg_auth = e_widget_radio_group_new((int*)(&cfdata->auth_method));
-   
-   oc = e_widget_radio_add(evas, _("Use my login password"), 0, rg_auth);
-   e_widget_on_change_hook_set(oc, _e_desklock_cb_auth_method_change, cfdata);
-   e_widget_framelist_object_append(of, oc);
-   
-   oc = e_widget_radio_add(evas, _("Personalized password"), 1, rg_auth);
-   e_widget_on_change_hook_set(oc, _e_desklock_cb_auth_method_change, cfdata);
-   e_widget_framelist_object_append(of,oc);
-   
-   e_widget_table_object_append(ot, of, 0, 2, 1, 1, 1, 1, 1, 1);
-#endif
-   
-   of = e_widget_framelist_add(evas, _("Personalized Password:"), 0);
-   cfdata->gui.passwd_field = ob = e_widget_entry_add(evas, 
&(cfdata->desklock_passwd));
-#ifdef HAVE_PAM
-   if (cfdata->auth_method == 0) e_widget_disabled_set(ob, 1);
-#endif
-   
-   e_widget_entry_password_set(ob, !cfdata->show_password);
-   e_widget_min_size_set(ob, 200, 25);
-   e_widget_framelist_object_append(of, ob);
-   
-   ob = e_widget_check_add(evas, _("Show password"), &(cfdata->show_password));
-   e_widget_on_change_hook_set(ob, _e_desklock_cb_show_passwd, cfdata);
-   cfdata->gui.show_passwd_check = ob;
-#ifdef HAVE_PAM
-   if (cfdata->auth_method == 0) e_widget_disabled_set(ob, 1);
-#endif
-   e_widget_framelist_object_append(of, ob);
-   
-#ifdef HAVE_PAM
-   e_widget_table_object_append(ot, of, 0, 3, 1, 1, 1, 1, 1, 1);
-#else
-   e_widget_table_object_append(ot, of, 0, 2, 1, 1, 1, 1, 1, 1);
-#endif
-   */
+static void 
+_cb_login_change(void *data, Evas_Object *obj) 
+{
+   E_Config_Dialog_Data *cfdata;
    
-   of = e_widget_framelist_add(evas, _("Automatic Locking"), 0);
+   cfdata = data;
+   if (cfdata->login_zone < 0) 
+     e_widget_disabled_set(cfdata->o_login_slider, 1);
+   else 
+     e_widget_disabled_set(cfdata->o_login_slider, 0);
+}
 
-   ob = e_widget_check_add(evas, _("Lock when X screensaver activates"), 
-                           &(cfdata->autolock_screensaver));
-   e_widget_disabled_set(ob, !cfdata->use_xscreensaver);
-   e_widget_framelist_object_append(of, ob);
-
-   ob = e_widget_check_add(evas, _("Lock when idle time exceeded"), 
-                          &(cfdata->autolock));
-   e_widget_framelist_object_append(of, ob);
-   
-   ob = e_widget_label_add(evas, _("Idle time to exceed"));
-   e_widget_framelist_object_append(of, ob);
-   ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"),
-                           1.0, 90.0, 1.0, 0, &(cfdata->timeout), NULL, 100);
-   e_widget_framelist_object_append(of, ob);
-
-#ifdef HAVE_PAM
-   e_widget_table_object_append(ot, of, 1, 2, 1, 2 ,1 ,1 ,1 ,1);
-#else
-   e_widget_table_object_append(ot, of, 1, 2, 1, 1 ,1 ,1 ,1 ,1);
-#endif
-
-   /* 
-    * Allow Custom Desklock
-    *   Useful, for example, for those of us who prefer
-    *   to use things like xscreensaver, kscreesaver, etc...
-    *   and force them to lock with a custom command.
-    */
-   of = e_widget_framelist_add(evas, _("Custom Desklock"), 0);
-   ob = e_widget_check_add(evas, _("Use custom desklock"), 
-                           &(cfdata->use_custom_desklock));
-   e_widget_framelist_object_append(of, ob);
-   ob = e_widget_entry_add(evas, &(cfdata->custom_desklock_cmd));
-   e_widget_framelist_object_append(of, ob);
-
-#ifdef HAVE_PAM
-   e_widget_table_object_append(ot, of, 0, 4, 2, 1, 1, 1, 1, 1);
-#else
-   e_widget_table_object_append(ot, of, 0, 4, 2, 1, 1, 1, 1, 1);
-#endif
+static void 
+_cb_button_up(void *data1, void *data2) 
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data1;
+   if (!cfdata->o_fm) return;
+   e_fm2_parent_go(cfdata->o_fm);
+   e_widget_scrollframe_child_pos_set(cfdata->o_sf, 0, 0);
+}
 
-   e_dialog_resizable_set(cfd->dia, 0);
-   return ot;
+static void 
+_cb_fm_dir_change(void *data, Evas_Object *obj, void *event_info) 
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata->o_fm) return;
+   if (!e_fm2_has_parent_get(cfdata->o_fm)) 
+     e_widget_disabled_set(cfdata->o_btn, 1);
+   else
+     e_widget_disabled_set(cfdata->o_btn, 0);
+   e_widget_scrollframe_child_pos_set(cfdata->o_sf, 0, 0);
 }
 
-/* general functionality/callbacks */
-static int
-_e_desklock_zone_num_get(void)
+static void 
+_cb_fm_sel_change(void *data, Evas_Object *obj, void *event_info) 
 {
-   int num;
-   Evas_List *l, *l2;
+   E_Config_Dialog_Data *cfdata;
+   Evas_List *sel;
+   E_Fm2_Icon_Info *ic;
+   char path[PATH_MAX];
    
-   num = 0;
-   for (l = e_manager_list(); l; l = l->next)
+   cfdata = data;
+   if (!cfdata->o_fm) return;
+   sel = e_fm2_selected_list_get(cfdata->o_fm);
+   if (!sel) return;
+   ic = sel->data;
+   evas_list_free(sel);
+   
+   if (cfdata->fmdir == 0) 
      {
-       E_Manager *man = l->data;
-       
-       for (l2 = man->containers; l2; l2 = l2->next)
-         {
-            E_Container *con = l2->data;
-            
-            num += evas_list_count(con->zones);
-         }
+       snprintf(path, sizeof(path), "%s/.e/e/backgrounds/%s", 
+                e_user_homedir_get(), ic->file);
      }
-   return num;
+   else 
+     {
+       snprintf(path, sizeof(path), "%s/data/backgrounds/%s", 
+                e_prefix_data_get(), ic->file);
+     }
+   if (ecore_file_is_dir(path)) return;
+   E_FREE(cfdata->bg);
+   cfdata->bg = strdup(path);
+   e_widget_preview_edje_set(cfdata->o_prev, path, "e/desktop/background");
+   e_widget_change(cfdata->o_sf);
+   e_widget_radio_toggle_set(cfdata->o_custom, 1);
 }
 
-static void
-_e_desklock_cb_lb_show_change(void *data, Evas_Object *obj)
+static void 
+_cb_fm_change(void *data, Evas_Object *obj, void *event_info) 
 {
    E_Config_Dialog_Data *cfdata;
-
+   const char *p;
+   char path[PATH_MAX];
+   
    cfdata = data;
-   if (cfdata->login_box_zone == LOGINBOX_SHOW_ALL_SCREENS)
+   if (!cfdata->bg) return;
+   if (!cfdata->o_fm) return;
+   p = e_fm2_real_path_get(cfdata->o_fm);
+   if (p) 
      {
-       cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone;
-       e_widget_disabled_set(cfdata->gui.loginbox_obj.screen_slider, 1);
+       if (strncmp(p, cfdata->bg, strlen(p))) return;
      }
-   else if (cfdata->login_box_zone == LOGINBOX_SHOW_CURRENT_SCREENS)
+   else 
+     return;
+   
+   snprintf(path, sizeof(path), "%s/.e/e/backgrounds", e_user_homedir_get());
+   if (!strncmp(cfdata->bg, path, strlen(path))) 
+     p = cfdata->bg + strlen(path) + 1;
+   else 
      {
-       cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone;
-       e_widget_disabled_set(cfdata->gui.loginbox_obj.screen_slider, 1);
+       snprintf(path, sizeof(path), "%s/data/backgrounds", 
+                e_prefix_data_get());
+       if (!strncmp(cfdata->bg, path, strlen(path)))
+         p = cfdata->bg + strlen(path) + 1;
+       else
+         p = cfdata->bg;
      }
-   else if (cfdata->login_box_zone == LOGINBOX_SHOW_SPECIFIC_SCREEN)
+   e_fm2_select_set(cfdata->o_fm, p, 1);
+   e_fm2_file_show(cfdata->o_fm, p);
+}
+
+static int 
+_zone_count_get(void) 
+{
+   int num = 0;
+   Evas_List *m, *c;
+   
+   for (m = e_manager_list(); m; m = m->next) 
      {
-       e_widget_slider_value_int_set(cfdata->gui.loginbox_obj.screen_slider, 
cfdata->specific_lb_zone_backup);
-       e_widget_disabled_set(cfdata->gui.loginbox_obj.screen_slider, 0);
+       E_Manager *man;
+       
+       man = m->data;
+       if (!man) continue;
+       for (c = man->containers; c; c = c->next) 
+         {
+            E_Container *con;
+            
+            con = c->data;
+            if (!con) continue;
+            num += evas_list_count(con->zones);
+         }
      }
+   return num;
 }



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to