Enlightenment CVS committal

Author  : sndev
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_config.c e_config.h e_desklock.c e_int_config_desklock.c 
        e_widget_entry.c 


Log Message:

Some work on desk lock configuration dialog and possible options.

* desklock background can be configured
* the position of the login box(for xinerama users) can be configured as well
* E config version is increased, since new items appeared.

.. and more

* just small fix to e_widget_entry. This fix drops the input cursor
to the end of the text, when widget gets focus.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -3 -r1.149 -r1.150
--- e_config.c  28 Feb 2006 04:07:28 -0000      1.149
+++ e_config.c  3 Mar 2006 00:02:32 -0000       1.150
@@ -457,9 +457,12 @@
    E_CONFIG_VAL(D, T, cfgdlg_default_mode, INT); /**/
    E_CONFIG_LIST(D, T, gadcons, _e_config_gadcon_edd);
    E_CONFIG_LIST(D, T, shelves, _e_config_shelf_edd);
-   E_CONFIG_VAL(D, T, desklock_personal_passwd, STR);
    E_CONFIG_VAL(D, T, font_hinting, INT);
 
+   E_CONFIG_VAL(D, T, desklock_personal_passwd, STR);
+   E_CONFIG_VAL(D, T, desklock_background, STR);
+   E_CONFIG_VAL(D, T, desklock_login_box_zone, INT);
+
    e_config = e_config_domain_load("e", _e_config_edd);
    if (e_config)
      {
@@ -610,8 +613,11 @@
        e_config->cfgdlg_auto_apply = 0;
        e_config->cfgdlg_default_mode = 0;
        e_config->gadcons = NULL;
-       e_config->desklock_personal_passwd = NULL;
        e_config->font_hinting = 0;
+
+       e_config->desklock_personal_passwd = NULL;
+       e_config->desklock_background = NULL;
+       e_config->desklock_login_box_zone = -1;
        
        /* FIXME: fill up default gadcons! */
          {
@@ -1673,6 +1679,7 @@
    E_CONFIG_LIMIT(e_config->cfgdlg_auto_apply, 0, 1);
    E_CONFIG_LIMIT(e_config->cfgdlg_default_mode, 0, 1);
    E_CONFIG_LIMIT(e_config->font_hinting, 0, 2);
+   E_CONFIG_LIMIT(e_config->desklock_login_box_zone, -2, 1000);
    
    return 1;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.h,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -3 -r1.86 -r1.87
--- e_config.h  2 Mar 2006 12:03:48 -0000       1.86
+++ e_config.h  3 Mar 2006 00:02:32 -0000       1.87
@@ -49,7 +49,7 @@
  * versioning feature. the value of this is really irrelevant - just as
  * long as it increases every time we change something
  */
-#define E_CONFIG_FILE_VERSION 139
+#define E_CONFIG_FILE_VERSION 140
 
 #define E_EVAS_ENGINE_DEFAULT      0
 #define E_EVAS_ENGINE_SOFTWARE_X11 1
@@ -210,8 +210,11 @@
    int         cfgdlg_default_mode; // GUI   
    Evas_List  *gadcons;
    Evas_List  *shelves;
-   char              *desklock_personal_passwd; // GUI
    int         font_hinting; // GUI
+
+   char              *desklock_personal_passwd; // GUI
+   char              *desklock_background; // GUI
+   int       desklock_login_box_zone; //GUI
 };
 
 struct _E_Config_Module
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desklock.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_desklock.c        27 Feb 2006 06:35:56 -0000      1.5
+++ e_desklock.c        3 Mar 2006 00:02:32 -0000       1.6
@@ -9,8 +9,9 @@
 
 struct _E_Desklock_Popup_Data
 {
-   E_Popup     *popup_wnd;
-   Evas_Object *bg_object;
+   E_Popup     *popup_wnd;
+   Evas_Object *bg_object;
+   Evas_Object *login_box;
 };
 
 struct _E_Desklock_Data
@@ -22,6 +23,7 @@
 };
 
 static E_Desklock_Data *edd = NULL;
+static E_Zone          *last_active_zone = NULL;
 
 /***********************************************************************/
 
@@ -29,18 +31,23 @@
 static int _e_desklock_cb_mouse_down(void *data, int type, void *event);
 static int _e_desklock_cb_mouse_up(void *data, int type, void *event);
 static int _e_desklock_cb_mouse_wheel(void *data, int type, void *event);
+static int _e_desklock_cb_mouse_move(void *data, int type, void *event);
 //static int _e_desklock_idler(void *data);
 
 static void _e_desklock_passwd_update();
 static void _e_desklock_backspace();
 static void _e_desklock_delete();
+static int  _e_desklock_zone_num_get();
 
 EAPI int
 e_desklock_show(void)
 {
-   Evas_List  *managers, *l, *l2, *l3;
-   int m = 0, c = 0, z = 0;   
-   E_Desklock_Popup_Data       *edp;
+   Evas_List             *managers, *l, *l2, *l3;
+   E_Desklock_Popup_Data  *edp;
+   Evas_Coord            mw, mh;
+   E_Zone                *current_zone;
+   int                   zone_counter;
+   int                   total_zone_num;
 
    if (!e_config->desklock_personal_passwd)
      {
@@ -65,24 +72,27 @@
        edd->handlers = NULL;
        edd->passwd[0] = 0;
      }
+
+   last_active_zone = current_zone = 
+     e_zone_current_get(e_container_current_get(e_manager_current_get()));
    
+   zone_counter = 0;
+   total_zone_num = _e_desklock_zone_num_get();
    managers = e_manager_list();
    for (l = managers; l; l = l->next)
      {
        E_Manager *man;
        
-       m++;
        man = l->data;
        for (l2 = man->containers; l2; l2 = l2->next)
          {
             E_Container *con;
             
-            c++;
-            
             con = l2->data;
             for (l3 = con->zones; l3; l3 = l3->next)
               {
                  E_Zone *zone;
+
                  
                  zone = l3->data;
                  if (!edd->elock_wnd)
@@ -103,16 +113,69 @@
                       
                       evas_event_freeze(edp->popup_wnd->evas);
                       edp->bg_object = edje_object_add(edp->popup_wnd->evas);
-                      //FIXME: This should come from config file
-                      e_theme_edje_object_set(edp->bg_object,
-                                              "base/theme/desklock",
-                                              "widgets/desklock/main");
-                      
+
+                      if (!e_config->desklock_background ||
+                          !strcmp(e_config->desklock_background, 
"theme_desklock_background"))
+                        {
+                          e_theme_edje_object_set(edp->bg_object,
+                                                  "base/theme/desklock",
+                                                  "desklock/background");
+                        }
+                      else if (!strcmp(e_config->desklock_background, 
"theme_background"))
+                        {
+                          e_theme_edje_object_set(edp->bg_object,
+                                                  "base/theme/backgrounds",
+                                                  "desktop/background");
+                        }
+                      else
+                        {
+                          if 
(e_util_edje_collection_exists(e_config->desklock_background,
+                                                            
"desklock/background"))
+                            {
+                              edje_object_file_set(edp->bg_object, 
e_config->desklock_background,
+                                                   "desklock/background");
+                            }
+                          else
+                            {
+                              if (!edje_object_file_set(edp->bg_object,
+                                                        
e_config->desklock_background,
+                                                        "desktop/background"))
+                                {
+                                  edje_object_file_set(edp->bg_object,
+                                                     
e_theme_edje_file_get("base/theme/desklock",
+                                                                           
"desklock/background"),
+                                                                           
"desklock/background");
+                                }
+                            }
+                        }
+
                       evas_object_move(edp->bg_object, 0, 0);
                       evas_object_resize(edp->bg_object, zone->w, zone->h);
                       evas_object_show(edp->bg_object);
-                      edje_object_part_text_set(edp->bg_object, "title", 
-                                                _("Please enter your unlock 
password"));
+                      /*edje_object_part_text_set(edp->bg_object, "title", 
+                                                _("Please enter your unlock 
password"));*/
+
+                      /**/
+                      edp->login_box = edje_object_add(edp->popup_wnd->evas);
+                      e_theme_edje_object_set(edp->login_box,
+                                              "base/theme/desklock", 
"desklock/login_box");
+                      edje_object_part_swallow(edp->bg_object, "login_box", 
edp->login_box);
+                      edje_object_size_min_calc(edp->login_box, &mw, &mh);
+                      evas_object_move(edp->login_box, (int)((zone->w - mw)/2),
+                                                   (int)((zone->h - mh)/2));
+
+                      if (total_zone_num > 1)
+                      {
+                        if (e_config->desklock_login_box_zone == -1)
+                          evas_object_show(edp->login_box);
+                        else if(e_config->desklock_login_box_zone == -2 && 
zone == current_zone)
+                          evas_object_show(edp->login_box);
+                        else if(e_config->desklock_login_box_zone == 
zone_counter )
+                          evas_object_show(edp->login_box);
+                      }
+                      else
+                        evas_object_show(edp->login_box);
+                      /**/
                       
                       e_popup_edje_bg_object_set(edp->popup_wnd, 
edp->bg_object);
                       evas_event_thaw(edp->popup_wnd->evas);
@@ -121,6 +184,8 @@
                       
                       edd->elock_wnd_list = 
evas_list_append(edd->elock_wnd_list, edp);
                    }
+
+                 zone_counter ++;
               }
          }
      }
@@ -139,6 +204,11 @@
                                    
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_WHEEL,
                                                            
_e_desklock_cb_mouse_wheel,
                                                            NULL));
+   if (total_zone_num > 1 && e_config->desklock_login_box_zone == -2 )
+     edd->handlers = evas_list_append(edd->handlers,
+                                     
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
+                                                             
_e_desklock_cb_mouse_move,
+                                                             NULL));
    //elock_wnd_idler = ecore_idler_add(_e_desklock_idler, NULL);
    
    _e_desklock_passwd_update();
@@ -161,6 +231,7 @@
             
             evas_event_freeze(edp->popup_wnd->evas);
             evas_object_del(edp->bg_object);
+            evas_object_del(edp->login_box);
             evas_event_thaw(edp->popup_wnd->evas);
             
             e_object_del(E_OBJECT(edp->popup_wnd));
@@ -257,6 +328,32 @@
    return 1;
 }
 static int
+_e_desklock_cb_mouse_move(void *data, int type, void *event)
+{
+  E_Desklock_Popup_Data        *edp;
+  E_Zone *current_zone;
+  Evas_List *l;
+
+  current_zone = 
e_zone_current_get(e_container_current_get(e_manager_current_get()));
+
+  if (current_zone == last_active_zone)
+    return 1;
+
+  for (l = edd->elock_wnd_list; l; l = l->next)
+    {
+      edp = l->data;
+
+      if (!edp) continue;
+
+      if (edp->popup_wnd->zone == last_active_zone)
+       evas_object_hide(edp->login_box);
+      else if (edp->popup_wnd->zone == current_zone)
+       evas_object_show(edp->login_box);
+    }
+  last_active_zone = current_zone;
+  return 1;
+}
+static int
 _e_desklock_idler(void *data)
 {
    return 1;
@@ -304,7 +401,7 @@
    for (l = edd->elock_wnd_list; l; l = l->next)
      {
        edp = l->data;
-       edje_object_part_text_set(edp->bg_object, "passwd", passwd_hidden);
+       edje_object_part_text_set(edp->login_box, "passwd", passwd_hidden);
      }
 }
 
@@ -333,4 +430,25 @@
   _e_desklock_backspace();
 }
 
+static int
+_e_desklock_zone_num_get()
+{
+  int num;
+  Evas_List *l, *l2;
+
+  num = 0;
+  for (l = e_manager_list(); l; l = l->next)
+    {
+      E_Manager *man = l->data;
+
+      for (l2 = man->containers; l2; l2 = l2->next)
+       {
+         E_Container *con = l2->data;
+
+         num += evas_list_count(con->zones);
+       }
+    }
+
+  return num;
+}
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_config_desklock.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_int_config_desklock.c     22 Feb 2006 14:35:04 -0000      1.1
+++ e_int_config_desklock.c     3 Mar 2006 00:02:32 -0000       1.2
@@ -1,5 +1,18 @@
 #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 200
+
+#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);
@@ -7,24 +20,67 @@
 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 void _e_desklock_passwd_cb_change(void *data, Evas_Object *obj);
 static void _e_desklock_cb_show_passwd(void *data, Evas_Object *obj, const 
char *emission,
                                       const char *source);
+static int  _e_desklock_zone_num_get();
+
+static void _load_bgs(E_Config_Dialog_Data *cfdata);
+static void _ibg_list_cb_bg_selected(void *data);
+
+static void _e_desklock_cb_lb_show_on_all_screens(void *data, Evas_Object *obj,
+                                                 const char *emission, const 
char *source);
+static void _e_desklock_cb_lb_show_on_current_screen(void *data, Evas_Object 
*obj,
+                                                    const char *emission, 
const char *source);
+static void _e_desklock_cb_lb_show_on_specific_screen(void *data, Evas_Object 
*obj,
+                                                     const char *emission, 
const char *source);
+
+/*******************************************************************************************/
 
 struct _E_Config_Dialog_Data
 {
   char *desklock_passwd;
   char *desklock_passwd_cp;
-  int show_password;
+  int show_password; // local
+
+  int login_box_zone; // in e_config;
+  int specific_lb_zone; // local variable
+  int specific_lb_zone_backup; // used to have smart iface
+
+  int zone_count; // local variable;
+
+  char *cur_bg; // local variable;
+  Evas *evas; // local variable
+  Evas_Object *preview_image; // local variable
+
+  /*double  vertical_lb_align;
+  double  horizontal_lb_align;*/
+
 
   struct {
     Evas_Object        *passwd_field;
+    Evas_Object *bg_list;
+
+    struct {
+      Evas_Object *show_all_screens;
+      Evas_Object *show_current_screen;
+      Evas_Object *show_specific_screen;
+      Evas_Object *screen_slider;
+    } loginbox_obj;
   } gui;
 };
 
-typedef struct _E_Widget_Entry_Data E_Widget_Entry_Data;
-typedef struct _E_Widget_Check_Data E_Widget_Check_Data;
+typedef struct _E_Widget_Entry_Data   E_Widget_Entry_Data;
+typedef struct _E_Widget_Check_Data   E_Widget_Check_Data;
+typedef        struct _E_Widget_Radio_Data   E_Widget_Radio_Data;
+typedef struct _E_Widget_Slider_Data  E_Widget_Slider_Data;
 
 struct _E_Widget_Entry_Data
 {
@@ -34,12 +90,27 @@
    void (*on_change_func) (void *data, Evas_Object *obj);
    void  *on_change_data;
 };
+
 struct _E_Widget_Check_Data
 {
    Evas_Object *o_check;
    int *valptr;
 };
 
+struct _E_Widget_Radio_Data
+{
+  E_Radio_Group *group;
+  Evas_Object  *o_radio;
+  int          valnum;
+};
+
+struct _E_Widget_Slider_Data
+{
+  Evas_Object *o_widget, *o_slider;
+  double *dval;
+  int   *ival;
+};
+
 EAPI E_Config_Dialog *
 e_int_config_desklock(E_Container *con)
 {
@@ -52,6 +123,10 @@
   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->override_auto_apply = 1;
 
   cfd = e_config_dialog_new(con, _("Desktop Lock Settings"), NULL, 0, v, NULL);
   return cfd;
@@ -66,7 +141,37 @@
       cfdata->desklock_passwd = strdup(e_config->desklock_personal_passwd);
       cfdata->desklock_passwd_cp = strdup(e_config->desklock_personal_passwd);
     }
+  else
+    {
+      cfdata->desklock_passwd = strdup("");
+      cfdata->desklock_passwd_cp = strdup("");
+    }
+      
+  /* should be taken from e_config */
+  //cfdata->login_box_on_zone = -1;
+
+  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
+    {
+      cfdata->login_box_zone = e_config->desklock_login_box_zone;
+      cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone = 0;
+    }
+
+  cfdata->zone_count = _e_desklock_zone_num_get();
+
   cfdata->show_password = 0;
+
+  if (!e_config->desklock_background)
+    cfdata->cur_bg = strdup(DEF_DESKLOCK_BACKGROUND);
+  else
+    cfdata->cur_bg = strdup(e_config->desklock_background);
+
+    //vertical_lb_align = e_config->desklock_login
 }
 
 static void *
@@ -78,6 +183,8 @@
   cfdata->desklock_passwd = strdup("");
   cfdata->desklock_passwd_cp = strdup("");
 
+  _fill_desklock_data(cfdata);
+
   return cfdata;
 }
 static void
@@ -87,6 +194,7 @@
 
   E_FREE(cfdata->desklock_passwd);
   E_FREE(cfdata->desklock_passwd_cp);
+  E_FREE(cfdata->cur_bg);
 
   free(cfdata);
 }
@@ -114,7 +222,7 @@
   Evas_Object *o, *of, *ob;
   E_Widget_Check_Data *wd;
 
-  _fill_desklock_data(cfdata);
+  //_fill_desklock_data(cfdata);
 
   o = e_widget_list_add(evas, 0, 0);
 
@@ -140,6 +248,144 @@
   return o;
 }
 
+/* advanced window */
+
+static int
+_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
+{
+  if (!cfdata) return 0;
+
+  if (cfdata->cur_bg)
+    {
+      if (e_config->desklock_background)
+       evas_stringshare_del(e_config->desklock_background);
+      e_config->desklock_background = (char 
*)evas_stringshare_add(cfdata->cur_bg);
+    }
+
+  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_save_queue();
+  return 1;
+}
+
+static Evas_Object *
+_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata)
+{
+  Evas_Object *o, *of, *of1, *ob;
+  E_Widget_Radio_Data *wd;
+
+  E_Radio_Group *rg, *rg_bkg;
+  Evas_Object *ot;
+
+  //_fill_desklock_data(cfdata);
+  
+  cfdata->evas = evas;
+
+  ot = e_widget_table_add(evas, 0);
+  {
+    Evas_Object *ot1;
+    /* start: bkg list */
+    cfdata->gui.bg_list = e_widget_ilist_add(evas, BG_LIST_ICON_SIZE_W,
+                                            BG_LIST_ICON_SIZE_H, 
&(cfdata->cur_bg));
+    {
+      e_widget_ilist_selector_set(cfdata->gui.bg_list, 1);
+      e_widget_min_size_set(cfdata->gui.bg_list, 180, 200);
+
+      _load_bgs(cfdata);
+
+      e_widget_focus_set(cfdata->gui.bg_list, 1);
+      e_widget_ilist_go(cfdata->gui.bg_list);
+    }
+    e_widget_table_object_append(ot, cfdata->gui.bg_list, 0, 0, 1, 2, 1, 1, 1, 
1);
+    /* end: bkg list */
+
+    /* start: Desk Lock Window Preview */
+    ot1 = e_widget_frametable_add(evas, _("Desk Lock Window Preview"), 0);
+    {
+      e_widget_frametable_object_append(ot1, cfdata->preview_image, 0, 1, 1, 
1, 1, 1, 1, 1);
+    }
+    e_widget_table_object_append(ot, ot1, 1, 0, 1, 1, 1, 1, 1, 1);
+    /* end: Desk Lock Window Preview */
+
+    /* start: login box options */
+
+    /* 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
+     */
+
+    if (1 || _e_desklock_zone_num_get() > 1)
+      {
+       of = e_widget_framelist_add(evas, _("Login Box Settings"), 0);
+       {
+         rg = e_widget_radio_group_new((int *)(&(cfdata->login_box_zone)));
+
+         ob = e_widget_radio_add(evas, _("Show On All Screen Zones"), 
LOGINBOX_SHOW_ALL_SCREENS,
+                                 rg);
+         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);
+         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);
+         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);
+      }
+    /* end: login box options */
+  }
+
+  /* register callbacks for the radios in login box options
+   * in order to propertly update interface
+   */
+
+  wd = e_widget_data_get(cfdata->gui.loginbox_obj.show_all_screens);
+  edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
+                                 _e_desklock_cb_lb_show_on_all_screens, 
cfdata);
+
+  wd = e_widget_data_get(cfdata->gui.loginbox_obj.show_current_screen);
+  edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
+                                 _e_desklock_cb_lb_show_on_current_screen, 
cfdata);
+
+  wd = e_widget_data_get(cfdata->gui.loginbox_obj.show_specific_screen);
+  edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
+                                 _e_desklock_cb_lb_show_on_specific_screen, 
cfdata);
+
+
+  e_dialog_resizable_set(cfd->dia, 0);
+  return ot;
+}
+
+
+/* general functionality/callbacks */
+
 static void
 _e_desklock_passwd_cb_change(void *data, Evas_Object *obj)
 {
@@ -201,3 +447,252 @@
   cfdata = data;
   _e_desklock_passwd_cb_change(cfdata, cfdata->gui.passwd_field);
 }
+
+static int
+_e_desklock_zone_num_get()
+{
+  int num;
+  Evas_List *l, *l2;
+
+  num = 0;
+  for (l = e_manager_list(); l; l = l->next)
+    {
+      E_Manager *man = l->data;
+
+      for (l2 = man->containers; l2; l2 = l2->next)
+       {
+         E_Container *con = l2->data;
+
+         num += evas_list_count(con->zones);
+       }
+    }
+
+  return num;
+}
+
+static void
+_load_bgs(E_Config_Dialog_Data *cfdata)
+{
+  Evas_Object *bg_obj, *o, *ic, *im;
+  Ecore_Evas *eebuf;
+  Evas *evasbuf;
+  Evas_List *bg_dirs, *bg;
+  const char *f, *f1;
+  char *c;
+
+  if (!cfdata || !cfdata->gui.bg_list)
+    return;
+
+  bg_obj = edje_object_add(cfdata->evas);
+
+
+  eebuf = ecore_evas_buffer_new(1, 1);
+  evasbuf = ecore_evas_get(eebuf);
+
+  /* Desklock background */
+  o = edje_object_add(evasbuf);
+  f1 = e_theme_edje_file_get("base/theme/desklock", "desklock/background");
+  c = strdup(f1);
+
+  if (edje_object_file_set(o, f1, "desklock/background"))
+    {
+      Evas_Object *o = NULL;
+
+      if (!e_thumb_exists(c))
+       o = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
+                                  cfdata->evas, &o, NULL, NULL);
+      else
+       o = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, 
BG_LIST_ICON_SIZE_H, 1);
+
+      e_widget_ilist_append(cfdata->gui.bg_list, o, "Theme DeskLock 
Background",
+                           _ibg_list_cb_bg_selected, cfdata, 
DEF_DESKLOCK_BACKGROUND);
+    }
+
+  if (!e_config->desklock_background ||
+      !strcmp(e_config->desklock_background, DEF_DESKLOCK_BACKGROUND))
+    e_widget_ilist_selected_set(cfdata->gui.bg_list, 0);
+
+  im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, 
BG_PREVIEW_H);
+  e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, 
BG_PREVIEW_W,
+                                                       BG_PREVIEW_H, 1));
+
+  evas_object_del(o);
+  ecore_evas_free(eebuf);
+  free(c);
+  /* end: Desklock background */
+
+  /* Theme Background */
+
+
+  eebuf = ecore_evas_buffer_new(1, 1);
+  evasbuf = ecore_evas_get(eebuf);
+
+  o = edje_object_add(evasbuf);
+  f = e_theme_edje_file_get("base/theme/backgrounds", "desktop/background");
+  c = strdup(f);
+  if (edje_object_file_set(o, f, "desktop/background"))
+    {
+      Evas_Object *o = NULL;
+
+      if (!e_thumb_exists(c))
+       o = e_thumb_generate_begin(c, BG_LIST_ICON_SIZE_W, BG_LIST_ICON_SIZE_H,
+                                  cfdata->evas, &o, NULL, NULL);
+      else
+       o = e_thumb_evas_object_get(c, cfdata->evas, BG_LIST_ICON_SIZE_W, 
BG_LIST_ICON_SIZE_H, 1);
+
+      e_widget_ilist_append(cfdata->gui.bg_list, o, "Theme Background", 
_ibg_list_cb_bg_selected,
+                           cfdata, DEF_THEME_BACKGROUND);
+    }
+
+  if (e_config->desklock_background &&
+      strcmp(e_config->desklock_background, DEF_THEME_BACKGROUND) == 0)
+    {
+      e_widget_ilist_selected_set(cfdata->gui.bg_list, 1);
+
+      im = e_widget_image_add_from_object(cfdata->evas, bg_obj, BG_PREVIEW_W, 
BG_PREVIEW_H);
+      e_widget_image_object_set(im, e_thumb_evas_object_get(c, cfdata->evas, 
BG_PREVIEW_W,
+                                                           BG_PREVIEW_H, 1));
+    }
+
+  evas_object_del(o);
+  ecore_evas_free(eebuf);
+  free(c);
+
+  bg_dirs = e_path_dir_list_get(path_backgrounds);
+  for (bg = bg_dirs; bg; bg = bg->next)
+    {
+      E_Path_Dir *d;
+
+      d = bg->data;
+      if (ecore_file_is_dir(d->dir))
+       {
+         char *bg_file;
+         Ecore_List *bgs;
+         int i = e_widget_ilist_count(cfdata->gui.bg_list);
+
+         bgs = ecore_file_ls(d->dir);
+         if (!bgs) continue;
+         while ((bg_file = ecore_list_next(bgs)))
+           {
+             char full_path[4096];
+
+             snprintf(full_path, sizeof(full_path), "%s/%s", d->dir, bg_file);
+             if (ecore_file_is_dir(full_path)) continue;
+             if (!e_util_edje_collection_exists(full_path, 
"desktop/background")) continue;
+
+             if (!e_thumb_exists(full_path))
+               ic = e_thumb_generate_begin(full_path, BG_LIST_ICON_SIZE_W, 
BG_LIST_ICON_SIZE_H,
+                                           cfdata->evas, &ic, NULL, NULL);
+             else
+               ic = e_thumb_evas_object_get(full_path, cfdata->evas, 
BG_LIST_ICON_SIZE_W,
+                                            BG_LIST_ICON_SIZE_H, 1);
+
+             e_widget_ilist_append(cfdata->gui.bg_list, ic, 
ecore_file_strip_ext(bg_file),
+                                   _ibg_list_cb_bg_selected, cfdata, 
full_path);
+
+             if ((e_config->desklock_background) &&
+                 (!strcmp(e_config->desklock_background, full_path)))
+               {
+                 Evas_Object *o = NULL;
+
+                 e_widget_ilist_selected_set(cfdata->gui.bg_list, i);
+                 o = edje_object_add(cfdata->evas);
+                 edje_object_file_set(o, e_config->desktop_default_background,
+                                      "desktop/background");
+
+                 im = e_widget_image_add_from_object(cfdata->evas, o, 
BG_PREVIEW_W, BG_PREVIEW_H);
+                 e_widget_image_object_set(im, 
e_thumb_evas_object_get(full_path, cfdata->evas,
+                                                                       
BG_PREVIEW_W, BG_PREVIEW_H,
+                                                                       1));
+               }
+             i++;
+           }
+         free(bg_file);
+         ecore_list_destroy(bgs);
+       }
+      free(d);
+    }
+  evas_list_free(bg);
+  evas_list_free(bg_dirs);
+
+  cfdata->preview_image = im;
+}
+
+static void
+_ibg_list_cb_bg_selected(void *data)
+{
+  E_Config_Dialog_Data *cfdata;
+
+  cfdata = data;
+
+  if (cfdata->cur_bg[0])
+    {
+      if (strcmp(cfdata->cur_bg, DEF_DESKLOCK_BACKGROUND) == 0)
+       {
+         const char *theme;
+         theme = e_theme_edje_file_get("base/theme/desklock", 
"desklock/background");
+         e_widget_image_object_set(cfdata->preview_image, 
+                                   e_thumb_evas_object_get(strdup(theme), 
cfdata->evas,
+                                                           BG_PREVIEW_W, 
BG_PREVIEW_H, 1));
+       }
+      else if (strcmp(cfdata->cur_bg, DEF_THEME_BACKGROUND) == 0)
+       {
+         const char *theme;
+         theme = e_theme_edje_file_get("base/theme/backgrounds", 
"desktop/background");
+         e_widget_image_object_set(cfdata->preview_image, 
+                                   e_thumb_evas_object_get(strdup(theme), 
cfdata->evas,
+                                                           BG_PREVIEW_W, 
BG_PREVIEW_H, 1));
+       }
+      else
+      {
+       e_widget_image_object_set(cfdata->preview_image,
+                                 e_thumb_evas_object_get(cfdata->cur_bg, 
cfdata->evas,
+                                                         BG_PREVIEW_W, 
BG_PREVIEW_H, 1));
+      }
+    }
+  else
+    {
+      const char *theme;
+      theme = e_theme_edje_file_get("base/theme/desklock", 
"desklock/background");
+      e_widget_image_object_set(cfdata->preview_image, 
+                               e_thumb_evas_object_get(strdup(theme), 
cfdata->evas,
+                                                       BG_PREVIEW_W, 
BG_PREVIEW_H, 1));
+    }
+}
+
+static void
+_e_desklock_cb_lb_show_on_all_screens(void *data, Evas_Object *obj, const char 
*emission,
+                                     const char *source)
+{
+  E_Config_Dialog_Data *cfdata;
+
+  if (!(cfdata = data)) return;
+
+  cfdata->specific_lb_zone_backup = cfdata->specific_lb_zone;
+
+  e_widget_disabled_set(cfdata->gui.loginbox_obj.screen_slider, 1);
+}
+
+static void
+_e_desklock_cb_lb_show_on_current_screen(void *data, Evas_Object *obj, const 
char *emission,
+                                        const char *source)
+{
+  _e_desklock_cb_lb_show_on_all_screens(data, obj, emission, source);
+}
+
+static void
+_e_desklock_cb_lb_show_on_specific_screen(void *data, Evas_Object *obj, const 
char *emission,
+                                        const char *source)
+{
+  E_Widget_Slider_Data *wd;
+  E_Config_Dialog_Data *cfdata;
+
+  if (!(cfdata = data)) return;
+
+  wd = e_widget_data_get(cfdata->gui.loginbox_obj.screen_slider);
+  e_slider_value_set(wd->o_slider, cfdata->specific_lb_zone_backup);
+  cfdata->specific_lb_zone = cfdata->specific_lb_zone_backup;
+
+  //e_widget_disabled_set(wd->o_widget, 1);
+}
+
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_widget_entry.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- e_widget_entry.c    7 Jan 2006 10:39:45 -0000       1.9
+++ e_widget_entry.c    3 Mar 2006 00:02:32 -0000       1.10
@@ -43,6 +43,7 @@
      {
        e_entry_focus(wd->o_entry);
        evas_object_focus_set(wd->o_entry, 1);
+       e_entry_cursor_move_at_end(wd->o_entry);
        e_entry_cursor_show(wd->o_entry);
      }
    else




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to