Enlightenment CVS committal

Author  : atmosphere
Project : e17
Module  : apps/entrance

Dir     : e17/apps/entrance/src/client


Modified Files:
        Makefile.am entrance_config.c entrance_config.h 
        entrance_session.c entrance_session.h main.c 


Log Message:
incoming! ignore this for now, it's incoming user code.  It works, just needs a little 
more tidying up, hopefully I'll get to it all this afternoon :)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/Makefile.am,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- Makefile.am 3 Jan 2004 04:54:57 -0000       1.6
+++ Makefile.am 3 Mar 2004 15:08:54 -0000       1.7
@@ -9,6 +9,7 @@
        entrance_auth.c entrance_auth.h \
        entrance_session.c entrance_session.h \
        entrance_config.c entrance_config.h \
+       entrance_user.c entrance_user.h \
        EvasTextEntry.c EvasTextEntry.h \
        util.c util.h \
        main.c 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_config.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- entrance_config.c   2 Jan 2004 16:35:15 -0000       1.14
+++ entrance_config.c   3 Mar 2004 15:09:03 -0000       1.15
@@ -1,5 +1,7 @@
 #include "entrance.h"
 #include "entrance_config.h"
+#include "entrance_user.h"
+
 /**
 @file entrance_config.c
 @brief System-wide configuration options for various settings in Entrance
@@ -72,24 +74,37 @@
       e->time.string = strdup("%l:%M:%S %p");
    if (e_db_int_get(db, "/entrance/user/count", &num_user))
    {
+      Entrance_User *eu = NULL;
       char *user = NULL;
-      char *edje_file = NULL;
+      char *icon = NULL;
+      char *session = NULL;
 
       for (i = 0; i < num_user; i++)
       {
          snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
          if ((user = e_db_str_get(db, buf)))
          {
-            snprintf(buf, PATH_MAX, "/entrance/user/%d/edje", i);
-            if ((edje_file = e_db_str_get(db, buf)))
+            snprintf(buf, PATH_MAX, "/entrance/user/%d/icon", i);
+            icon = e_db_str_get(db, buf);
+            snprintf(buf, PATH_MAX, "/entrance/user/%d/session", i);
+            session = e_db_str_get(db, buf);
+
+            if ((eu = entrance_user_new(user, icon, session)))
             {
-               e->users.hash = evas_hash_add(e->users.hash, user, edje_file);
-               e->users.keys = evas_list_append(e->users.keys, user);
+               e->users.hash = evas_hash_add(e->users.hash, user, eu);
+               e->users.keys = evas_list_append(e->users.keys, eu);
             }
             else
+            {
                free(user);
+               if (icon)
+                  free(icon);
+               if (session)
+                  free(session);
+            }
          }
       }
+      /* FIXME syslog(LOG_NORMAL, "Loaded %d users", num_user) */
    }
    else
    {
@@ -236,6 +251,55 @@
    }
 }
 
+/**
+ *
+ */
+void
+entrance_config_user_list_write(Entrance_Config * e)
+{
+   int i = 0;
+   Evas_List *l = NULL;
+   E_DB_File *db = NULL;
+   Entrance_User *eu = NULL;
+   char file[PATH_MAX], buf[PATH_MAX];
+
+   snprintf(file, PATH_MAX, "%s/entrance_config.db", PACKAGE_CFG_DIR);
+   if ((db = e_db_open(file)))
+   {
+      for (l = e->users.keys; l; l = l->next, i++)
+      {
+         if ((eu = (Entrance_User *) l->data))
+         {
+            if (eu->name)
+            {
+               snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
+               e_db_str_set(db, buf, eu->name);
+            }
+            if (eu->session)
+            {
+               snprintf(buf, PATH_MAX, "/entrance/user/%d/session", i);
+               e_db_str_set(db, buf, eu->session);
+            }
+            if (eu->icon)
+            {
+               snprintf(buf, PATH_MAX, "/entrance/user/%d/icon", i);
+               e_db_str_set(db, buf, eu->icon);
+            }
+         }
+         else
+            i--;
+      }
+      snprintf(buf, PATH_MAX, "/entrance/user/count");
+      e_db_int_set(db, buf, i);
+      e_db_close(db);
+      e_db_flush();
+   }
+   else
+   {
+      fprintf(stderr, "Unable to open %s, sure you're root?", file);
+   }
+}
+
 #if 0
 int
 main(int argc, char *argv[])
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_config.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- entrance_config.h   31 Oct 2003 04:39:52 -0000      1.9
+++ entrance_config.h   3 Mar 2004 15:09:03 -0000       1.10
@@ -94,5 +94,6 @@
 void entrance_config_print(Entrance_Config * e);
 void entrance_config_free(Entrance_Config * e);
 void entrance_config_prepend_recent_user(Entrance_Config * e, char *str);
+void entrance_config_user_list_write(Entrance_Config * e);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_session.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -3 -r1.31 -r1.32
--- entrance_session.c  16 Feb 2004 01:04:06 -0000      1.31
+++ entrance_session.c  3 Mar 2004 15:09:03 -0000       1.32
@@ -5,6 +5,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
+#include "entrance_user.h"
 
 /**
 @file entrance_session.c
@@ -23,8 +24,9 @@
                                                 const char *file);
 static Evas_Object *_entrance_session_load_session(Entrance_Session * e,
                                                    const char *key);
-static Evas_Object *_entrance_session_user_load(Entrance_Session * e,
-                                                const char *key);
+static void _entrance_session_user_list_fix(Entrance_Session * e);
+static void entrance_session_xsession_load(Entrance_Session * e,
+                                           const char *key);
 
 extern int _entrance_test_en;
 
@@ -111,14 +113,6 @@
    }
 }
 
-#if 0
-static void
-init_user_edje(Entrance_Session e, char *user)
-{
-   fprintf(stderr, "I should load /home/%s/.entrance.eet\n", user);
-}
-#endif
-
 /**
  * entrance_session_run: Be a login dm
  * @e - the Entrance_Session to be run
@@ -166,35 +160,32 @@
  * entrance_session_user_set: forget what we know about the current user
  */
 void
-entrance_session_user_set(Entrance_Session * e, char *key)
+entrance_session_user_set(Entrance_Session * e, Entrance_User * eu)
 {
-   int result = 0;
-   const char *file = NULL;
-   char *pass = NULL;
-   char *session = NULL;
    Evas_Object *obj = NULL;
 
-   if (e && key)
+   if (e && eu)
    {
       if ((obj = edje_object_part_swallow_get(e->edje, "EntranceFace")))
       {
          edje_object_part_unswallow(e->edje, obj);
          evas_object_del(obj);
       }
-      if ((obj = _entrance_session_user_load(e, key)))
+      if ((obj = entrance_user_edje_get(eu, e->edje)))
       {
-         if (!entrance_auth_set_user(e->auth, key))
+         if (!entrance_auth_set_user(e->auth, eu->name))
          {
-            edje_object_file_get(obj, &file, NULL);
-            if ((session = edje_file_data_get(file, "session")))
+            if ((eu->session) && (strlen(eu->session) > 0))
             {
-               if ((strlen(session) > 0) && (strlen(e->session) == 0))
-               {
-                  if (e->session)
-                     free(e->session);
-                  e->session = strdup(session);
-               }
+               if (e->session)
+                  free(e->session);
+               e->session = strdup(eu->session);
+               entrance_session_xsession_load(e, eu->session);
+
+               /* FIXME: Should this be optional ? */
+
             }
+#if 0
             if ((pass = edje_file_data_get(file, "password")))
             {
                entrance_auth_set_pass(e->auth, pass);
@@ -218,6 +209,7 @@
             }
             else
             {
+#endif
                if (edje_object_part_exists(e->edje, "EntranceFace"))
                {
                   edje_object_part_swallow(e->edje, "EntranceFace", obj);
@@ -225,7 +217,9 @@
                edje_object_signal_emit(e->edje, "In", "EntrancePassEntry");
                edje_object_signal_emit(e->edje, "EntranceUserAuth", "");
                edje_object_signal_emit(e->edje, "UserSelected", "");
+#if 0
             }
+#endif
          }
          else
          {
@@ -236,6 +230,21 @@
       }
    }
 }
+void
+entrance_session_user_session_default_set(Entrance_Session * e)
+{
+   if (e && e->config && e->auth && e->auth->user && e->session)
+   {
+      Entrance_User *eu = NULL;
+
+      if ((eu = evas_hash_find(e->config->users.hash, e->auth->user)))
+      {
+         if (eu->session)
+            free(eu->session);
+         eu->session = strdup(e->session);
+      }
+   }
+}
 
 void
 entrance_session_start_user_session(Entrance_Session * e)
@@ -270,8 +279,8 @@
    syslog(LOG_CRIT, "Executing %s", buf);
 
    ecore_evas_free(e->ee);
-   ecore_evas_shutdown();
    e->ee = NULL;
+   ecore_evas_shutdown();
    ecore_x_sync();
 
    syslog(LOG_NOTICE, "Starting session for user \"%s\".", e->auth->user);
@@ -309,6 +318,7 @@
      default:
         break;
    }
+   _entrance_session_user_list_fix(e);
    /* clear users's password out of memory */
    entrance_auth_clear_pass(e->auth);
    /* this bypasses a race condition where entrance loses its x connection */
@@ -326,20 +336,26 @@
 {
    if (e && e->edje)
    {
+      char *str = NULL;
       Evas_Object *o = NULL, *old_o = NULL;
 
       if ((o = _entrance_session_load_session(e, key)))
       {
-         if (e->session)
-            free(e->session);
-         e->session = strdup(key);
-         old_o = edje_object_part_swallow_get(e->edje, "EntranceSession");
-         if (old_o)
+         if ((str = evas_hash_find(e->config->sessions.hash, key)))
          {
-            edje_object_part_unswallow(e->edje, old_o);
-            evas_object_del(old_o);
+            if (e->session)
+               free(e->session);
+            e->session = strdup(key);
+
+            old_o = edje_object_part_swallow_get(e->edje, "EntranceSession");
+            if (old_o)
+            {
+               edje_object_part_unswallow(e->edje, old_o);
+               evas_object_del(old_o);
+            }
+            edje_object_part_swallow(e->edje, "EntranceSession", o);
+            edje_object_signal_emit(e->edje, "SessionDefaultChanged", "");
          }
-         edje_object_part_swallow(e->edje, "EntranceSession", o);
       }
    }
 }
@@ -356,7 +372,7 @@
    if ((str = evas_hash_find(e->config->sessions.hash, key)))
    {
       snprintf(buf, PATH_MAX, "%s", key);
-      if (strcmp(key, e->session))
+      if (strcmp(str, e->session))
       {
          entrance_session_xsession_load(e, key);
       }
@@ -364,7 +380,7 @@
    }
    else
    {
-      fprintf(stderr, "Unable to find %s\n", key);
+      fprintf(stderr, "Unable to find session %s\n", key);
    }
 }
 
@@ -423,7 +439,7 @@
 entrance_session_user_list_add(Entrance_Session * e)
 {
    Evas_Coord w, h;
-   char *key = NULL;
+   Entrance_User *key = NULL;
    Evas_List *l = NULL;
    Evas_Object *container = NULL, *edje;
 
@@ -448,8 +464,8 @@
       }
       for (l = e->config->users.keys; l; l = l->next)
       {
-         key = (char *) l->data;
-         if ((edje = _entrance_session_user_load(e, key)))
+         key = (Entrance_User *) l->data;
+         if ((edje = entrance_user_edje_get(key, e->edje)))
          {
             e_container_element_append(container, edje);
          }
@@ -474,63 +490,7 @@
    }
    return (result);
 }
-static Evas_Object *
-_entrance_session_user_load(Entrance_Session * e, const char *key)
-{
-   int result = 0;
-   char *icon = NULL;
-   char buf[PATH_MAX];
-   Evas_Object *o = NULL;
-   Evas_Object *edje = NULL;
 
-   if (!e || !e->edje || !key)
-      return (NULL);
-
-   if ((icon = evas_hash_find(e->config->users.hash, key)))
-   {
-      edje = edje_object_add(evas_object_evas_get(e->edje));
-      if (icon[0] == '/')       /* absolute path */
-         snprintf(buf, PATH_MAX, "%s", icon);
-      else
-         snprintf(buf, PATH_MAX, "%s/users/%s", PACKAGE_DATA_DIR, icon);
-      if ((result = edje_object_file_set(edje, buf, "User")) > 0)
-      {
-         Evas_Coord w = 48, h = 48;
-
-         /* edje_object_size_min_get(edje, &w, &h); */
-         evas_object_move(edje, -w, -h);
-         evas_object_resize(edje, w, h);
-         evas_object_layer_set(edje, 0);
-
-         if (edje_object_part_exists(edje, "EntranceUser"))
-         {
-            edje_object_part_text_set(edje, "EntranceUser", key);
-            evas_object_show(edje);
-            edje_object_signal_callback_add(edje, "UserSelected", "",
-                                            user_selected_cb, (char *) key);
-            edje_object_signal_callback_add(edje, "UserUnSelected", "",
-                                            user_unselected_cb, (char *) key);
-         }
-         else
-         {
-            if (o)
-               evas_object_del(o);
-            if (edje)
-               evas_object_del(edje);
-            edje = NULL;
-         }
-      }
-      else
-      {
-         fprintf(stderr, "Failed on: %s(%d)\n", key, result);
-         evas_object_del(edje);
-         evas_object_del(o);
-         edje = NULL;
-      }
-   }
-   return (edje);
-
-}
 static Evas_Object *
 _entrance_session_icon_load(Evas_Object * o, const char *file)
 {
@@ -542,7 +502,7 @@
 
    result = edje_object_add(evas_object_evas_get(o));
    snprintf(buf, PATH_MAX, "%s/images/sessions/%s", PACKAGE_DATA_DIR, file);
-   if (!edje_object_file_set(result, buf, "Icon") > 0)
+   if (!edje_object_file_set(result, buf, "Icon"))
    {
       evas_object_del(result);
       result = evas_object_image_add(evas_object_evas_get(o));
@@ -599,16 +559,18 @@
       if (edje_object_part_exists(edje, "EntranceSessionIcon"))
       {
          icon = (char *) evas_hash_find(e->config->sessions.icons, key);
-         o = _entrance_session_icon_load(e->edje, icon);
-         if (!strcmp(evas_object_type_get(o), "image"))
+         if ((o = _entrance_session_icon_load(e->edje, icon)))
          {
-            Evas_Coord w, h;
+            if (!strcmp(evas_object_type_get(o), "image"))
+            {
+               Evas_Coord w, h;
 
-            edje_object_part_geometry_get(edje, "EntranceSessionIcon", NULL,
-                                          NULL, &w, &h);
-            evas_object_image_fill_set(o, 0.0, 0.0, w, h);
+               edje_object_part_geometry_get(edje, "EntranceSessionIcon",
+                                             NULL, NULL, &w, &h);
+               evas_object_image_fill_set(o, 0.0, 0.0, w, h);
+            }
+            edje_object_part_swallow(edje, "EntranceSessionIcon", o);
          }
-         edje_object_part_swallow(edje, "EntranceSessionIcon", o);
       }
       if (edje_object_part_exists(edje, "EntranceSessionTitle"))
       {
@@ -627,3 +589,36 @@
    }
    return (edje);
 }
+
+static void
+_entrance_session_user_list_fix(Entrance_Session * e)
+{
+   char buf[PATH_MAX];
+   Evas_List *l = NULL;
+   Entrance_User *eu = NULL;
+
+   if (!e)
+      return;
+
+   if (e->auth && e->auth->user && e->config)
+   {
+      for (l = e->config->users.keys; l; l = l->next)
+      {
+         if (!strcmp(e->auth->user, ((Entrance_User *) l->data)->name))
+         {
+            if ((eu = evas_hash_find(e->config->users.hash, e->auth->user)))
+            {
+               e->config->users.keys =
+                  evas_list_prepend(evas_list_remove
+                                    (e->config->users.keys, eu), eu);
+               entrance_config_user_list_write(e->config);
+               return;
+            }
+         }
+      }
+      snprintf(buf, PATH_MAX, "default.eet");
+      eu = entrance_user_new(e->auth->user, buf, e->session);
+      e->config->users.keys = evas_list_prepend(e->config->users.keys, eu);
+      entrance_config_user_list_write(e->config);
+   }
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_session.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- entrance_session.h  16 Feb 2004 01:04:06 -0000      1.12
+++ entrance_session.h  3 Mar 2004 15:09:03 -0000       1.13
@@ -14,6 +14,7 @@
 
 #include "entrance_auth.h"
 #include "entrance_config.h"
+#include "entrance_user.h"
 
 struct _Entrance_Session
 {
@@ -34,7 +35,8 @@
 void entrance_session_run(Entrance_Session * e);
 int entrance_session_auth_user(Entrance_Session * e);
 void entrance_session_user_reset(Entrance_Session * e);
-void entrance_session_user_set(Entrance_Session * e, char *user);
+void entrance_session_user_set(Entrance_Session * e, Entrance_User * user);
+void entrance_session_user_session_default_set(Entrance_Session * e);
 void entrance_session_start_user_session(Entrance_Session * e);
 void entrance_session_xsession_set(Entrance_Session * e,
                                    const char *xsession);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/main.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- main.c      16 Feb 2004 01:04:06 -0000      1.33
+++ main.c      3 Mar 2004 15:09:03 -0000       1.34
@@ -326,7 +326,7 @@
 {
    if (session && data)
    {
-      entrance_session_user_set(session, (char *) data);
+      entrance_session_user_set(session, (Entrance_User *) data);
    }
 }
 
@@ -431,7 +431,17 @@
       }
    }
 }
+static void
+_session_set(void *data, Evas_Object * o, const char *emission,
+             const char *source)
+{
+   Entrance_Session *e = NULL;
 
+   if ((e = (Entrance_Session *) data))
+   {
+      entrance_session_user_session_default_set(e);
+   }
+}
 static void
 entrance_help(char **argv)
 {
@@ -439,12 +449,10 @@
    printf("Usage: %s [OPTION]...\n\n", argv[0]);
    printf
       
("---------------------------------------------------------------------------\n");
-   printf
-      ("  -c, --config=CONFIG          Specify a custom config file\n");
+   printf("  -c, --config=CONFIG          Specify a custom config file\n");
    printf
       ("  -d, --display=DISPLAY        Specify which display Entrance should use\n");
-   printf
-      ("  -h, --help                   Display this help message\n");
+   printf("  -h, --help                   Display this help message\n");
    printf
       ("  -g, --geometry=WIDTHxHEIGHT  Specify the size of the Entrance window.\n");
    printf
@@ -455,8 +463,7 @@
       ("                               either the name of an installed theme, or 
an\n");
    printf
       ("                               arbitrary path to an eet file (use ./ for\n");
-   printf
-      ("                               the current directory).\n");
+   printf("                               the current directory).\n");
    printf
       ("  -T, --test                   Enable testing mode. This will cause xterm\n");
    printf
@@ -471,8 +478,7 @@
       ("Note: To automatically launch an X server that will be managed, please 
use\n");
    printf
       ("      entranced instead of entrance. Entrance requires an existing X 
server\n");
-   printf
-      ("      to run. Run entranced --help for more information.\n\n");
+   printf("      to run. Run entranced --help for more information.\n\n");
    exit(0);
 }
 
@@ -756,6 +762,8 @@
                                       reboot_cb, e);
       edje_object_signal_callback_add(edje, "EntranceSystemHalt", "",
                                       shutdown_cb, e);
+      edje_object_signal_callback_add(edje, "SessionDefaultSet", "",
+                                      _session_set, session);
       /* 
        * It's useful to delay showing of your edje till all your
        * callbacks have been added, otherwise show might not trigger all
@@ -778,8 +786,8 @@
 
       if (session->authed)
          entrance_session_start_user_session(session);
-
-      ecore_evas_shutdown();
+      else
+         ecore_evas_shutdown();
       entrance_session_free(session);
       edje_shutdown();
       ecore_x_shutdown();




-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to