Enlightenment CVS committal

Author  : atmosphere
Project : e17
Module  : apps/entrance

Dir     : e17/apps/entrance/src/client


Modified Files:
        entrance_config.c entrance_config.h entrance_session.c 
        entrance_user.c entrance_x_session.c entrance_x_session.h 
        main.c 


Log Message:
o added entrance_config_save(const char *file) 
o modularized the x session abstraction, this makes things much cleaner with
  how the config system interacts with it.
o modified entrance_config_print so it's more edbish with its output
o Entrance_User's have a default icon if none is specified
o some namespace cleanups too


===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_config.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- entrance_config.c   7 Mar 2004 12:51:59 -0000       1.22
+++ entrance_config.c   10 Mar 2004 22:53:51 -0000      1.23
@@ -1,6 +1,7 @@
 #include "entrance.h"
 #include "entrance_config.h"
 #include "entrance_user.h"
+#include "entrance_x_session.h"
 
 /**
 @file entrance_config.c
@@ -31,6 +32,14 @@
 static void
 entrance_config_populate(Entrance_Config * e, E_DB_File * db)
 {
+   Entrance_User *eu = NULL;
+   char *user = NULL;
+   char *icon = NULL;
+   char *session = NULL;
+
+   char *title = NULL;
+   Entrance_X_Session *exs;
+
    char *str;
    int i = 0, num_session = 0, num_user;
    char buf[PATH_MAX];
@@ -80,11 +89,6 @@
       e->halt = 0;
    if (e_db_int_get(db, "/entrance/user/count", &num_user))
    {
-      Entrance_User *eu = NULL;
-      char *user = NULL;
-      char *icon = NULL;
-      char *session = NULL;
-
       for (i = 0; i < num_user; i++)
       {
          snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
@@ -98,7 +102,7 @@
             if ((eu = entrance_user_new(user, icon, session)))
             {
                e->users.hash = evas_hash_add(e->users.hash, user, eu);
-               e->users.keys = evas_list_append(e->users.keys, user);
+               e->users.keys = evas_list_append(e->users.keys, eu->name);
             }
             else
             {
@@ -120,22 +124,21 @@
    /* session hash and font list */
    if (e_db_int_get(db, "/entrance/session/count", &num_session))
    {
-      char *key = NULL;
-      char *icon = NULL;
-      char *value = NULL;
-
       for (i = 0; i < num_session; i++)
       {
          snprintf(buf, PATH_MAX, "/entrance/session/%d/title", i);
-         key = e_db_str_get(db, buf);
+         title = e_db_str_get(db, buf);
          snprintf(buf, PATH_MAX, "/entrance/session/%d/session", i);
-         value = e_db_str_get(db, buf);
+         session = e_db_str_get(db, buf);
          snprintf(buf, PATH_MAX, "/entrance/session/%d/icon", i);
          icon = e_db_str_get(db, buf);
 
-         e->sessions.hash = evas_hash_add(e->sessions.hash, key, value);
-         e->sessions.icons = evas_hash_add(e->sessions.icons, key, icon);
-         e->sessions.keys = evas_list_append(e->sessions.keys, key);
+         if ((exs = entrance_x_session_new(title, icon, session)))
+         {
+            e->sessions.keys = evas_list_append(e->sessions.keys, title);
+            e->sessions.hash =
+               evas_hash_add(e->sessions.hash, exs->name, exs);
+         }
       }
    }
    /* 
@@ -220,59 +223,164 @@
 entrance_config_print(Entrance_Config * e)
 {
    int i = 0;
-   char *str = NULL;
+   char buf[PATH_MAX];
    Entrance_User *eu;
+   Entrance_X_Session *exs;
    Evas_List *l = NULL;
-   char *strings[] = { "Theme Edje %s\n",
-      "Pointer Image %s\n", "Date Format %s\n", "Time Format %s\n",
-      "Greeting Before %s\n", "Greeting After %s\n"
+   char *strings[] = { "/entrance/theme",
+      "/entrance/pointer", "/entrance/date_format", "/entrance/time_format",
+      "/entrance/greeting/before", "/entrance/greeting/after"
    };
    char *values[] = { e->theme, e->pointer, e->date.string,
       e->time.string, e->before.string, e->after.string
    };
    int ssize = sizeof(strings) / sizeof(char *);
 
-   char *intstrings[] = { "Use Evas GL %d\n", "Allow reboot %d\n",
-      "Allow Shutdown %d\n",
-      "Remember Users who login %d\n",
-      "Number of users to remember %d\n",
-      "Authentication Mode %d\n"
+   char *intstrings[] = { "/entrance/engine", "/entrance/system/reboot",
+      "/entrance/system/halt", "/entrance/users/remember",
+      "/entrance/users/remember_n", "/entrance/auth"
    };
    int intvalues[] = { e->engine, e->reboot, e->halt, e->users.remember,
       e->users.remember_n, e->auth
    };
    int intsize = sizeof(intstrings) / sizeof(int);
 
-   char *userstrings[] = { "\nUsername %s\n", "XSession %s\n",
-      "Icon file %s\n"
+   for (i = 0; i < ssize; i++)
+   {
+      printf("%s %s\n", strings[i], values[i]);
+   }
+   for (i = 0; i < intsize; i++)
+   {
+      printf("%s %d\n", intstrings[i], intvalues[i]);
+   }
+   for (i = 0, l = e->users.keys; l; l = l->next, i++)
+   {
+      if ((eu = evas_hash_find(e->users.hash, (char *) l->data)))
+      {
+         snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
+         printf("%s %s\n", buf, eu->name);
+         snprintf(buf, PATH_MAX, "/entrance/user/%d/session", i);
+         printf("%s %s\n", buf, eu->session);
+         snprintf(buf, PATH_MAX, "/entrance/user/%d/icon", i);
+         printf("%s %s\n", buf, eu->icon);
+      }
+      else
+         i--;
+   }
+   snprintf(buf, PATH_MAX, "/entrance/user/count");
+   printf("%s %d\n", buf, i);
+   for (i = 0, l = e->sessions.keys; l; l = l->next, i++)
+   {
+      if (l->data)
+      {
+         if ((exs = evas_hash_find(e->sessions.hash, (char *) l->data)))
+         {
+            snprintf(buf, PATH_MAX, "/entrance/session/%d/title", i);
+            printf("%s %s\n", buf, exs->name);
+            snprintf(buf, PATH_MAX, "/entrance/session/%d/session", i);
+            printf("%s %s\n", buf, exs->session);
+            snprintf(buf, PATH_MAX, "/entrance/session/%d/icon", i);
+            printf("%s %s\n", buf, exs->icon);
+         }
+      }
+   }
+   snprintf(buf, PATH_MAX, "/entrance/session/count");
+   printf("%s %d\n", buf, i);
+}
+
+void
+entrance_config_edb_save(Entrance_Config * e, E_DB_File * db)
+{
+   int i = 0;
+   char buf[PATH_MAX];
+   Entrance_User *eu;
+   Entrance_X_Session *exs;
+   Evas_List *l = NULL;
+   char *strings[] = { "/entrance/theme",
+      "/entrance/pointer", "/entrance/date_format", "/entrance/time_format",
+      "/entrance/greeting/before", "/entrance/greeting/after"
    };
+   char *values[] = { e->theme, e->pointer, e->date.string,
+      e->time.string, e->before.string, e->after.string
+   };
+   int ssize = sizeof(strings) / sizeof(char *);
+
+   char *intstrings[] = { "/entrance/engine", "/entrance/system/reboot",
+      "/entrance/system/halt", "/entrance/users/remember",
+      "/entrance/users/remember_n", "/entrance/auth"
+   };
+   int intvalues[] = { e->engine, e->reboot, e->halt, e->users.remember,
+      e->users.remember_n, e->auth
+   };
+   int intsize = sizeof(intstrings) / sizeof(int);
 
    for (i = 0; i < ssize; i++)
    {
-      printf(strings[i], values[i]);
+      e_db_str_set(db, strings[i], values[i]);
    }
    for (i = 0; i < intsize; i++)
    {
-      printf(intstrings[i], intvalues[i]);
+      e_db_int_set(db, intstrings[i], intvalues[i]);
    }
-   for (l = e->users.keys; l; l = l->next)
+   for (i = 0, l = e->users.keys; l; l = l->next, i++)
    {
       if ((eu = evas_hash_find(e->users.hash, (char *) l->data)))
       {
-         printf(userstrings[0], eu->name);
-         printf(userstrings[1], eu->session);
-         printf(userstrings[2], eu->icon);
-
+         snprintf(buf, PATH_MAX, "/entrance/user/%d/user", i);
+         e_db_str_set(db, buf, eu->name);
+         snprintf(buf, PATH_MAX, "/entrance/user/%d/session", i);
+         e_db_str_set(db, buf, eu->session);
+         snprintf(buf, PATH_MAX, "/entrance/user/%d/icon", i);
+         e_db_str_set(db, buf, eu->icon);
       }
+      else
+         i--;
    }
-   for (l = e->sessions.keys; l; l = l->next)
+   snprintf(buf, PATH_MAX, "/entrance/user/count");
+   e_db_int_set(db, buf, i);
+   for (i = 0, l = e->sessions.keys; l; l = l->next, i++)
    {
-      printf("\n%s\n", (char *) l->data);
-      if ((str = evas_hash_find(e->sessions.icons, (char *) l->data)))
-         printf("Session Icon File: %s\n", str);
-      if ((str = evas_hash_find(e->sessions.hash, (char *) l->data)))
-         printf("XSession exec string %s\n", str);
+      if (l->data)
+      {
+         if ((exs = evas_hash_find(e->sessions.hash, (char *) l->data)))
+         {
+            snprintf(buf, PATH_MAX, "/entrance/session/%d/title", i);
+            e_db_str_set(db, buf, exs->name);
+            snprintf(buf, PATH_MAX, "/entrance/session/%d/session", i);
+            e_db_str_set(db, buf, exs->session);
+            snprintf(buf, PATH_MAX, "/entrance/session/%d/icon", i);
+            e_db_str_set(db, buf, exs->icon);
+         }
+      }
+   }
+   snprintf(buf, PATH_MAX, "/entrance/session/count");
+   e_db_int_set(db, buf, i);
+}
+
+int
+entrance_config_save(Entrance_Config * e, const char *file)
+{
+   if (file)
+   {
+      char buf[PATH_MAX];
+      E_DB_File *db = NULL;
+
+      snprintf(buf, PATH_MAX, "%s.tmp.db", file);
+      if ((db = e_db_open(buf)))
+      {
+         entrance_config_edb_save(e, db);
+         e_db_close(db);
+         e_db_flush();
+         return (rename(buf, file));
+      }
+#if 0
+      else
+      {
+         entrance_config_print(e);
+      }
+#endif
    }
+   return (1);
 }
 
 /**
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_config.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- entrance_config.h   7 Mar 2004 03:51:33 -0000       1.13
+++ entrance_config.h   10 Mar 2004 22:53:51 -0000      1.14
@@ -99,7 +99,6 @@
    struct
    {
       Evas_Hash *hash;
-      Evas_Hash *icons;
       Evas_List *keys;
    } sessions;
 };
@@ -111,5 +110,6 @@
 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);
+int entrance_config_save(Entrance_Config * e, const char *file);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_session.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -3 -r1.40 -r1.41
--- entrance_session.c  7 Mar 2004 12:48:17 -0000       1.40
+++ entrance_session.c  10 Mar 2004 22:53:51 -0000      1.41
@@ -27,8 +27,6 @@
 static void entrance_session_xsession_load(Entrance_Session * e,
                                            const char *key);
 
-Evas_Object *entrance_session_xsession_edje_load(Entrance_Session * e,
-                                                 const char *key);
 /**
  * entrance_session_new: allocate a new  Entrance_Session
  * @param config - parse this config file instead of the normal system one
@@ -368,12 +366,15 @@
 {
    if (e && e->edje)
    {
-      char *str = NULL;
+      char buf[PATH_MAX];
+      Entrance_X_Session *exs = NULL;
       Evas_Object *o = NULL, *old_o = NULL;
 
-      if ((o = entrance_session_xsession_edje_load(e, key)))
+      if ((exs = evas_hash_find(e->config->sessions.hash, key)))
       {
-         if ((str = evas_hash_find(e->config->sessions.hash, key)))
+         snprintf(buf, PATH_MAX, PACKAGE_DATA_DIR "/themes/%s",
+                  e->config->theme);
+         if ((o = entrance_x_session_edje_get(exs, e->edje, buf)))
          {
             if (e->session)
                free(e->session);
@@ -448,7 +449,9 @@
 void
 entrance_session_list_add(Entrance_Session * e)
 {
+   char buf[PATH_MAX];
    Evas_List *l = NULL;
+   Entrance_X_Session *exs = NULL;
    const char *key = NULL;
    Evas_Coord w, h;
    Evas_Object *edje = NULL;
@@ -476,12 +479,17 @@
          e_container_direction_set(container, 1);
       }
 
+      snprintf(buf, PATH_MAX, PACKAGE_DATA_DIR "/themes/%s",
+               e->config->theme);
       for (l = e->config->sessions.keys; l; l = l->next)
       {
          key = (const char *) l->data;
-         if ((edje = entrance_session_xsession_edje_load(e, key)))
+         if ((exs = evas_hash_find(e->config->sessions.hash, key)))
          {
-            e_container_element_append(container, edje);
+            if ((edje = entrance_x_session_edje_get(exs, e->edje, buf)))
+            {
+               e_container_element_append(container, edje);
+            }
          }
       }
       edje_object_part_swallow(e->edje, "EntranceSessionList", container);
@@ -561,6 +569,7 @@
    return (result);
 }
 
+#if 0
 /**
  * given the key, try loading an instance
  * of the "Session" group from the current theme.  printf on failure. :(
@@ -587,7 +596,7 @@
    icon = (char *) evas_hash_find(e->config->sessions.icons, key);
    return (entrance_x_session_xsession_load(e->edje, buf, icon, key));
 }
-
+#endif
 
 /**
  * _entrance_session_user_list_fix : update the user's list with the current
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_user.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- entrance_user.c     8 Mar 2004 16:59:00 -0000       1.7
+++ entrance_user.c     10 Mar 2004 22:53:51 -0000      1.8
@@ -39,7 +39,10 @@
    {
       memset(e, 0, sizeof(Entrance_User));
       e->name = user;
-      e->icon = icon;
+      if (icon)
+         e->icon = icon;
+      else
+         e->icon = strdup("default.eet");
       e->session = session;
    }
    return (e);
@@ -128,7 +131,7 @@
       }
       else
       {
-         fprintf(stderr, "Failed on: %s(%s)\n", e->name, e->icon);
+         fprintf(stderr, "Failed on: %s(%s)\n", e->name, file);
          evas_object_del(o);
          o = NULL;
       }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_x_session.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- entrance_x_session.c        8 Mar 2004 16:59:00 -0000       1.3
+++ entrance_x_session.c        10 Mar 2004 22:53:51 -0000      1.4
@@ -8,6 +8,40 @@
 extern void session_item_unselected_cb(void *data, Evas_Object * o,
                                        const char *emission,
                                        const char *source);
+Entrance_X_Session *
+entrance_x_session_new(char *name, char *icon, char *session)
+{
+   Entrance_X_Session *e = NULL;
+
+   if ((e = malloc(sizeof(Entrance_X_Session))))
+   {
+      memset(e, 0, sizeof(Entrance_X_Session));
+      e->name = name;
+      if (icon)
+         e->icon = icon;
+      else
+         e->icon = strdup("default.png");
+      e->session = session;
+   }
+   return (e);
+}
+
+void
+entrance_x_session_free(Entrance_X_Session * e)
+{
+   if (e)
+   {
+      if (e->name)
+         free(e->name);
+      if (e->icon)
+         free(e->icon);
+      if (e->session)
+         free(e->session);
+      free(e);
+   }
+
+}
+
 /**
  * given the filename, create a new evas object(edje or image) with the
  * contents of file.  file can either bea valid edje eet or anything your
@@ -17,7 +51,7 @@
  * @param o - the entrance session you're working with
  * @param file - the file in $pkgdatadir/images/sessions/ we want to load
  */
-Evas_Object *
+static Evas_Object *
 entrance_x_session_icon_load(Evas_Object * o, const char *file)
 {
    Evas_Object *result = NULL;
@@ -53,15 +87,14 @@
 }
 
 Evas_Object *
-entrance_x_session_xsession_load(Evas_Object * o, const char *themefile,
-                                 const char *icon, const char *name)
+entrance_x_session_edje_get(Entrance_X_Session * e, Evas_Object * o,
+                            const char *themefile)
 {
-   char buf[PATH_MAX];
+   Evas_Coord w, h;
    Evas_Object *oo = NULL;
    Evas_Object *edje = NULL;
-   Evas_Coord w, h;
 
-   if (!o || !themefile || !icon || !name)
+   if (!o || !themefile || !e)
       return (NULL);
 
    edje = edje_object_add(evas_object_evas_get(o));
@@ -77,34 +110,26 @@
 
       if (edje_object_part_exists(edje, "EntranceSessionIcon"))
       {
-         if ((oo = entrance_x_session_icon_load(o, icon)))
+         if ((oo = entrance_x_session_icon_load(o, e->icon)))
          {
-            if (!strcmp(evas_object_type_get(oo), "image"))
-            {
-               Evas_Coord w, h;
-
-               edje_object_part_geometry_get(edje, "EntranceSessionIcon",
-                                             NULL, NULL, &w, &h);
-               evas_object_image_fill_set(oo, 0.0, 0.0, w, h);
-            }
             edje_object_part_swallow(edje, "EntranceSessionIcon", oo);
          }
       }
       if (edje_object_part_exists(edje, "EntranceSessionTitle"))
       {
-         edje_object_part_text_set(edje, "EntranceSessionTitle", name);
+         edje_object_part_text_set(edje, "EntranceSessionTitle", e->name);
       }
       edje_object_signal_callback_add(edje, "SessionSelected", "",
                                       session_item_selected_cb,
-                                      (char *) name);
+                                      (Entrance_X_Session *) e);
       edje_object_signal_callback_add(edje, "SessionUnSelected", "",
                                       session_item_selected_cb,
-                                      (char *) name);
+                                      (Entrance_X_Session *) e);
       evas_object_show(edje);
    }
    else
    {
-      fprintf(stderr, "Failed on: %s\n", name);
+      fprintf(stderr, "Failed on: %s\n", themefile);
       evas_object_del(edje);
       edje = NULL;
    }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_x_session.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- entrance_x_session.h        7 Mar 2004 12:48:17 -0000       1.2
+++ entrance_x_session.h        10 Mar 2004 22:53:51 -0000      1.3
@@ -1,14 +1,30 @@
 #ifndef ENTRANCE_X_SESSION_H
 #define ENTRANCE_X_SESSION_H
 /**
- * @file entrance_user.h
+ * @file entrance_x_session.h
  * @brief Struct Definitions and shared function declarations
  */
 #include <Evas.h>
 
-Evas_Object *entrance_x_session_xsession_load(Evas_Object * o,
-                                              const char *themefile,
-                                              const char *icon,
-                                              const char *name);
+typedef struct _Entrance_X_Session Entrance_X_Session;
+
+/**
+ * @brief This contains all of the information we keep about X Sessions
+ */
+struct _Entrance_X_Session
+{
+   char *name;
+   char *icon;
+   char *session;
+   Evas_Object *edje;
+};
+
+Entrance_X_Session *entrance_x_session_new(char *name, char *icon,
+                                           char *session);
+void entrance_x_session_free(Entrance_X_Session * e);
+
+Evas_Object *entrance_x_session_edje_get(Entrance_X_Session * e,
+                                         Evas_Object * o,
+                                         const char *themefile);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/main.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- main.c      8 Mar 2004 18:37:18 -0000       1.41
+++ main.c      10 Mar 2004 22:53:52 -0000      1.42
@@ -12,6 +12,7 @@
 #include <Esmart/container.h>
 #include "entrance.h"
 #include "entrance_session.h"
+#include "entrance_x_session.h"
 #include "EvasTextEntry.h"
 
 #define WINW 800
@@ -313,7 +314,9 @@
 {
    if (session && data)
    {
-      entrance_session_xsession_set(session, (char *) data);
+      Entrance_X_Session *exs = (Entrance_X_Session *) data;
+
+      entrance_session_xsession_set(session, exs->name);
    }
 }
 




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to