[prev in list] [next in list] [prev in thread] [next in thread] 

List:       enlightenment-svn
Subject:    E CVS: apps/e sndev
From:       Enlightenment CVS <noreply () fitx-00 ! ewr ! caosity ! org>
Date:       2006-03-31 17:26:38
Message-ID: 20060331172638.496B6A30A6 () cvs ! caosity ! org
[Download RAW message or body]

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 


Log Message:

PAM support for Desklock is added. Now system-wide authentication is available and one
can use its user password instead of setting just desklock password. However, the possibility
to set a personilized password is still available. If somebody think that it is
not neccesarily to have it now, please write :)

Moreover, the desklock dialog is updated. Now, the advanced tab includes all the settings
that are on the basic tab.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.159
retrieving revision 1.160
diff -u -3 -r1.159 -r1.160
--- e_config.c	28 Mar 2006 07:53:40 -0000	1.159
+++ e_config.c	31 Mar 2006 17:26:37 -0000	1.160
@@ -460,6 +460,9 @@
    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);
+#ifdef HAVE_PAM
+   E_CONFIG_VAL(D, T, desklock_auth_method, INT);
+#endif
    E_CONFIG_VAL(D, T, desklock_login_box_zone, INT);
    E_CONFIG_VAL(D, T, desklock_autolock, INT);
    E_CONFIG_VAL(D, T, desklock_use_timeout, INT);
@@ -631,6 +634,9 @@
    
    e_config->desklock_personal_passwd = NULL;
    e_config->desklock_background = NULL;
+#ifdef HAVE_PAM
+   e_config->desklock_auth_method = 0;
+#endif
    e_config->desklock_login_box_zone = -1;
    e_config->desklock_autolock = 0;
    e_config->desklock_use_timeout = 0;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_config.h,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -3 -r1.90 -r1.91
--- e_config.h	10 Mar 2006 05:48:46 -0000	1.90
+++ e_config.h	31 Mar 2006 17:26:38 -0000	1.91
@@ -48,10 +48,10 @@
  * defaults for e to work.
  */
 #define E_CONFIG_FILE_EPOCH      0x0000
-/* incriment this whenever a new set of configvalues are added but the users
+/* increment this whenever a new set of configvalues are added but the users
  * config doesn't need top be wiped - simply new values need to be put in
  */
-#define E_CONFIG_FILE_GENERATION 0x008d
+#define E_CONFIG_FILE_GENERATION 0x008e
 #define E_CONFIG_FILE_VERSION    ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
 
 #define E_EVAS_ENGINE_DEFAULT      0
@@ -217,6 +217,9 @@
 
    char	      *desklock_personal_passwd; // GUI
    char	      *desklock_background; // GUI
+#ifdef HAVE_PAM
+   int	      desklock_auth_method; // GUI
+#endif
    int	      desklock_login_box_zone; // GUI
    int        desklock_autolock; // GUI
    int        desklock_use_timeout; // GUI
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_desklock.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- e_desklock.c	16 Mar 2006 12:53:40 -0000	1.10
+++ e_desklock.c	31 Mar 2006 17:26:38 -0000	1.11
@@ -1,8 +1,37 @@
 #include "e.h"
 
+#ifdef HAVE_PAM
+  #include <security/pam_appl.h>
+  #include <pwd.h>
+  #include <limits.h>
+#endif
+
 #define ELOCK_POPUP_LAYER 10000
 #define PASSWD_LEN 256
 
+/**************************** Pam support *******************************/
+
+#ifdef HAVE_PAM
+struct _Desklock_Auth
+{
+  struct 
+  {
+    struct pam_conv conv;
+    pam_handle_t    *handle;
+  } pam;
+
+  char user[PATH_MAX];
+  char passwd[PATH_MAX];
+};
+
+static int _desklock_auth(const char *passwd);
+static int _desklock_pam_init(struct _Desklock_Auth *da);
+static int _desklock_auth_pam_conv(int num_msg, const struct pam_message **msg,
+				   struct pam_response **resp, void *appdata_ptr);
+static char *_desklock_auth_get_current_user();
+static char *_desklock_auth_get_current_host();
+#endif
+
 /**************************** private data ******************************/
 typedef struct _E_Desklock_Data		E_Desklock_Data;
 typedef struct _E_Desklock_Popup_Data	E_Desklock_Popup_Data;
@@ -40,6 +69,8 @@
 static void _e_desklock_delete();
 static int  _e_desklock_zone_num_get();
 
+static int _e_desklock_check_auth();
+
 EAPI int
 e_desklock_show(void)
 {
@@ -52,19 +83,26 @@
 
    if (edd) return 0;
    
-   if (!e_config->desklock_personal_passwd)
+#ifdef HAVE_PAM
+   if (e_config->desklock_auth_method == 1 )
      {
-	E_Zone  *zone;
-	
-	zone = e_util_zone_current_get(e_manager_current_get());
-	if (zone)
-	  {
-	     E_Config_Dialog *cfd;
-	     
-	     cfd = e_int_config_desklock(zone->container);
-	  }
-	return 0;
+#endif
+       if (!e_config->desklock_personal_passwd)
+	 {
+	    E_Zone  *zone;
+	    
+	    zone = e_util_zone_current_get(e_manager_current_get());
+	    if (zone)
+	      {
+		 E_Config_Dialog *cfd;
+		 
+		 cfd = e_int_config_desklock(zone->container);
+	      }
+	    return 0;
+	 }
+#ifdef HAVE_PAM
      }
+#endif
    
    edd = E_NEW(E_Desklock_Data, 1);
    if (!edd) return 0;
@@ -305,13 +343,11 @@
    else if (!strcmp(ev->keysymbol, "KP_Enter"))
      {
 	// here we have to go to auth
-	if ((e_config->desklock_personal_passwd) &&
-	    (!strcmp(edd->passwd == NULL ? "" : edd->passwd,
-		     e_config->desklock_personal_passwd == NULL ? "" :
-			    e_config->desklock_personal_passwd)))
+        if (_e_desklock_check_auth())
 	  {
-	     e_desklock_hide();
-	     return 1;
+	    memset(edd->passwd, 0, sizeof(char) * PASSWD_LEN);
+	    e_desklock_hide();
+	    return 1;
 	  }
 	else
 	  ; // report about invalid password
@@ -322,13 +358,11 @@
    else if (!strcmp(ev->keysymbol, "Return"))
      {
 	// here we have to go to auth
-	if ((e_config->desklock_personal_passwd) &&
-	    (!strcmp(edd->passwd == NULL ? "" : edd->passwd,
-		     e_config->desklock_personal_passwd == NULL ? "" :
-			    e_config->desklock_personal_passwd)))
+        if (_e_desklock_check_auth())
 	  {
-	     e_desklock_hide();
-	     return 1;
+	    memset(edd->passwd, 0, sizeof(char) * PASSWD_LEN);
+	    e_desklock_hide();
+	    return 1;
 	  }
 	else
 	  ; // report about invalid password
@@ -493,3 +527,129 @@
   return num;
 }
 
+static int _e_desklock_check_auth()
+{
+  if (!edd) return 0;
+#ifdef HAVE_PAM
+  if (e_config->desklock_auth_method == 0)
+  {
+    return _desklock_auth(edd->passwd);
+  }
+  else if (e_config->desklock_auth_method == 1)
+  {
+#endif // HAVE_PAM
+    if ((e_config->desklock_personal_passwd) &&
+	(!strcmp(edd->passwd == NULL ? "" : edd->passwd,
+		 e_config->desklock_personal_passwd == NULL ? "" :
+			e_config->desklock_personal_passwd)))
+      {
+	 return 1;
+      }
+#ifdef HAVE_PAM
+  }
+#endif
+
+  return 0;
+}
+
+#ifdef HAVE_PAM
+static int _desklock_auth(const char *passwd)
+{
+  int pamerr;
+  struct _Desklock_Auth da;
+
+  strncpy(da.user, _desklock_auth_get_current_user(), PATH_MAX);
+  strncpy(da.passwd, passwd, PATH_MAX);
+  da.pam.handle = NULL;
+  da.pam.conv.conv = NULL;
+  da.pam.conv.appdata_ptr = NULL;
+
+  if (!_desklock_pam_init(&da))
+    return 0;
+
+  pamerr = pam_authenticate(da.pam.handle, 0);
+
+  pam_end(da.pam.handle, pamerr);
+  memset(da.passwd, 0 , sizeof(da.passwd));
+
+  return pamerr == PAM_SUCCESS ? 1 : 0;
+}
+
+static char *_desklock_auth_get_current_user()
+{
+  char *user;
+  struct passwd *pwent = NULL;
+
+  pwent = getpwuid(getuid());
+  user = strdup(pwent->pw_name);
+  return user;
+}
+
+static int _desklock_pam_init(struct _Desklock_Auth *da)
+{
+  int pamerr;
+
+  if (!da) return 0;
+
+  da->pam.conv.conv = _desklock_auth_pam_conv;
+  da->pam.conv.appdata_ptr = da;
+  da->pam.handle = NULL;
+
+  if ((pamerr = pam_start("system-auth", da->user, &(da->pam.conv),
+			  &(da->pam.handle))) != PAM_SUCCESS)
+    return 0;
+
+  if ((pamerr = pam_set_item(da->pam.handle, PAM_USER,
+			     _desklock_auth_get_current_user())) != PAM_SUCCESS)
+    return 0;
+
+  if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST,
+			     _desklock_auth_get_current_host())) != PAM_SUCCESS)
+    return 0;
+
+  return 1;
+}
+
+static int _desklock_auth_pam_conv(int num_msg, const struct pam_message **msg,
+				   struct pam_response **resp, void *appdata_ptr)
+{
+  int replies = 0;
+  struct _Desklock_Auth *da = (struct _Desklock_Auth *)appdata_ptr;
+  struct pam_response *reply = NULL;
+
+  reply = (struct pam_response *)malloc(sizeof(struct pam_response) *num_msg);
+
+  if (!reply)
+    return PAM_CONV_ERR;
+
+  for (replies = 0; replies < num_msg; replies++)
+    {
+      switch (msg[replies]->msg_style)
+	{
+	  case PAM_PROMPT_ECHO_ON:
+	    reply[replies].resp_retcode = PAM_SUCCESS;
+	    reply[replies].resp = (char *)strdup(da->user);
+	    break;
+	  case PAM_PROMPT_ECHO_OFF:
+	    reply[replies].resp_retcode = PAM_SUCCESS;
+	    reply[replies].resp = (char *)strdup(da->passwd);
+	    break;
+	  case PAM_ERROR_MSG:
+	  case PAM_TEXT_INFO:
+	    reply[replies].resp_retcode = PAM_SUCCESS;
+	    reply[replies].resp = NULL;
+	    break;
+	  default:
+	    free(reply);
+	    return PAM_CONV_ERR;
+	}
+    }
+  *resp = reply;
+  return PAM_SUCCESS;
+}
+
+static char *_desklock_auth_get_current_host()
+{
+  return strdup("localhost");
+}
+#endif
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_desklock.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- e_int_config_desklock.c	6 Mar 2006 02:42:45 -0000	1.8
+++ e_int_config_desklock.c	31 Mar 2006 17:26:38 -0000	1.9
@@ -42,6 +42,13 @@
 static void _e_desklock_cb_lb_show_on_specific_screen(void *data, Evas_Object *obj,
 						      const char *emission, const char *source);
 
+#ifdef HAVE_PAM
+static void _e_desklock_cb_syswide_auth_method(void *data, Evas_Object *obj,
+					       const char *emission, const char *source);
+static void _e_desklock_cb_personilized_auth_method(void *data, Evas_Object *obj,
+						    const char *emission, const char *source);
+#endif
+
 /*******************************************************************************************/
 
 struct _E_Config_Dialog_Data
@@ -63,10 +70,16 @@
    char *cur_bg; // local variable;
    Evas *evas; // local variable
    Evas_Object *preview_image; // local variable
+
+#ifdef HAVE_PAM
+   int auth_method;
+#endif
    
    struct {
-      Evas_Object	*passwd_field;
+      Evas_Object *passwd_field;
       Evas_Object *bg_list;
+
+      Evas_Object *show_passwd_check;
       
       struct {
 	 Evas_Object *show_all_screens;
@@ -174,6 +187,10 @@
      cfdata->cur_bg = strdup(DEF_DESKLOCK_BACKGROUND);
    else
      cfdata->cur_bg = strdup(e_config->desklock_background);
+
+#ifdef HAVE_PAM
+   cfdata->auth_method = e_config->desklock_auth_method;
+#endif
    
    //vertical_lb_align = e_config->desklock_login
 }
@@ -215,6 +232,9 @@
    e_config->desklock_autolock = cfdata->autolock;
    e_config->desklock_use_timeout = cfdata->use_timeout;
    e_config->desklock_timeout = cfdata->timeout;
+#ifdef HAVE_PAM
+   e_config->desklock_auth_method = cfdata->auth_method;
+#endif
    if (e_config->desklock_use_timeout)
      {
 	ecore_x_screensaver_timeout_set(e_config->desklock_timeout);
@@ -228,20 +248,56 @@
 {
    Evas_Object *o, *of, *ob;
    E_Widget_Check_Data *wd;
+   E_Widget_Radio_Data *rwd;
+
+#ifdef HAVE_PAM
+   E_Radio_Group  *rg_auth;
+   Evas_Object	  *oc;
+#endif
    
    //_fill_desklock_data(cfdata);
    
    o = e_widget_list_add(evas, 0, 0);
+
+#ifdef HAVE_PAM
+   of = e_widget_framelist_add(evas, _("Authentication Method"), 0);
+   {
+     rg_auth = e_widget_radio_group_new((int*)(&cfdata->auth_method));
+     oc = e_widget_radio_add(evas, _("System wide authentication"), 0, rg_auth);
+     e_widget_framelist_object_append(of, oc);
+
+     rwd = e_widget_data_get(oc);
+     edje_object_signal_callback_add(rwd->o_radio, "toggle_on", "",
+				     _e_desklock_cb_syswide_auth_method, cfdata);
+
+     oc = e_widget_radio_add(evas, _("Personilized password"), 1, rg_auth);
+     e_widget_framelist_object_append(of,oc);
+
+     rwd = e_widget_data_get(oc);
+     edje_object_signal_callback_add(rwd->o_radio, "toggle_on", "",
+				     _e_desklock_cb_personilized_auth_method, cfdata);
+   }
+   e_widget_list_object_append(o, of, 1, 1, 0.5);
+#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_desklock_passwd_cb_change(cfdata, ob);
    e_widget_entry_on_change_callback_set(ob, _e_desklock_passwd_cb_change, cfdata);
    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));
+   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);
    
    wd = (E_Widget_Check_Data*)e_widget_data_get(ob);
@@ -283,6 +339,13 @@
 {
    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 = (char *)evas_stringshare_add(cfdata->desklock_passwd_cp);
+
    if (cfdata->cur_bg)
      {
 	if (e_config->desklock_background)
@@ -303,6 +366,14 @@
    e_config->desklock_autolock = cfdata->autolock;
    e_config->desklock_use_timeout = cfdata->use_timeout;
    e_config->desklock_timeout = cfdata->timeout;
+#ifdef HAVE_PAM
+   e_config->desklock_auth_method = cfdata->auth_method;
+#endif
+
+   if (e_config->desklock_use_timeout)
+     {
+	ecore_x_screensaver_timeout_set(e_config->desklock_timeout);
+     }
    
    e_config_save_queue();
    return 1;
@@ -314,12 +385,15 @@
   Evas_Object *o, *of, *of1, *ob;
   E_Widget_Radio_Data *wd;
 
-   /* FIXME: this dialog is broken. advanced options should ALSO INCLUDE basic options */
   E_Radio_Group *rg, *rg_bkg;
-  Evas_Object *ot;
+  Evas_Object *ot, *ol;
+
+#ifdef HAVE_PAM
+  E_Radio_Group *rg_auth;
+  Evas_Object	*oc;
+  E_Widget_Check_Data *cwd;
+#endif
 
-  //_fill_desklock_data(cfdata);
-  
   cfdata->evas = evas;
 
   ot = e_widget_table_add(evas, 0);
@@ -327,7 +401,7 @@
     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));
+      				       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);
@@ -355,41 +429,120 @@
 
     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);
+        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 */
+
+#ifdef HAVE_PAM
+      of = e_widget_framelist_add(evas, _("Authentication Method"), 0);
+      {
+        rg_auth = e_widget_radio_group_new((int*)(&cfdata->auth_method));
+        oc = e_widget_radio_add(evas, _("System wide authentication"), 0, rg_auth);
+        e_widget_framelist_object_append(of, oc);
+
+        wd = e_widget_data_get(oc);
+        edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
+       				 _e_desklock_cb_syswide_auth_method, cfdata);
+
+        oc = e_widget_radio_add(evas, _("Personilized password"), 1, rg_auth);
+        e_widget_framelist_object_append(of,oc);
+
+        wd = e_widget_data_get(oc);
+        edje_object_signal_callback_add(wd->o_radio, "toggle_on", "",
+       				 _e_desklock_cb_personilized_auth_method, cfdata);
+      }
+      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_desklock_passwd_cb_change(cfdata, ob);
+	e_widget_entry_on_change_callback_set(ob, _e_desklock_passwd_cb_change, cfdata);
+	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));
+	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);
+     
+	cwd = (E_Widget_Check_Data*)e_widget_data_get(ob);
+	edje_object_signal_callback_add(cwd->o_check,"toggle_on", "",
+					_e_desklock_cb_show_passwd, cfdata);
+	edje_object_signal_callback_add(cwd->o_check,"toggle_off", "",
+					_e_desklock_cb_show_passwd, cfdata);
+      }
+#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
+
+      of = e_widget_framelist_add(evas, _("Automatic Locking"), 0);
+      {
+	e_widget_disabled_set(of, !ecore_x_screensaver_event_available_get());
+   
+	ob = e_widget_check_add(evas, _("Lock when the Screensaver starts"), &(cfdata->autolock));
+	e_widget_disabled_set(ob, !ecore_x_screensaver_event_available_get());
+	e_widget_framelist_object_append(of, ob);
+
+	ob = e_widget_check_add(evas, _("Set the screensaver timeout"), &(cfdata->use_timeout));
+	e_widget_disabled_set(ob, !ecore_x_screensaver_event_available_get());
+	e_widget_framelist_object_append(of, ob);
+   
+	ob = e_widget_label_add(evas, _("Time until screensaver starts"));
+	e_widget_disabled_set(ob, !ecore_x_screensaver_event_available_get());
+	e_widget_framelist_object_append(of, ob);
+	ob = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
+				 1.0, 600.0,
+				 1.0, 0, &(cfdata->timeout), NULL,
+				 200);
+	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
   }
 
   /* register callbacks for the radios in login box options
@@ -723,6 +876,33 @@
   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);
+  e_widget_disabled_set(wd->o_widget, 0);
 }
 
+#ifdef HAVE_PAM
+static void
+_e_desklock_cb_syswide_auth_method(void *data, Evas_Object *obj, const char *emission,
+				   const char *source)
+{
+  E_Widget_Entry_Data *ewd;
+  E_Widget_Check_Data *cwd;
+  E_Config_Dialog_Data *cfdata;
+
+  if (!(cfdata = data)) return;
+
+  e_widget_disabled_set(cfdata->gui.passwd_field, 1);
+  e_widget_disabled_set(cfdata->gui.show_passwd_check, 1);
+}
+
+static void
+_e_desklock_cb_personilized_auth_method(void *data, Evas_Object *obj, const char *emission,
+					const char *source)
+{
+  E_Config_Dialog_Data *cfdata;
+
+  if (!(cfdata = data)) return;
+
+  e_widget_disabled_set(cfdata->gui.passwd_field, 0);
+  e_widget_disabled_set(cfdata->gui.show_passwd_check, 0);
+}
+#endif




-------------------------------------------------------
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
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic