Enlightenment CVS committal

Author  : onefang
Project : e17
Module  : libs/ecore

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


Modified Files:
        ecore_desktop_menu.c ecore_desktop_paths.c 


Log Message:
*Implement MergeFile type=parent.

*Workaround for some strangeness I found in some menu files.

*Config path was broken, fixed now.

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -3 -r1.29 -r1.30
--- ecore_desktop_menu.c        14 Oct 2006 04:14:28 -0000      1.29
+++ ecore_desktop_menu.c        9 Nov 2006 13:35:21 -0000       1.30
@@ -129,11 +129,17 @@
                                             NULL);
    if (!menu_file)
      {
-       /* Try various quirks of various systems. */
+       /* Try various quirks of various systems and other wms. */
        menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus,
+                                                 "kde-applications.menu", -1, 
NULL,
+                                                 NULL);
+        if (!menu_file)
+          {
+            menu_file = 
ecore_desktop_paths_file_find(ecore_desktop_paths_menus,
                                                  "debian-menu.menu", -1, NULL,
                                                  NULL);
-       /* FIXME: If all else fails, run debians funky menu generator shit. */
+            /* FIXME: If all else fails, run debians funky menu generator 
shit. */
+         }
      }
 
    if (menu_file)
@@ -240,6 +246,9 @@
    data.path = ecore_file_get_dir(file);
    if ((level == 0) && (merge_stack == NULL))
       merge_stack = ecore_desktop_tree_new(NULL);
+#ifdef DEBUG
+printf("MENU FILE %d - %s\n", level, file);
+#endif
    menu_xml = ecore_desktop_xmlame_get(file);
    if ((data.stack) && (data.base) && (data.path) && (merge_stack)
        && (menu_xml))
@@ -1225,12 +1234,15 @@
             if (path_type)
               {
                  if (string[0] == '/')
-                    sprintf(merge_path, "%s", string);
+                    snprintf(merge_path, PATH_MAX, "%s", string);
                  else
-                    sprintf(merge_path, "%s/%s", unxml_data->path, string);
+                    snprintf(merge_path, PATH_MAX, "%s/%s", unxml_data->path, 
string);
               }
             else               /* This is a parent type MergeFile. */
               {
+                 char *xdg_path;
+                 int found = -1;
+
                  /* The spec is a little unclear, and the examples may look 
like they
                   * contradict the description, but it all makes sense if you 
cross
                   * reference it with the XDG Base Directory Specification 
(version 0.6).
@@ -1238,6 +1250,9 @@
                   *
                   * What you do is this.
                   *
+                  * Just plain ignore the specified path in the MergeFile 
element, it's for 
+                  * legacy apps that don't understand parent types.
+                  *
                   * Take the XDG_CONFIG_DIRS stuff as a whole 
($XDG_CONFIG_HOME, then 
                   * $XDG_CONFIG_DIRS), in this code that will be 
ecore_desktop_paths_config.
                   *
@@ -1257,12 +1272,26 @@
                   * The first one found wins, if none are found, don't merge 
anything.
                   */
 
-                 /* FIXME: Actually implement this when I have some menus that 
will exercise it. 
-                  * Slackware uses them.
-                  */
                  merge_path[0] = '\0';
-                 printf
-                    ("\n### Didn't expect a MergeFile parent type in the FDO 
menu.  onefang must write more code now.\n");
+                 ecore_list_goto_first(ecore_desktop_paths_config);
+                 while ((xdg_path = 
ecore_list_next(ecore_desktop_paths_config)) != NULL)
+                   {
+                      if (found < 0)
+                        {
+                           int length = strlen(xdg_path);
+
+                           if (strncmp(xdg_path, unxml_data->file, length) == 
0)
+                              found = length;
+                        }
+                      else
+                        {
+                           snprintf(merge_path, PATH_MAX, "%s%s", xdg_path, 
&(unxml_data->file)[found]);
+                           if (ecore_file_exists(merge_path))
+                              break;
+                           merge_path[0] = '\0';
+                        }
+                   }
+
               }
             if (merge_path[0] != '\0')
               {
@@ -1524,6 +1553,8 @@
 #ifdef DEBUG
                  printf("MAKING MENU - %s \t\t%s\n", generate_data.path,
                         generate_data.name);
+                 ecore_desktop_tree_dump(generate_data.rules, 0);
+                 printf("\n\n");
 #endif
                  for (i = 0; i < generate_data.rules->size; i++)
                    {
@@ -1535,6 +1566,9 @@
                               elements[i].element;
                            if (generate_data.rule->size > 0)
                              {
+                               /* FIXME: This might not be correct, but it 
fixes ubuntu. */
+                                while (generate_data.rule->elements[0].type == 
ECORE_DESKTOP_TREE_ELEMENT_TYPE_TREE)
+                                   generate_data.rule = (Ecore_Desktop_Tree *) 
generate_data.rule->elements[0].element;
                                 if (((char *)generate_data.rule->elements[0].
                                      element)[0] == 'I')
                                   {
@@ -1594,7 +1628,7 @@
    key = (char *)node->key;
    app = (char *)node->value;
 
-   /* FIXME: pass an actualy language parameter. */
+   /* FIXME: pass an actuall language parameter. */
    desktop = ecore_desktop_get(app, NULL);
 
    if (desktop)
@@ -1610,9 +1644,9 @@
               {
                  ecore_hash_set(generate_data->apps, key, strdup(app));
 #ifdef DEBUG
-//               printf("INCLUDING %s%s - %s\n",
-//                      ((generate_data->unallocated) ? "UNALLOCATED " : ""),
-//                      app, key);
+                 printf("INCLUDING %s%s - %s\n",
+                        ((generate_data->unallocated) ? "UNALLOCATED " : ""),
+                        app, key);
 #endif
               }
             else
@@ -1678,8 +1712,7 @@
                       {
 //                          int j;
 
-                         if (ecore_hash_get(desktop->Categories, &rul[4]) !=
-                             NULL)
+                         if (ecore_hash_get(desktop->Categories, &rul[4]) != 
NULL)
                             sub_result = TRUE;
 
 //                          for (j = 0; j < desktop->Categories->size; j++)
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_paths.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -3 -r1.37 -r1.38
--- ecore_desktop_paths.c       14 Oct 2006 00:29:22 -0000      1.37
+++ ecore_desktop_paths.c       9 Nov 2006 13:35:21 -0000       1.38
@@ -276,7 +276,7 @@
       ecore_desktop_paths_config =
         _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_CONFIG, NULL,
                                  "XDG_CONFIG_HOME", "XDG_CONFIG_DIRS",
-                                 "~/.config", "/etc/xdg", "", NULL, NULL);
+                                 "~/.config", "/etc/xdg", NULL, NULL, NULL);
    if (!ecore_desktop_paths_xsessions)
       ecore_desktop_paths_xsessions =
         _ecore_desktop_paths_get(ECORE_DESKTOP_PATHS_XSESSIONS, NULL,
@@ -483,18 +483,28 @@
        if ((value == NULL) || (value[0] == '\0'))
          value = env_home_default;
        env_list = ecore_desktop_paths_to_list(value);
-       if (env_list && types)
+       if (env_list)
          {
-            char               *this_env, *this_type;
+            char               *this_env;
 
             ecore_list_goto_first(env_list);
             while ((this_env = ecore_list_next(env_list)) != NULL)
               {
-                 ecore_list_goto_first(types);
-                 while ((this_type = ecore_list_next(types)) != NULL)
+                 if (types)
                    {
-                      _ecore_desktop_paths_massage_path(path, home,
+                      char *this_type;
+
+                      ecore_list_goto_first(types);
+                      while ((this_type = ecore_list_next(types)) != NULL)
+                        {
+                           _ecore_desktop_paths_massage_path(path, home,
                                                         this_env, this_type);
+                           _ecore_desktop_paths_check_and_add(paths, path);
+                        }
+                   }
+                 else
+                   {
+                      _ecore_desktop_paths_massage_path(path, home, this_env, 
NULL);
                       _ecore_desktop_paths_check_and_add(paths, path);
                    }
               }
@@ -534,18 +544,28 @@
        if ((value == NULL) || (value[0] == '\0'))
          value = env_default;
        env_list = ecore_desktop_paths_to_list(value);
-       if (env_list && types)
+       if (env_list)
          {
-            char               *this_env, *this_type;
+            char               *this_env;
 
             ecore_list_goto_first(env_list);
             while ((this_env = ecore_list_next(env_list)) != NULL)
               {
-                 ecore_list_goto_first(types);
-                 while ((this_type = ecore_list_next(types)) != NULL)
+                 if (types)
                    {
-                      _ecore_desktop_paths_massage_path(path, home,
+                      char *this_type;
+
+                      ecore_list_goto_first(types);
+                      while ((this_type = ecore_list_next(types)) != NULL)
+                        {
+                           _ecore_desktop_paths_massage_path(path, home,
                                                         this_env, this_type);
+                           _ecore_desktop_paths_check_and_add(paths, path);
+                        }
+                   }
+                 else
+                   {
+                      _ecore_desktop_paths_massage_path(path, home, this_env, 
NULL);
                       _ecore_desktop_paths_check_and_add(paths, path);
                    }
               }
@@ -572,18 +592,28 @@
     *      if it exists, add it to end of paths
     */
 
-   if (gnome_data && types)
+   if (gnome_data)
      {
-       char               *this_gnome, *this_type;
+       char               *this_gnome;
 
        ecore_list_goto_first(gnome_data);
        while ((this_gnome = ecore_list_next(gnome_data)) != NULL)
          {
-            ecore_list_goto_first(types);
-            while ((this_type = ecore_list_next(types)) != NULL)
+            if (types)
               {
-                 _ecore_desktop_paths_massage_path(path, home,
-                                                   this_gnome, this_type);
+                 char *this_type;
+
+                 ecore_list_goto_first(types);
+                 while ((this_type = ecore_list_next(types)) != NULL)
+                    {
+                       _ecore_desktop_paths_massage_path(path, home,
+                                                        this_gnome, this_type);
+                       _ecore_desktop_paths_check_and_add(paths, path);
+                    }
+              }
+            else
+              {
+                 _ecore_desktop_paths_massage_path(path, home, this_gnome, 
NULL);
                  _ecore_desktop_paths_check_and_add(paths, path);
               }
          }



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