Moved more icon handling code to the VFS pseudo-class
This commit is contained in:
parent
4c29e9075d
commit
d04c2cb550
|
@ -1334,55 +1334,12 @@ static void _insert_dir(Browser * browser, char const * name,
|
|||
GdkPixbuf ** icon_24, GdkPixbuf ** icon_48,
|
||||
GdkPixbuf ** icon_96, struct stat * st)
|
||||
{
|
||||
char const * type = "inode/directory";
|
||||
char const * icon = NULL;
|
||||
int flags = GTK_ICON_LOOKUP_FORCE_SIZE;
|
||||
|
||||
if(browser->refresh_dev != st->st_dev)
|
||||
type = "inode/mountpoint";
|
||||
/* special folder icons */
|
||||
else if(strcasecmp(name, "Desktop") == 0)
|
||||
icon = "gnome-fs-desktop";
|
||||
else if(strcasecmp(name, "Documents") == 0)
|
||||
icon = "folder-documents";
|
||||
else if(strcasecmp(name, "Download") == 0
|
||||
|| strcasecmp(name, "Downloads") == 0)
|
||||
icon = "folder-download";
|
||||
else if(strcasecmp(name, "Music") == 0)
|
||||
icon = "folder-music";
|
||||
else if(strcasecmp(name, "Pictures") == 0)
|
||||
icon = "folder-pictures";
|
||||
else if(strcmp(name, "public_html") == 0
|
||||
|| strcasecmp(name, "Shared") == 0)
|
||||
icon = "folder-publicshared";
|
||||
else if(strcasecmp(name, "Templates") == 0)
|
||||
icon = "folder-templates";
|
||||
else if(strcasecmp(name, "Video") == 0
|
||||
|| strcasecmp(name, "Videos") == 0)
|
||||
icon = "folder-videos";
|
||||
if(icon != NULL)
|
||||
{
|
||||
/* try to load the special icons */
|
||||
if(icon_24 != NULL && (*icon_24 = gtk_icon_theme_load_icon(
|
||||
browser->theme, icon, 24, flags,
|
||||
NULL)) != NULL)
|
||||
icon_24 = NULL;
|
||||
if(icon_48 != NULL && (*icon_48 = gtk_icon_theme_load_icon(
|
||||
browser->theme, icon, 48, flags,
|
||||
NULL)) != NULL)
|
||||
icon_48 = NULL;
|
||||
if(icon_96 != NULL && (*icon_96 = gtk_icon_theme_load_icon(
|
||||
browser->theme, icon, 96, flags,
|
||||
NULL)) != NULL)
|
||||
icon_96 = NULL;
|
||||
}
|
||||
/* generic fallback */
|
||||
if(icon_24 != NULL)
|
||||
mime_icons(browser->mime, type, 24, icon_24, -1);
|
||||
*icon_24 = vfs_mime_folder_icon(browser->mime, name, st, 24);
|
||||
if(icon_48 != NULL)
|
||||
mime_icons(browser->mime, type, 48, icon_48, -1);
|
||||
*icon_48 = vfs_mime_folder_icon(browser->mime, name, st, 48);
|
||||
if(icon_96 != NULL)
|
||||
mime_icons(browser->mime, type, 96, icon_96, -1);
|
||||
*icon_96 = vfs_mime_folder_icon(browser->mime, name, st, 96);
|
||||
}
|
||||
|
||||
static gboolean _refresh_new_idle(gpointer data)
|
||||
|
|
62
src/vfs.c
62
src/vfs.c
|
@ -15,6 +15,9 @@
|
|||
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <libgen.h>
|
||||
#include "vfs.h"
|
||||
|
||||
|
||||
|
@ -34,6 +37,65 @@ int vfs_closedir(DIR * dir)
|
|||
}
|
||||
|
||||
|
||||
/* vfs_folder_icon */
|
||||
GdkPixbuf * vfs_mime_folder_icon(Mime * mime, char const * filename,
|
||||
struct stat * st, int size)
|
||||
{
|
||||
GdkPixbuf * ret = NULL;
|
||||
char const * icon = NULL;
|
||||
struct stat s;
|
||||
char * p;
|
||||
struct stat lst;
|
||||
size_t i;
|
||||
struct
|
||||
{
|
||||
char const * name;
|
||||
char const * icon;
|
||||
} name_icon[] =
|
||||
{
|
||||
{ "Desktop", "gnome-fs-desktop" },
|
||||
{ "Documents", "folder-documents" },
|
||||
{ "Download", "folder-download" },
|
||||
{ "Downloads", "folder-download" },
|
||||
{ "Music", "folder-music" },
|
||||
{ "Pictures", "folder-pictures" },
|
||||
{ "public_html","folder-publicshared" },
|
||||
{ "Templates", "folder-templates" },
|
||||
{ "Video", "folder-videos" },
|
||||
{ "Videos", "folder-videos" },
|
||||
};
|
||||
GtkIconTheme * icontheme;
|
||||
int flags = GTK_ICON_LOOKUP_FORCE_SIZE;
|
||||
|
||||
if(st == NULL && lstat(filename, &s) == 0)
|
||||
st = &s;
|
||||
/* check if the folder is a mountpoint */
|
||||
if((p = strdup(filename)) != NULL
|
||||
&& st != NULL
|
||||
&& lstat(dirname(p), &lst) == 0
|
||||
&& st->st_dev != lst.st_dev)
|
||||
icon = "mount-point";
|
||||
if(p != NULL && icon == NULL)
|
||||
for(i = 0; i < sizeof(name_icon) / sizeof(*name_icon); i++)
|
||||
if(strcasecmp(basename(p), name_icon[i].name) == 0)
|
||||
{
|
||||
icon = name_icon[i].icon;
|
||||
break;
|
||||
}
|
||||
free(p);
|
||||
if(icon != NULL)
|
||||
{
|
||||
icontheme = gtk_icon_theme_get_default();
|
||||
ret = gtk_icon_theme_load_icon(icontheme, icon, size, flags,
|
||||
NULL);
|
||||
}
|
||||
/* generic fallback */
|
||||
if(ret == NULL)
|
||||
mime_icons(mime, "inode/directory", size, &ret, -1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* vfs_mime_icon */
|
||||
GdkPixbuf * vfs_mime_icon(Mime * mime, char const * type, struct stat * st,
|
||||
int size)
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
/* public */
|
||||
/* functions */
|
||||
int vfs_closedir(DIR * dir);
|
||||
GdkPixbuf * vfs_mime_folder_icon(Mime * mime, char const * name,
|
||||
struct stat * st, int size);
|
||||
int vfs_lstat(char const * filename, struct stat * st);
|
||||
GdkPixbuf * vfs_mime_icon(Mime * mime, char const * type, struct stat * st,
|
||||
int size);
|
||||
|
|
Loading…
Reference in New Issue
Block a user