Enlightenment CVS committal

Author  : onefang
Project : e17
Module  : apps/entrance

Dir     : e17/apps/entrance/src/client


Modified Files:
        entrance_config.c 


Log Message:
Search the FDO paths for xsession files.

===================================================================
RCS file: /cvs/e/e17/apps/entrance/src/client/entrance_config.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -3 -r1.35 -r1.36
--- entrance_config.c   29 Aug 2006 01:24:23 -0000      1.35
+++ entrance_config.c   29 Aug 2006 17:28:03 -0000      1.36
@@ -10,7 +10,15 @@
 
 #include "../config.h"
 
+struct _Entrance_Config_And_Path
+{
+   Entrance_Config *e;
+   const char      *path;
+};
+
+
 static void _cb_xsessions_foreach(void *list_data, void *data);
+static void _cb_desktop_xsessions_foreach(void *list_data, void *data);
 
 /**
 @file entrance_config.c
@@ -88,6 +96,7 @@
 
    int i, num_session, num_user;
    char buf[PATH_MAX];
+   struct _Entrance_Config_And_Path ep;
 
    if (!e) return;
 
@@ -144,11 +153,15 @@
       }
    }
 
-
+   /* Search the local session directory first. */
+   ep.e = e;
+   ep.path = ENTRANCE_SESSIONS_DIR;
    Ecore_List *xsessions = ecore_file_ls(ENTRANCE_SESSIONS_DIR);
    if(xsessions)
-          ecore_list_for_each(xsessions, _cb_xsessions_foreach, e);
-
+          ecore_list_for_each(xsessions, _cb_xsessions_foreach, &ep);
+   /* Search all the relevant FDO paths second. */
+   if(ecore_desktop_paths_xsessions)
+          ecore_list_for_each(ecore_desktop_paths_xsessions, 
_cb_desktop_xsessions_foreach, &ep);
 
    num_session = ecore_config_int_get("/entrance/session/count");
    for (i = 0; i < num_session; i++)
@@ -461,33 +474,58 @@
 static void 
 _cb_xsessions_foreach(void *list_data, void *data)
 {
-       const char* filename = list_data;
-       if(!filename)
-               return;
-
-       Entrance_Config *e = data;
-       if(!e)
-               return;
-
-       char path[PATH_MAX];
-       snprintf(path, PATH_MAX, ENTRANCE_SESSIONS_DIR "/%s", filename);
-
-       Ecore_Desktop *ed = ecore_desktop_get(path, "en_US");
-       if(!ed)
-               return;
+   const char* filename = list_data;
+   struct _Entrance_Config_And_Path *ep = data;
+   Entrance_Config *e;
+
+   if(!filename)
+      return;
+
+   e = ep->e;
+   if(!e)
+      return;
 
-       Entrance_X_Session *exs = NULL;
+   char path[PATH_MAX];
+   snprintf(path, PATH_MAX, "%s/%s", ep->path, filename);
+
+   Ecore_Desktop *ed = ecore_desktop_get(path, "en_US");
+   if(!ed)
+      return;
+
+   Entrance_X_Session *exs = NULL;
 
     if ((exs = entrance_x_session_new(ed->name, ed->icon, ed->exec)))
     {
-       e->sessions.keys = evas_list_append(e->sessions.keys, ed->name);
-       e->sessions.hash =
-          evas_hash_add(e->sessions.hash, exs->name, exs);
+       /* Sessions found earlier in the FDO search sequence override those 
found later. */
+       if (evas_hash_find(e->sessions.hash, exs->name) == NULL)
+          {
+             e->sessions.keys = evas_list_append(e->sessions.keys, ed->name);
+             e->sessions.hash = evas_hash_add(e->sessions.hash, exs->name, 
exs);
+         }
+       else
+          {
+             entrance_x_session_free(exs);
+         }
     }
 
        ecore_desktop_destroy(ed);
 }
 
+static void 
+_cb_desktop_xsessions_foreach(void *list_data, void *data)
+{
+   const char* path = list_data;
+   struct _Entrance_Config_And_Path *ep = data;
+   Ecore_List *xsessions;
+
+   if(!path)
+      return;
+
+   ep->path = path;
+   xsessions = ecore_file_ls(path);
+   if(xsessions)
+      ecore_list_for_each(xsessions, _cb_xsessions_foreach, ep);
+}
 
 
 #if 0



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to