diff --git a/include/Browser.h b/include/Browser.h index 9015a75..9ebd2fb 100644 --- a/include/Browser.h +++ b/include/Browser.h @@ -35,8 +35,8 @@ typedef struct _BrowserPluginHelper { Browser * browser; int (*error)(Browser * browser, char const * message, int ret); - GdkPixbuf * (*get_icon)(Browser * browser, char const * type, - struct stat * st, int size); + GdkPixbuf * (*get_icon)(Browser * browser, char const * filename, + char const * type, struct stat * st, int size); Mime * (*get_mime)(Browser * browser); int (*set_location)(Browser * browser, char const * path); } BrowserPluginHelper; diff --git a/src/browser.c b/src/browser.c index 14893a5..eb1ad30 100644 --- a/src/browser.c +++ b/src/browser.c @@ -224,8 +224,8 @@ unsigned int browser_cnt = 0; /* accessors */ static gboolean _browser_plugin_is_enabled(Browser * browser, char const * plugin); -static GdkPixbuf * _browser_get_icon(Browser * browser, char const * type, - struct stat * st, int size); +static GdkPixbuf * _browser_get_icon(Browser * browser, char const * filename, + char const * type, struct stat * st, int size); static Mime * _browser_get_mime(Browser * browser); static void _browser_set_status(Browser * browser, char const * status); @@ -2773,9 +2773,17 @@ static gboolean _browser_plugin_is_enabled(Browser * browser, /* browser_get_icon */ -static GdkPixbuf * _browser_get_icon(Browser * browser, char const * type, - struct stat * st, int size) +static GdkPixbuf * _browser_get_icon(Browser * browser, char const * filename, + char const * type, struct stat * st, int size) { + struct stat s; + + if(st == NULL && lstat(filename, &s) == 0) + st = &s; + if(st != NULL && S_ISDIR(st->st_mode)) + return vfs_mime_folder_icon(browser->mime, filename, st, size); + if(filename != NULL && type == NULL) + type = mime_type(browser->mime, filename); return vfs_mime_icon(browser->mime, type, st, size); } diff --git a/src/plugins/properties.c b/src/plugins/properties.c index c598e2d..4a88431 100644 --- a/src/plugins/properties.c +++ b/src/plugins/properties.c @@ -461,8 +461,8 @@ static void _refresh_type(Properties * properties, struct stat * st) properties->filename)) == NULL && st->st_mode & S_IXUSR) type = "application/x-executable"; - if(type != NULL && pixbuf == NULL - && (pixbuf = helper->get_icon(helper->browser, type, st, + if(pixbuf == NULL && (pixbuf = helper->get_icon(helper->browser, + properties->filename, type, st, iconsize)) != NULL) image = gtk_image_new_from_pixbuf(pixbuf); if(type == NULL)