Enlightenment CVS committal

Author  : onefang
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_desktop


Modified Files:
        Ecore_Desktop.h ecore_desktop.c 


Log Message:
Expand FDO command arguments and allow other argument parsing again.

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/Ecore_Desktop.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- Ecore_Desktop.h     7 Sep 2006 13:16:21 -0000       1.24
+++ Ecore_Desktop.h     11 Sep 2006 21:40:17 -0000      1.25
@@ -47,6 +47,7 @@
    char               *exec;
    char               *exec_params;
    char               *icon;
+   char               *original_icon;
    char               *icon_class;
    char               *icon_path;
    char               *path;
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- ecore_desktop.c     10 Sep 2006 11:11:54 -0000      1.28
+++ ecore_desktop.c     11 Sep 2006 21:40:17 -0000      1.29
@@ -293,6 +293,8 @@
 
                       result->icon =
                          (char *)ecore_hash_get(result->group, "Icon");
+                      if (result->icon)
+                         result->original_icon = strdup(result->icon);
                       result->icon_class =
                          (char *)ecore_hash_get(result->group, 
"X-Enlightenment-IconClass");
                       value =
@@ -664,6 +666,8 @@
       free(desktop->original_lang);
    if (desktop->eap_name)
       free(desktop->eap_name);
+   if (desktop->original_icon)
+      free(desktop->original_icon);
    if (desktop->icon_class)
       free(desktop->icon_class);
    if (desktop->window_class)
@@ -710,8 +714,121 @@
 
    if (fill && (desktop->exec_params))
       {
-         /* FIXME: Handle the fdo %x replacable params.  Some should be 
stripped, some should be expanded. */
          params = strdup(desktop->exec_params);
+        if (params)
+           {
+               Ecore_DList *command;
+
+               command = ecore_dlist_new();
+               if (command)
+                  {
+                    char *p, *t, buf[PATH_MAX + 10];
+                    int len = 0;
+
+                    ecore_dlist_set_free_cb(command, free);
+                    t = params;
+                    for (p = params; *p; p++)
+                       {
+                          if (*p == '%')
+                             {
+                                *p = '\0';
+                                ecore_dlist_append(command, strdup(t));
+                                *p = '%';
+                                t = p;
+                             }
+                       }
+                    if (t < p)
+                    {
+                       ecore_dlist_append(command, strdup(t));
+                    }
+                    if (!ecore_dlist_is_empty(command))
+                       {
+                          ecore_dlist_goto_first(command);
+                          while ((p = ecore_dlist_next(command)) != NULL)
+                             {
+                                t = NULL;
+                                 /* FIXME: implement the rest of these when 
EFM can pass us files. */
+                                if (p[0] == '%')
+                                   switch (p[1])
+                                      {
+                                         case 'f' :  /* Single file name, 
multiple invokations if multiple files.  If the file is on the net, download 
first and point to temp file. */
+                                            break;
+
+                                         case 'u' :  /* Single URL, multiple 
invokations if multiple URLs. */
+                                            break;
+
+                                         case 'c' :  /* Translated Name field 
frem .desktop file. */
+                                            t = desktop->name;
+                                            break;
+
+                                         case 'k' :  /* Location of the 
.desktop file, may be a URL, or empty. */
+                                            t = desktop->original_path;
+                                            break;
+
+                                         case 'F' :  /* Multiple file names.  
If the files are on the net, download first and point to temp files. */
+                                            break;
+
+                                         case 'U' :  /* Multiple URLs. */
+                                            break;
+
+                                         case 'd' :  /* Directory of the file 
in %f. */
+                                            break;
+
+                                         case 'D' :  /* Directories of the 
files in %F. */
+                                            break;
+
+                                         case 'n' :  /* Single filename 
without path. */
+                                            break;
+
+                                         case 'N' :  /* Multiple filenames 
without paths. */
+                                            break;
+
+                                         case 'i' :  /* "--icon Icon" field 
from .desktop file, or empty. */
+                                            if (desktop->original_icon)
+                                               {
+                                                  snprintf(buf, sizeof(buf), 
"--icon %s", desktop->original_icon);
+                                                  t = buf;
+                                               }
+                                            break;
+
+                                         case 'v' :  /* Device field from 
.desktop file. */
+                                            break;
+
+                                         case '%' :  /* A '%' character. */
+                                            t = "%";
+                                            break;
+
+                                         default :
+                                            break;
+                                      }
+                                if (t)
+                                   {
+                                      len += strlen(t);
+                                      ecore_dlist_previous(command);
+                                      ecore_dlist_insert(command, strdup(t));
+                                      ecore_dlist_next(command);
+                                      ecore_dlist_next(command);
+                                   }
+                                len += strlen(p);
+                             }
+                          free(params);
+                          params = malloc(len);
+                          if (params)
+                             {
+                                params[0] = '\0';
+                                ecore_dlist_goto_first(command);
+                                while ((p = ecore_dlist_next(command)) != NULL)
+                                   {
+                                      if (p[0] == '%')
+                                        strcat(params, &p[2]);
+                                      else
+                                        strcat(params, p);
+                                   }
+                             }
+                       }
+                    ecore_list_destroy(command);
+                 }
+            }
       }
    else if (desktop->exec_params)
       params = strdup(desktop->exec_params);



-------------------------------------------------------------------------
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