diff --git a/src/browser.c b/src/browser.c index cc57cd1..0c1e992 100644 --- a/src/browser.c +++ b/src/browser.c @@ -164,7 +164,7 @@ Browser * browser_new(char const * directory) gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); - widget = gtk_label_new("Location: "); + widget = gtk_label_new(" Location: "); toolitem = gtk_tool_item_new(); gtk_container_add(GTK_CONTAINER(toolitem), widget); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolitem, -1); @@ -204,7 +204,7 @@ Browser * browser_new(char const * directory) BR_COL_DISPLAY_NAME); gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(browser->iconview), BR_COL_PIXBUF); - g_signal_connect(browser->iconview, "item_activated", + g_signal_connect(browser->iconview, "item-activated", G_CALLBACK(_browser_on_icon_default), browser); gtk_container_add(GTK_CONTAINER(sw), browser->iconview); gtk_widget_grab_focus(browser->iconview); @@ -278,12 +278,9 @@ static void _fill_store(Browser * browser) { gchar * path, * display_name; char const * type; - char buf[256]; - char * p; gboolean is_dir; GdkPixbuf * icon; - strcpy(buf, "gnome-mime-"); if(name[0] == '.') /* FIXME optional */ continue; path = g_build_filename(browser->current->data, name, NULL); @@ -296,22 +293,9 @@ static void _fill_store(Browser * browser) && (type = mime_type(browser->mime, name)) != NULL) { - strncpy(&buf[11], type, sizeof(buf)-11); - for(; (p = strchr(&buf[11], '/')) != NULL; *p = '-'); - if((icon = gtk_icon_theme_load_icon(browser->theme, - buf, 48, 0, NULL)) - == NULL) - { - if((p = strchr(&buf[11], '-')) != NULL) - { - *p = '\0'; - icon = gtk_icon_theme_load_icon( - browser->theme, buf, 48, - 0, NULL); - } - if(icon == NULL) - icon = browser->pb_file; - } + if((icon = mime_icon(browser->mime, browser->theme, + type)) == NULL) + icon = browser->pb_file; } else icon = browser->pb_file; diff --git a/src/mime.c b/src/mime.c index bcdd9dc..13e54f0 100644 --- a/src/mime.c +++ b/src/mime.c @@ -56,7 +56,8 @@ Mime * mime_new(void) break; mime->types = p; p[mime->types_cnt].type = strdup(buf); - p[mime->types_cnt++].glob = strdup(glob); + p[mime->types_cnt].glob = strdup(glob); + p[mime->types_cnt++].icon = NULL; if(p[mime->types_cnt-1].type == NULL || p[mime->types_cnt-1].glob == NULL) break; @@ -80,6 +81,7 @@ void mime_delete(Mime * mime) { free(mime->types[i].type); free(mime->types[i].glob); + free(mime->types[i].icon); } free(mime->types); free(mime); @@ -96,3 +98,32 @@ char const * mime_type(Mime * mime, char const * path) break; return i < mime->types_cnt ? mime->types[i].type : NULL; } + + +GdkPixbuf * mime_icon(Mime * mime, GtkIconTheme * theme, char const * type) +{ + unsigned int i; + static char buf[256] = "gnome-mime-"; + char * p; + + for(i = 0; i < mime->types_cnt; i++) + if(strcmp(type, mime->types[i].type) == 0) + break; + if(i == mime->types_cnt) + return NULL; + if(mime->types[i].icon != NULL) + return mime->types[i].icon; + strncpy(&buf[11], type, sizeof(buf)-11); + for(; (p = strchr(&buf[11], '/')) != NULL; *p = '-'); + if((mime->types[i].icon = gtk_icon_theme_load_icon(theme, buf, 48, 0, + NULL)) == NULL) + { + if((p = strchr(&buf[11], '-')) != NULL) + { + *p = '\0'; + mime->types[i].icon = gtk_icon_theme_load_icon(theme, + buf, 48, 0, NULL); + } + } + return mime->types[i].icon; +} diff --git a/src/mime.h b/src/mime.h index 5593915..1a0cb80 100644 --- a/src/mime.h +++ b/src/mime.h @@ -12,6 +12,7 @@ typedef struct _MimeType { char * type; char * glob; + GdkPixbuf * icon; } MimeType; typedef struct _Mime @@ -27,5 +28,6 @@ void mime_delete(Mime * mime); /* useful */ char const * mime_type(Mime * mime, char const * path); +GdkPixbuf * mime_icon(Mime * mime, GtkIconTheme * theme, char const * type); #endif /* !BROWSER_MIME_H */