Index: configure.in =================================================================== RCS file: /cvs/gnome/bug-buddy/configure.in,v retrieving revision 1.173 diff -u -p -r1.173 configure.in --- configure.in 7 Mar 2005 08:29:00 -0000 1.173 +++ configure.in 23 Mar 2005 15:00:45 -0000 @@ -35,7 +35,7 @@ GNOME_VFS_REQUIRED="gnome-vfs-2.0 >= 2.0 LIBBONOBO_REQUIRED="libbonobo-2.0 >= 2.0.0" LIBGNOME_REQUIRED="libgnome-2.0 >= 2.0.0" LIBGNOMECANVAS_REQUIRED="libgnomecanvas-2.0 >= 2.0.0" -LIBGNOMEMENU_REQUIRED="libgnome-menu >= 2.9.1" +LIBGNOMEMENU_REQUIRED="libgnome-menu >= 2.11.1" LIBGNOMEUI_REQUIRED="libgnomeui-2.0 >= 2.5.92" LIBGLADE_REQUIRED="libglade-2.0 >= 2.0.0" LIBXML_REQUIRED="libxml-2.0 >= 2.4.6" Index: src/bugzilla.c =================================================================== RCS file: /cvs/gnome/bug-buddy/src/bugzilla.c,v retrieving revision 1.70 diff -u -p -r1.70 bugzilla.c --- src/bugzilla.c 10 Feb 2005 11:05:29 -0000 1.70 +++ src/bugzilla.c 23 Mar 2005 15:00:46 -0000 @@ -1130,25 +1130,67 @@ compare_applications (MenuTreeEntry *a, menu_tree_entry_get_name (b)); } +static GSList *get_all_applications_from_dir (MenuTreeDirectory *directory, + GSList *list); + +static GSList * +get_all_applications_from_alias (MenuTreeAlias *alias, + GSList *list) +{ + MenuTreeItem *aliased_item; + + aliased_item = menu_tree_alias_get_item (alias); + + switch (menu_tree_item_get_type (aliased_item)) { + case MENU_TREE_ITEM_DIRECTORY: + list = get_all_applications_from_dir (MENU_TREE_DIRECTORY (aliased_item), list); + break; + + case MENU_TREE_ITEM_ENTRY: + list = g_slist_append (list, menu_tree_item_ref (aliased_item)); + break; + + default: + break; + } + + menu_tree_item_unref (aliased_item); + + return list; +} + static GSList * get_all_applications_from_dir (MenuTreeDirectory *directory, GSList *list) { - GSList *subdirs; + GSList *items; GSList *l; - list = g_slist_concat (list, - menu_tree_directory_get_entries (directory)); - - subdirs = menu_tree_directory_get_subdirs (directory); - for (l = subdirs; l; l = l->next) { - MenuTreeDirectory *subdir = l->data; + items = menu_tree_directory_get_contents (directory); + for (l = items; l; l = l->next) { + MenuTreeItem *item = l->data; + + switch (menu_tree_item_get_type (item)) { + case MENU_TREE_ITEM_DIRECTORY: + list = get_all_applications_from_dir (MENU_TREE_DIRECTORY (item), list); + break; + + case MENU_TREE_ITEM_ENTRY: + list = g_slist_append (list, menu_tree_item_ref (item)); + break; + + case MENU_TREE_ITEM_ALIAS: + list = get_all_applications_from_alias (MENU_TREE_ALIAS (item), list); + break; - list = get_all_applications_from_dir (subdir, list); + default: + break; + } - menu_tree_directory_unref (subdir); + menu_tree_item_unref (item); } - g_slist_free (subdirs); + + g_slist_free (items); return list; } @@ -1166,7 +1208,7 @@ get_all_applications (void) retval = get_all_applications_from_dir (root, NULL); - menu_tree_directory_unref (root); + menu_tree_item_unref (root); menu_tree_unref (tree); retval = g_slist_sort (retval, (GCompareFunc) compare_applications); @@ -1196,7 +1238,7 @@ load_applications (void) MenuTreeEntry *entry = l->data; if (prev_name && strcmp (menu_tree_entry_get_name (entry), prev_name) == 0) { - menu_tree_entry_unref (entry); + menu_tree_item_unref (entry); continue; } ditem = gnome_desktop_item_new_from_uri (menu_tree_entry_get_desktop_file_path (entry), @@ -1208,13 +1250,13 @@ load_applications (void) g_error_free (error); error = NULL; } - menu_tree_entry_unref (entry); + menu_tree_item_unref (entry); continue; } if ((gnome_desktop_item_get_entry_type (ditem) != GNOME_DESKTOP_ITEM_TYPE_APPLICATION) || !gnome_desktop_item_get_string (ditem, BUGZILLA_BUGZILLA)) { gnome_desktop_item_unref (ditem); - menu_tree_entry_unref (entry); + menu_tree_item_unref (entry); continue; } @@ -1233,7 +1275,7 @@ load_applications (void) g_free (icon); prev_name = menu_tree_entry_get_name (entry); gnome_desktop_item_unref (ditem); - menu_tree_entry_unref (entry); + menu_tree_item_unref (entry); } g_slist_free (all_applications);