diff -x config -x debian -ur xfdesktop-4.1.99.1/modules/menu/desktop-menu-file.c ../xfdesktop4-4.1.99.1/modules/menu/desktop-menu-file.c --- xfdesktop-4.1.99.1/modules/menu/desktop-menu-file.c 2004-11-27 14:00:25.000000000 +0000 +++ ../xfdesktop4-4.1.99.1/modules/menu/desktop-menu-file.c 2004-11-27 14:31:01.000000000 +0000 @@ -495,13 +495,14 @@ if(*attribute_values[j] == '/') { desktop_menu_file_parse(state->desktop_menu, attribute_values[j], state->cur_branch, - state->cur_path, FALSE, FALSE); + state->cur_path, FALSE, FALSE, FALSE); } else { - gchar *menuincfile = xfce_get_userfile(attribute_values[j], - NULL); - desktop_menu_file_parse(state->desktop_menu, menuincfile, - state->cur_branch, state->cur_path, FALSE, FALSE); - g_free(menuincfile); + gchar new_loc[PATH_MAX]; + g_snprintf(new_loc, PATH_MAX, + "xfce4/desktop/%s", + attribute_values[j]); + desktop_menu_file_parse(state->desktop_menu, new_loc, + state->cur_branch, state->cur_path, FALSE, FALSE, TRUE); } } } else if(!strcmp(attribute_values[i], "system")) { @@ -572,7 +573,7 @@ gboolean desktop_menu_file_parse(XfceDesktopMenu *desktop_menu, const gchar *filename, GtkWidget *menu, const gchar *cur_path, gboolean is_root, - gboolean from_cache) + gboolean from_cache, gboolean lookup_resource) { gchar *file_contents = NULL; GMarkupParseContext *gpcontext = NULL; @@ -591,17 +592,30 @@ gint fd = -1; void *maddr = NULL; #endif + gchar *realfile = NULL; + gboolean freerealfile = FALSE; + + if (lookup_resource) { + realfile = xfce_resource_lookup(XFCE_RESOURCE_CONFIG, filename); + if (!realfile) { + g_warning("XfceDesktopMenu: unable to find a usable menu file\n"); + goto cleanup; + } + freerealfile = TRUE; + } else { + realfile = filename; + } g_return_val_if_fail(desktop_menu != NULL && menu != NULL - && filename != NULL, FALSE); + && realfile != NULL, FALSE); - if(stat(filename, &st) < 0) { + if(stat(realfile, &st) < 0) { g_warning("XfceDesktopMenu: unable to find a usable menu file\n"); goto cleanup; } #ifdef HAVE_MMAP - fd = open(filename, O_RDONLY, 0); + fd = open(realfile, O_RDONLY, 0); if(fd < 0) goto cleanup; @@ -610,15 +624,15 @@ file_contents = maddr; #endif - if(!file_contents && !g_file_get_contents(filename, &file_contents, NULL, &err)) { + if(!file_contents && !g_file_get_contents(realfile, &file_contents, NULL, &err)) { if(err) { g_warning("XfceDesktopMenu: Unable to read menu file '%s' (%d): %s\n", - filename, err->code, err->message); + realfile, err->code, err->message); g_error_free(err); } goto cleanup; } - + state.started = FALSE; state.branches = g_queue_new(); g_queue_push_tail(state.branches, menu); @@ -628,7 +642,7 @@ g_strlcpy(state.cur_path, cur_path, 2048); state.desktop_menu = desktop_menu; state.hidelevel = 0; - + gpcontext = g_markup_parse_context_new(&gmparser, 0, &state, NULL); if(!g_markup_parse_context_parse(gpcontext, file_contents, st.st_size, &err)) { @@ -641,12 +655,12 @@ if(g_markup_parse_context_end_parse(gpcontext, NULL)) ret = TRUE; - if(ret && !from_cache && !stat(filename, &st)) { + if(ret && !from_cache && !stat(realfile, &st)) { g_hash_table_insert(desktop_menu->menufile_mtimes, - g_strdup(filename), GINT_TO_POINTER(st.st_mtime)); - desktop_menu_cache_add_menufile(filename); + g_strdup(realfile), GINT_TO_POINTER(st.st_mtime)); + desktop_menu_cache_add_menufile(realfile); } - + cleanup: if(gpcontext) @@ -673,6 +687,8 @@ #endif g_queue_free(state.paths); } + if(freerealfile) + g_free(realfile); return ret; } diff -x config -x debian -ur xfdesktop-4.1.99.1/modules/menu/desktop-menu-file.h ../xfdesktop4-4.1.99.1/modules/menu/desktop-menu-file.h --- xfdesktop-4.1.99.1/modules/menu/desktop-menu-file.h 2004-11-27 14:00:25.000000000 +0000 +++ ../xfdesktop4-4.1.99.1/modules/menu/desktop-menu-file.h 2004-11-27 13:52:35.000000000 +0000 @@ -34,7 +34,8 @@ gboolean desktop_menu_file_need_update(XfceDesktopMenu *desktop_menu); gboolean desktop_menu_file_parse(XfceDesktopMenu *desktop_menu, const gchar *filename, GtkWidget *menu, const gchar *path, - gboolean is_root, gboolean from_cache); + gboolean is_root, gboolean from_cache, + gboolean lookup_resource); G_END_DECLS diff -x config -x debian -ur xfdesktop-4.1.99.1/modules/menu/desktop-menu.c ../xfdesktop4-4.1.99.1/modules/menu/desktop-menu.c --- xfdesktop-4.1.99.1/modules/menu/desktop-menu.c 2004-11-27 14:00:25.000000000 +0000 +++ ../xfdesktop4-4.1.99.1/modules/menu/desktop-menu.c 2004-11-27 13:52:14.000000000 +0000 @@ -116,7 +116,7 @@ } if(menu_cache_file) { if(!desktop_menu_file_parse(desktop_menu, menu_cache_file, - desktop_menu->menu, "/", TRUE, TRUE)) + desktop_menu->menu, "/", TRUE, TRUE, FALSE)) { _xfce_desktop_menu_free_menudata(desktop_menu); ret = FALSE; @@ -126,7 +126,7 @@ desktop_menu_cache_init(desktop_menu->menu); if(!desktop_menu_file_parse(desktop_menu, desktop_menu->filename, - desktop_menu->menu, "/", TRUE, FALSE)) + desktop_menu->menu, "/", TRUE, FALSE, FALSE)) { _xfce_desktop_menu_free_menudata(desktop_menu); ret = FALSE;