Enlightenment CVS committal
Author : onefang
Project : e17
Module : apps/e_utils
Dir : e17/apps/e_utils/src/bin/e17genmenu/src/bin
Modified Files:
fdo_menus.c fdo_paths.c
Log Message:
Last of the menu merging done.
What is left is re-arranging the menus and other cosmetic stuff.
===================================================================
RCS file:
/cvsroot/enlightenment/e17/apps/e_utils/src/bin/e17genmenu/src/bin/fdo_menus.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- fdo_menus.c 1 Mar 2006 16:20:02 -0000 1.23
+++ fdo_menus.c 4 Mar 2006 23:43:22 -0000 1.24
@@ -55,11 +55,13 @@
{
Dumb_Tree *merge;
Dumb_Tree *current;
+ char *menu;
char *prefix;
char *path;
- int length;
+ int length, menu_length, level;
};
+static Dumb_Tree *_fdo_menus_create_menu();
static int _fdo_menus_unxml(const void *data, Dumb_Tree * tree, int element,
int level);
static int _fdo_menus_check_directory(const void *data, char *path);
static int _fdo_menus_check_menu(const void *data, char *path);
@@ -191,32 +193,17 @@
}
else if (strcmp((char *)tree->elements[element].element, "<Menu") == 0)
{
- Dumb_Tree *menu, *rules;
- Ecore_Hash *pool, *apps;
+ Dumb_Tree *menu;
- menu = dumb_tree_new(NULL);
- rules = dumb_tree_new(NULL);
- pool = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- apps = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- if ((menu) && (rules) && (pool) && (apps))
+ menu = _fdo_menus_create_menu();
+ if (menu)
{
int i;
char *flags = " ", *name = "", *directory = "",
*menu_path = "";
char temp[MAX_PATH];
- ecore_hash_set_free_key(pool, free);
- ecore_hash_set_free_value(pool, free);
- ecore_hash_set_free_key(apps, free);
- ecore_hash_set_free_value(apps, free);
- sprintf(temp, "<MENU <%.4s> <%s> <%s>", flags, name,
directory);
- dumb_tree_extend(menu, temp);
- sprintf(temp, "<MENU_PATH %s", menu_path);
- dumb_tree_extend(menu, temp);
flags = (char *)menu->elements[0].element;
flags += 7;
- dumb_tree_add_hash(menu, pool);
- dumb_tree_add_child(menu, rules);
- dumb_tree_add_hash(menu, apps);
tree->elements[element].element = menu;
tree->elements[element].type = DUMB_TREE_ELEMENT_TYPE_TREE;
for (i = element + 1; i < tree->size; i++)
@@ -373,22 +360,49 @@
tree->elements[element].type =
DUMB_TREE_ELEMENT_TYPE_TREE;
}
}
- else
- {
- if (apps)
- ecore_hash_destroy(apps);
- if (pool)
- ecore_hash_destroy(pool);
- if (rules)
- dumb_tree_del(rules);
- if (menu)
- dumb_tree_del(menu);
- }
}
}
return 0;
}
+static Dumb_Tree *
+_fdo_menus_create_menu()
+{
+ Dumb_Tree *menu, *rules;
+ Ecore_Hash *pool, *apps;
+
+ menu = dumb_tree_new(NULL);
+ rules = dumb_tree_new(NULL);
+ pool = ecore_hash_new(ecore_str_hash, ecore_str_compare);
+ apps = ecore_hash_new(ecore_str_hash, ecore_str_compare);
+ if ((menu) && (rules) && (pool) && (apps))
+ {
+ ecore_hash_set_free_key(pool, free);
+ ecore_hash_set_free_value(pool, free);
+ ecore_hash_set_free_key(apps, free);
+ ecore_hash_set_free_value(apps, free);
+ dumb_tree_extend(menu, "<MENU < > <> <>");
+ dumb_tree_extend(menu, "<MENU_PATH ");
+ dumb_tree_add_hash(menu, pool);
+ dumb_tree_add_child(menu, rules);
+ dumb_tree_add_hash(menu, apps);
+ }
+ else
+ {
+ if (apps)
+ ecore_hash_destroy(apps);
+ if (pool)
+ ecore_hash_destroy(pool);
+ if (rules)
+ dumb_tree_del(rules);
+ if (menu)
+ dumb_tree_del(menu);
+ menu = NULL;
+ }
+
+ return menu;
+}
+
static int
_fdo_menus_check_directory(const void *data, char *path)
{
@@ -437,9 +451,71 @@
_fdo_menus_legacy_menu_dir(const void *data, char *path)
{
struct _fdo_menus_legacy_data *legacy_data;
+ Dumb_Tree *menu;
+ int start;
+ int i, count = 0;
legacy_data = (struct _fdo_menus_legacy_data *)data;
- printf(" LEGACYDIR DIR - %s - %s %s\n", legacy_data->prefix,
legacy_data->path, &path[legacy_data->length]);
+ for (i = legacy_data->length; path[i] != '\0'; i++)
+ {
+ if (path[i] == '/')
+ count++;
+ }
+ if (count == 1)
+ {
+ legacy_data->current = legacy_data->merge;
+ legacy_data->level = 0;
+ }
+ else if (count <= legacy_data->level)
+ {
+ if ((legacy_data->current) && (legacy_data->current->parent))
+ {
+ legacy_data->current = legacy_data->current->parent;
+ legacy_data->level--;
+ }
+ }
+
+ start = legacy_data->length;
+ count = 0;
+ for (i = legacy_data->length; path[i] != '\0'; i++)
+ {
+ if (path[i] == '/')
+ {
+ if (count >= legacy_data->level)
+ {
+ path[i] = '\0';
+ menu = _fdo_menus_create_menu();
+ if (menu)
+ {
+ char temp[MAX_PATH];
+
+ sprintf(temp, "<MENU < L> <%s> <>", &path[start]);
+ menu->elements[0].element = strdup(temp);
+ dumb_tree_track(menu, menu->elements[0].element);
+ sprintf(temp, "<MENU_PATH %s/%s", legacy_data->menu,
&path[legacy_data->length]);
+ menu->elements[1].element = strdup(temp);
+ dumb_tree_track(menu, menu->elements[1].element);
+
+ dumb_tree_add_child(legacy_data->current, menu);
+ /* This is not needed, but if it was, this is where it
would go.
+ sprintf(temp, "<AppDir %s/", path);
+ dumb_tree_extend(menu, temp);
+ */
+ sprintf(temp, "<DirectoryDir %s/", path);
+ dumb_tree_extend(menu, temp);
+
+ legacy_data->current = menu;
+ legacy_data->level++;
+ }
+ path[i] = '/';
+ }
+ start = i + 1;
+ count++;
+ }
+ }
+
+ legacy_data->level = count;
+
return 0;
}
@@ -447,9 +523,85 @@
_fdo_menus_legacy_menu(const void *data, char *path)
{
struct _fdo_menus_legacy_data *legacy_data;
+ char *menu_path, *file;
+ char temp[MAX_PATH];
+ int i, count = 0, menu_count = 0;
legacy_data = (struct _fdo_menus_legacy_data *)data;
- printf(" LEGACYDIR FILE - %s - %s %s\n", legacy_data->prefix,
legacy_data->path, &path[legacy_data->length]);
+ menu_path = (char *)legacy_data->current->elements[1].element;
+ menu_path += 12 + legacy_data->menu_length;
+
+ for (i = legacy_data->length; path[i] != '\0'; i++)
+ {
+ if (path[i] == '/')
+ count++;
+ }
+ for (i = 0; menu_path[i] != '\0'; i++)
+ {
+ if (menu_path[i] == '/')
+ menu_count++;
+ }
+ while (menu_count >= count)
+ {
+ legacy_data->current = legacy_data->current->parent;
+ menu_count--;
+ }
+ if (legacy_data->current->elements[1].type == DUMB_TREE_ELEMENT_TYPE_STRING)
+ {
+ menu_path = (char *)legacy_data->current->elements[1].element;
+ menu_path += 12 + legacy_data->menu_length;
+ }
+ else
+ {
+ /* FIXME: Bugger, a corner case.
+ * If this is .directory, then maybe ignore it?
+ * If this is a desktop, we need to put it into the pool of the menu
that legacy_data->merge will get merged into.
+ */
+ menu_path = "";
+ printf(" LEGACYDIR FILE - %s - %s %s\n", legacy_data->prefix,
legacy_data->path, &path[legacy_data->length]);
+ return 0;
+ }
+
+ menu_count = strlen(menu_path);
+ if (menu_count)
+ menu_count++;
+ file = &path[legacy_data->length + menu_count];
+ count = strlen(file);
+
+ if (strcmp(".directory", file) == 0)
+ {
+ menu_path = (char *)legacy_data->current->elements[0].element;
+ menu_count = strlen(menu_path);
+ menu_path[menu_count - 3] = '\0';
+ sprintf(temp, "%s <.directory>", menu_path);
+ legacy_data->current->elements[0].element = strdup(temp);
+ dumb_tree_track(legacy_data->current,
legacy_data->current->elements[0].element);
+ }
+ else if (strcmp(".desktop", &file[count - 8]) == 0)
+ {
+ Ecore_Hash *pool;
+ Dumb_Tree *rules;
+
+ pool = (Ecore_Hash *) legacy_data->current->elements[2].element;
+ rules = (Dumb_Tree *) legacy_data->current->elements[3].element;
+ if (rules->size == 0)
+ {
+ Dumb_Tree *new_rules;
+
+ new_rules = dumb_tree_new(NULL);
+ if (new_rules)
+ dumb_tree_add_child(rules, new_rules);
+ }
+ sprintf(temp, "%s%s", legacy_data->prefix, file);
+ ecore_hash_set(pool, strdup(temp), strdup(path));
+ if (rules->size > 0)
+ {
+ rules = (Dumb_Tree *) rules->elements[0].element;
+ sprintf(temp, "IOF %s%s", legacy_data->prefix, file);
+ dumb_tree_extend(rules, temp);
+ }
+ }
+
return 0;
}
@@ -657,6 +809,12 @@
string += 11;
legacy_data.prefix = NULL;
legacy_data.merge = merge;
+ legacy_data.current = merge;
+ legacy_data.level = 0;
+ legacy_data.menu = (char *)tree->elements[0].element;
+ legacy_data.menu += 14;
+ legacy_data.menu_length = index(legacy_data.menu, '>') -
legacy_data.menu;
+ legacy_data.menu[legacy_data.menu_length] = '\0';
if (strncmp(string, "prefix=\"", 8) == 0)
{
string += 8;
@@ -676,6 +834,7 @@
legacy_data.length = strlen(merge_path);
printf("<LEGACYDIR> - %s - %s\n", legacy_data.prefix, merge_path);
fdo_paths_recursive_search(merge_path, NULL,
_fdo_menus_legacy_menu_dir, _fdo_menus_legacy_menu, &legacy_data);
+ legacy_data.menu[legacy_data.menu_length] = '>';
result = 1;
}
else if (strncmp(string, "<MergeFile ", 11) == 0)
@@ -1139,21 +1298,21 @@
/*
merge menus
* expand <KDELegacyDir>'s to <LegacyDir>.
- expand <LegacyDir>'s
- for each dir (recursive)
- create recursively nested <MENU < L> <dirname> <> element
- // <AppDir>dirpath</AppDir>
- <DirectoryDir>dirpath</DirectoryDir>
- if exist .directory
- add <.directory> to name
- <Include>
- for each *.desktop
+* expand <LegacyDir>'s
+* for each dir (recursive)
+* create recursively nested <MENU < L> <dirname> <> element
+* // <AppDir>dirpath</AppDir>
+* <DirectoryDir>dirpath</DirectoryDir>
+* if exist .directory
+* add <.directory> to name
+* <Include>
+* for each *.desktop
if no categories in bar.desktop
- <Filename>prefix-bar.desktop</Filename>
+* <Filename>prefix-bar.desktop</Filename>
add "Legacy" to categories
- add any prefix to the desktop ID.
- add it to the pool
- </Include>
+* add any prefix to the desktop ID.
+* add it to the pool
+* </Include>
* for each <MergeFile>, and <MergeDir> element
* get the root <Menu> elements from that elements file/s.
* remove the <Name> element from those root <Menu> elements.
===================================================================
RCS file:
/cvsroot/enlightenment/e17/apps/e_utils/src/bin/e17genmenu/src/bin/fdo_paths.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- fdo_paths.c 1 Mar 2006 16:20:02 -0000 1.21
+++ fdo_paths.c 4 Mar 2006 23:43:23 -0000 1.22
@@ -44,12 +44,34 @@
_fdo_paths_get(NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS",
"~/.local/share", "/usr/local/share:/usr/share",
"desktop-directories", "gnome/vfolders", "xdgdata-dirs");
if (!fdo_paths_desktops)
- fdo_paths_desktops =
- _fdo_paths_get(NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS",
- "~/.local/share", "/usr/local/share:/usr/share",
"applications",
- "dist/desktop-files:dist/short-menu:gnome/apps",
"xdgdata-apps:apps");
+ {
+ fdo_paths_desktops =
+ _fdo_paths_get(NULL, "XDG_DATA_HOME", "XDG_DATA_DIRS",
+ "~/.local/share", "/usr/local/share:/usr/share",
"applications",
+ "dist/desktop-files:dist/short-menu:gnome/apps",
"xdgdata-apps:apps");
+ _fdo_paths_check_and_add(fdo_paths_desktops,
"/usr/share/update-desktop-files/templates");
+ }
if (!fdo_paths_kde_legacy)
- fdo_paths_kde_legacy = _fdo_paths_get(NULL, NULL, NULL, NULL, NULL,
NULL, NULL, "apps");
+ {
+ int i;
+ char temp[MAX_PATH];
+
+ fdo_paths_kde_legacy = _fdo_paths_get(NULL, NULL, NULL, NULL, NULL,
NULL, NULL, "apps");
+ for (i = 0; i < fdo_paths_kde_legacy->size; i++)
+ {
+ char *path, *t1, *t2;
+
+ path = (char *)fdo_paths_kde_legacy->elements[i].element;
+ t1 = rindex(path, '/');
+ *t1 = '\0';
+ t2 = rindex(path, '/');
+ *t2 = '\0';
+ sprintf(temp, "%s/apps/kappfinder/apps/", path);
+ *t2 = '/';
+ *t1 = '/';
+ _fdo_paths_check_and_add(fdo_paths_kde_legacy, temp);
+ }
+ }
if (!fdo_paths_icons)
{
char *gnome;
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs