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>
|
2004-02-12 Mark McLoughlin <mark@skynet.ie>
|
||||||
|
|
||||||
* file-types-capplet.c: (cb_file_type_dialog_response): Update help
|
* 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",
|
g_param_spec_pointer ("mime-type-info",
|
||||||
_("MIME type information"),
|
_("MIME type information"),
|
||||||
_("Structure with data on the MIME type"),
|
_("Structure with data on the MIME type"),
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
(object_class, PROP_IS_ADD,
|
(object_class, PROP_IS_ADD,
|
||||||
|
@ -270,7 +270,7 @@ mime_edit_dialog_class_init (MimeEditDialogClass *class)
|
||||||
_("Is add dialog"),
|
_("Is add dialog"),
|
||||||
_("True if this dialog is for adding a MIME type"),
|
_("True if this dialog is for adding a MIME type"),
|
||||||
FALSE,
|
FALSE,
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
dialog_signals[DONE] =
|
dialog_signals[DONE] =
|
||||||
g_signal_new ("done",
|
g_signal_new ("done",
|
||||||
|
|
|
@ -46,19 +46,110 @@ static GSList *get_lang_list (void);
|
||||||
static gchar *form_extensions_string (const MimeTypeInfo *info,
|
static gchar *form_extensions_string (const MimeTypeInfo *info,
|
||||||
gchar *sep,
|
gchar *sep,
|
||||||
gchar *prepend);
|
gchar *prepend);
|
||||||
static void get_icon_pixbuf (MimeTypeInfo *info,
|
|
||||||
const gchar *icon_path,
|
|
||||||
gboolean want_large);
|
|
||||||
|
|
||||||
static MimeCategoryInfo *get_category (const gchar *category_name,
|
static MimeCategoryInfo *get_category (const gchar *category_name,
|
||||||
const gchar *category_desc,
|
const gchar *category_desc,
|
||||||
GtkTreeModel *model);
|
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
|
void
|
||||||
load_all_mime_types (GtkTreeModel *model)
|
load_all_mime_types (GtkTreeModel *model)
|
||||||
{
|
{
|
||||||
|
@ -140,10 +231,8 @@ mime_type_info_get_icon (MimeTypeInfo *info)
|
||||||
{
|
{
|
||||||
if (info->small_icon_pixbuf == NULL)
|
if (info->small_icon_pixbuf == NULL)
|
||||||
get_icon_pixbuf (info, mime_type_info_get_icon_path (info), FALSE);
|
get_icon_pixbuf (info, mime_type_info_get_icon_path (info), FALSE);
|
||||||
|
|
||||||
if (info->small_icon_pixbuf != NULL)
|
if (info->small_icon_pixbuf != NULL)
|
||||||
g_object_ref (G_OBJECT (info->small_icon_pixbuf));
|
g_object_ref (G_OBJECT (info->small_icon_pixbuf));
|
||||||
|
|
||||||
return 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;
|
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 *
|
static MimeCategoryInfo *
|
||||||
get_category (const gchar *category_name, const gchar *category_desc, GtkTreeModel *model)
|
get_category (const gchar *category_name, const gchar *category_desc, GtkTreeModel *model)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue