rework to match nautilus and use icon themes somewhat. There is some
2004-02-10 Jody Goldberg <jody@gnome.org> * mime-type-info.c : rework to match nautilus and use icon themes somewhat. There is some serious cruft left in here. 2004-02-04 Jody Goldberg <jody@gnome.org> * mime-edit-dialog.c (mime_edit_dialog_class_init) : do not call these construct only properties so that the info can change later.
This commit is contained in:
parent
a9c54dd7e9
commit
ff003126bb
3 changed files with 109 additions and 93 deletions
|
@ -1,3 +1,13 @@
|
|||
2004-02-10 Jody Goldberg <jody@gnome.org>
|
||||
|
||||
* mime-type-info.c : rework to match nautilus and use icon themes
|
||||
somewhat. There is some serious cruft left in here.
|
||||
|
||||
2004-02-04 Jody Goldberg <jody@gnome.org>
|
||||
|
||||
* mime-edit-dialog.c (mime_edit_dialog_class_init) : do not call these
|
||||
construct only properties so that the info can change later.
|
||||
|
||||
2004-02-12 Mark McLoughlin <mark@skynet.ie>
|
||||
|
||||
* file-types-capplet.c: (cb_file_type_dialog_response): Update help
|
||||
|
|
|
@ -262,7 +262,7 @@ mime_edit_dialog_class_init (MimeEditDialogClass *class)
|
|||
g_param_spec_pointer ("mime-type-info",
|
||||
_("MIME type information"),
|
||||
_("Structure with data on the MIME type"),
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(object_class, PROP_IS_ADD,
|
||||
|
@ -270,7 +270,7 @@ mime_edit_dialog_class_init (MimeEditDialogClass *class)
|
|||
_("Is add dialog"),
|
||||
_("True if this dialog is for adding a MIME type"),
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
dialog_signals[DONE] =
|
||||
g_signal_new ("done",
|
||||
|
|
|
@ -46,19 +46,110 @@ static GSList *get_lang_list (void);
|
|||
static gchar *form_extensions_string (const MimeTypeInfo *info,
|
||||
gchar *sep,
|
||||
gchar *prepend);
|
||||
static void get_icon_pixbuf (MimeTypeInfo *info,
|
||||
const gchar *icon_path,
|
||||
gboolean want_large);
|
||||
|
||||
static MimeCategoryInfo *get_category (const gchar *category_name,
|
||||
const gchar *category_desc,
|
||||
GtkTreeModel *model);
|
||||
|
||||
gchar *get_real_icon_path (const MimeTypeInfo *info,
|
||||
const gchar *icon_name);
|
||||
|
||||
|
||||
|
||||
static gchar *
|
||||
get_real_icon_path (const MimeTypeInfo *info, const gchar *icon_name)
|
||||
{
|
||||
gchar *tmp, *tmp1, *ret, *real_icon_name;
|
||||
|
||||
if (icon_name == NULL || *icon_name == '\0') {
|
||||
tmp = g_strdup (info->mime_type);
|
||||
tmp1 = strchr (tmp, '/');
|
||||
if (tmp1 != NULL) *tmp1 = '-';
|
||||
real_icon_name = g_strconcat ("gnome-mime-", tmp, NULL);
|
||||
g_free (tmp);
|
||||
} else
|
||||
real_icon_name = g_strdup (icon_name);
|
||||
|
||||
ret = gnome_vfs_icon_path_from_filename (real_icon_name);
|
||||
|
||||
if (ret == NULL) {
|
||||
GtkIconInfo *info;
|
||||
|
||||
info = gtk_icon_theme_lookup_icon (
|
||||
gtk_icon_theme_get_default (), real_icon_name, 48, 0);
|
||||
if (info != NULL)
|
||||
ret = g_strdup (gtk_icon_info_get_filename (info));
|
||||
else if (icon_name != NULL) {
|
||||
info = gtk_icon_theme_lookup_icon (
|
||||
gtk_icon_theme_get_default (), icon_name, 48, 0);
|
||||
if (info != NULL)
|
||||
ret = g_strdup (gtk_icon_info_get_filename (info));
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == NULL && strstr (real_icon_name, ".png") == NULL) {
|
||||
tmp = g_strconcat (real_icon_name, ".png", NULL);
|
||||
ret = gnome_vfs_icon_path_from_filename (tmp);
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
if (ret == NULL) {
|
||||
tmp = g_strconcat ("nautilus/", real_icon_name, NULL);
|
||||
ret = gnome_vfs_icon_path_from_filename (tmp);
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
if (ret == NULL && strstr (real_icon_name, ".png") == NULL) {
|
||||
tmp = g_strconcat ("nautilus/", real_icon_name, ".png", NULL);
|
||||
ret = gnome_vfs_icon_path_from_filename (tmp);
|
||||
g_free (tmp);
|
||||
}
|
||||
g_free (real_icon_name);
|
||||
|
||||
if (ret == NULL)
|
||||
ret = gnome_vfs_icon_path_from_filename ("nautilus/i-regular-24.png");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Loads a pixbuf for the icon, falling back on the default icon if
|
||||
* necessary
|
||||
*/
|
||||
static void
|
||||
get_icon_pixbuf (MimeTypeInfo *info, const gchar *icon_path, gboolean want_large)
|
||||
{
|
||||
static GHashTable *icon_table = NULL;
|
||||
|
||||
if (icon_path == NULL)
|
||||
icon_path = get_real_icon_path (info, NULL);
|
||||
|
||||
if (icon_path == NULL)
|
||||
return;
|
||||
|
||||
if ((want_large && info->icon_pixbuf != NULL) || info->small_icon_pixbuf != NULL)
|
||||
return;
|
||||
|
||||
if (icon_table == NULL)
|
||||
icon_table = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
if (!want_large)
|
||||
info->small_icon_pixbuf = g_hash_table_lookup (icon_table, icon_path);
|
||||
|
||||
if (info->small_icon_pixbuf != NULL) {
|
||||
g_object_ref (G_OBJECT (info->small_icon_pixbuf));
|
||||
} else {
|
||||
info->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);
|
||||
|
||||
if (info->icon_pixbuf == NULL) {
|
||||
get_icon_pixbuf (info, NULL, want_large);
|
||||
}
|
||||
else if (!want_large) {
|
||||
info->small_icon_pixbuf =
|
||||
gdk_pixbuf_scale_simple (info->icon_pixbuf, 16, 16, GDK_INTERP_HYPER);
|
||||
|
||||
g_hash_table_insert (icon_table, g_strdup (icon_path), info->small_icon_pixbuf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
load_all_mime_types (GtkTreeModel *model)
|
||||
{
|
||||
|
@ -140,10 +231,8 @@ mime_type_info_get_icon (MimeTypeInfo *info)
|
|||
{
|
||||
if (info->small_icon_pixbuf == NULL)
|
||||
get_icon_pixbuf (info, mime_type_info_get_icon_path (info), FALSE);
|
||||
|
||||
if (info->small_icon_pixbuf != NULL)
|
||||
g_object_ref (G_OBJECT (info->small_icon_pixbuf));
|
||||
|
||||
return info->small_icon_pixbuf;
|
||||
}
|
||||
|
||||
|
@ -707,89 +796,6 @@ form_extensions_string (const MimeTypeInfo *info, gchar *sep, gchar *prepend)
|
|||
return tmp;
|
||||
}
|
||||
|
||||
gchar *get_real_icon_path (const MimeTypeInfo *info, const gchar *icon_name)
|
||||
{
|
||||
gchar *tmp, *tmp1, *ret, *real_icon_name;
|
||||
|
||||
if (icon_name == NULL || *icon_name == '\0') {
|
||||
tmp = g_strdup (info->mime_type);
|
||||
tmp1 = strchr (tmp, '/');
|
||||
if (tmp1 != NULL) *tmp1 = '-';
|
||||
real_icon_name = g_strconcat ("document-icons/gnome-", tmp, ".png", NULL);
|
||||
g_free (tmp);
|
||||
} else {
|
||||
real_icon_name = g_strdup (icon_name);
|
||||
}
|
||||
|
||||
ret = gnome_vfs_icon_path_from_filename (real_icon_name);
|
||||
|
||||
if (ret == NULL && strstr (real_icon_name, ".png") == NULL) {
|
||||
tmp = g_strconcat (real_icon_name, ".png", NULL);
|
||||
ret = gnome_vfs_icon_path_from_filename (tmp);
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
if (ret == NULL) {
|
||||
tmp = g_strconcat ("nautilus/", real_icon_name, NULL);
|
||||
ret = gnome_vfs_icon_path_from_filename (tmp);
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
if (ret == NULL && strstr (real_icon_name, ".png") == NULL) {
|
||||
tmp = g_strconcat ("nautilus/", real_icon_name, ".png", NULL);
|
||||
ret = gnome_vfs_icon_path_from_filename (tmp);
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
if (ret == NULL)
|
||||
ret = gnome_vfs_icon_path_from_filename ("nautilus/i-regular-24.png");
|
||||
|
||||
g_free (real_icon_name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Loads a pixbuf for the icon, falling back on the default icon if
|
||||
* necessary
|
||||
*/
|
||||
|
||||
void
|
||||
get_icon_pixbuf (MimeTypeInfo *info, const gchar *icon_path, gboolean want_large)
|
||||
{
|
||||
static GHashTable *icon_table = NULL;
|
||||
|
||||
if (icon_path == NULL)
|
||||
icon_path = get_real_icon_path (info, NULL);
|
||||
|
||||
if (icon_path == NULL)
|
||||
return;
|
||||
|
||||
if ((want_large && info->icon_pixbuf != NULL) || info->small_icon_pixbuf != NULL)
|
||||
return;
|
||||
|
||||
if (icon_table == NULL)
|
||||
icon_table = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
if (!want_large)
|
||||
info->small_icon_pixbuf = g_hash_table_lookup (icon_table, icon_path);
|
||||
|
||||
if (info->small_icon_pixbuf != NULL) {
|
||||
g_object_ref (G_OBJECT (info->small_icon_pixbuf));
|
||||
} else {
|
||||
info->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);
|
||||
|
||||
if (info->icon_pixbuf == NULL) {
|
||||
get_icon_pixbuf (info, NULL, want_large);
|
||||
}
|
||||
else if (!want_large) {
|
||||
info->small_icon_pixbuf =
|
||||
gdk_pixbuf_scale_simple (info->icon_pixbuf, 16, 16, GDK_INTERP_HYPER);
|
||||
|
||||
g_hash_table_insert (icon_table, g_strdup (icon_path), info->small_icon_pixbuf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MimeCategoryInfo *
|
||||
get_category (const gchar *category_name, const gchar *category_desc, GtkTreeModel *model)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue