diff -Naur xfdesktop-4.4.2/src/xfce-desktop.c xfdesktop-4.4.2.tpg/src/xfce-desktop.c --- xfdesktop-4.4.2/src/xfce-desktop.c 2007-11-17 19:31:41.000000000 +0000 +++ xfdesktop-4.4.2.tpg/src/xfce-desktop.c 2008-05-05 12:07:03.000000000 +0000 @@ -150,6 +150,93 @@ return desktop->priv->system_font_size; } +/* Use XDG_DESKTOP_DIR */ +static char * +lookup_desktop_dir (void) +{ + FILE *file; + char *config_file; + char buffer[512]; + char *user_dir; + char *p, *d; + int len; + int relative; + + config_file = g_build_filename (g_get_user_config_dir (), "user-dirs.dirs", NULL); + file = fopen (config_file, "r"); + free (config_file); + if (file == NULL) + goto error; + + user_dir = NULL; + while (fgets (buffer, sizeof (buffer), file)) + { + /* Remove newline at end */ + len = strlen (buffer); + if (len > 0 && buffer[len-1] == '\n') + buffer[len-1] = 0; + + p = buffer; + while (*p == ' ' || *p == '\t') + p++; + + if (!g_str_has_prefix (p, "XDG_DESKTOP_DIR")) + continue; + p += strlen ("XDG_DESKTOP_DIR"); + + while (*p == ' ' || *p == '\t') + p++; + + if (*p != '=') + continue; + p++; + + while (*p == ' ' || *p == '\t') + p++; + + if (*p != '"') + continue; + p++; + + relative = 0; + if (strncmp (p, "$HOME/", 6) == 0) + { + p += 6; + relative = 1; + } + else if (*p != '/') + continue; + + if (relative) + { + user_dir = g_malloc (strlen (g_get_home_dir()) + 1 + strlen (p) + 1); + strcpy (user_dir, g_get_home_dir ()); + strcat (user_dir, "/"); + } + else + { + user_dir = g_malloc (strlen (p) + 1); + *user_dir = 0; + } + + d = user_dir + strlen (user_dir); + while (*p && *p != '"') + { + if ((*p == '\\') && (*(p+1) != 0)) + p++; + *d++ = *p++; + } + *d = 0; + } + fclose (file); + + if (user_dir) + return user_dir; + + error: + return g_build_filename (g_get_home_dir (), "Desktop", NULL); +} + static void xfce_desktop_setup_icon_view(XfceDesktop *desktop) { @@ -168,8 +255,7 @@ case XFCE_DESKTOP_ICON_STYLE_FILES: { ThunarVfsPath *path; - gchar *desktop_path = xfce_get_homefile("Desktop", - NULL); + gchar *desktop_path = lookup_desktop_dir (); path = thunar_vfs_path_new(desktop_path, NULL); if(path) {