diff --git a/src/desktopicon.c b/src/desktopicon.c index 96ba926..8ca306d 100644 --- a/src/desktopicon.c +++ b/src/desktopicon.c @@ -135,22 +135,12 @@ DesktopIcon * desktopicon_new(Desktop * desktop, char const * name, if(S_ISLNK(lst.st_mode) && stat(path, &st) == 0) s = &st; mime = desktop_get_mime(desktop); - if(S_ISDIR(s->st_mode)) - { - isdir = TRUE; - image = desktop_get_folder(desktop); - } - else if(s->st_mode & S_IXUSR) - { - /* FIXME use access() for this */ - isexec = TRUE; - image = vfs_mime_icon(mime, path, - "application/x-executable", &lst, s, - DESKTOPICON_ICON_SIZE); - } - else if((mimetype = mime_type(mime, path)) != NULL) - image = vfs_mime_icon(mime, path, mimetype, &lst, s, - DESKTOPICON_ICON_SIZE); + isdir = S_ISDIR(s->st_mode) ? TRUE : FALSE; + isexec = (isdir == FALSE) && (s->st_mode & S_IXUSR) + ? TRUE : FALSE; + mimetype = vfs_mime_type(mime, path, s->st_mode); + image = vfs_mime_icon(mime, path, mimetype, &lst, NULL, + DESKTOPICON_ICON_SIZE); } if(name == NULL) { diff --git a/src/vfs.c b/src/vfs.c index 1fc82d8..553f069 100644 --- a/src/vfs.c +++ b/src/vfs.c @@ -49,12 +49,16 @@ GdkPixbuf * vfs_mime_icon(Mime * mime, char const * filename, { GdkPixbuf * ret = NULL; mode_t mode = (lst != NULL) ? lst->st_mode : 0; + struct stat s; char const * emblem; if(type == NULL) type = vfs_mime_type(mime, filename, S_ISLNK(mode) ? 0 : mode); - if(S_ISDIR(mode) || (S_ISLNK(mode) && st != NULL - && S_ISDIR(st->st_mode))) + if(S_ISDIR(mode)) + ret = _mime_icon_folder(mime, filename, lst, st, size); + else if(S_ISLNK(mode) && ((st != NULL && S_ISDIR(st->st_mode)) + || (stat(filename, &s) == 0) + && S_ISDIR(s.st_mode))) ret = _mime_icon_folder(mime, filename, lst, st, size); else mime_icons(mime, type, size, &ret, -1);