mirror of https://github.com/GNOME/gimp.git
app: add gimp_imagegile_get_gicon() which uses async API and can't block
and use it in gimp_view_renderer_imagefile_get_icon().
This commit is contained in:
parent
276ceddec9
commit
ab607a0adc
|
@ -63,6 +63,8 @@ struct _GimpImagefilePrivate
|
||||||
Gimp *gimp;
|
Gimp *gimp;
|
||||||
|
|
||||||
GimpThumbnail *thumbnail;
|
GimpThumbnail *thumbnail;
|
||||||
|
GIcon *icon;
|
||||||
|
GCancellable *icon_cancellable;
|
||||||
|
|
||||||
gchar *description;
|
gchar *description;
|
||||||
gboolean static_desc;
|
gboolean static_desc;
|
||||||
|
@ -73,6 +75,7 @@ struct _GimpImagefilePrivate
|
||||||
GimpImagefilePrivate)
|
GimpImagefilePrivate)
|
||||||
|
|
||||||
|
|
||||||
|
static void gimp_imagefile_dispose (GObject *object);
|
||||||
static void gimp_imagefile_finalize (GObject *object);
|
static void gimp_imagefile_finalize (GObject *object);
|
||||||
|
|
||||||
static void gimp_imagefile_name_changed (GimpObject *object);
|
static void gimp_imagefile_name_changed (GimpObject *object);
|
||||||
|
@ -97,6 +100,10 @@ static gboolean gimp_imagefile_save_thumb (GimpImagefile *imagefile,
|
||||||
static gchar * gimp_imagefile_get_description (GimpViewable *viewable,
|
static gchar * gimp_imagefile_get_description (GimpViewable *viewable,
|
||||||
gchar **tooltip);
|
gchar **tooltip);
|
||||||
|
|
||||||
|
static void gimp_imagefile_icon_callback (GObject *source_object,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer data);
|
||||||
|
|
||||||
static void gimp_thumbnail_set_info_from_image (GimpThumbnail *thumbnail,
|
static void gimp_thumbnail_set_info_from_image (GimpThumbnail *thumbnail,
|
||||||
const gchar *mime_type,
|
const gchar *mime_type,
|
||||||
GimpImage *image);
|
GimpImage *image);
|
||||||
|
@ -132,6 +139,7 @@ gimp_imagefile_class_init (GimpImagefileClass *klass)
|
||||||
gimp_marshal_VOID__VOID,
|
gimp_marshal_VOID__VOID,
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
|
|
||||||
|
object_class->dispose = gimp_imagefile_dispose;
|
||||||
object_class->finalize = gimp_imagefile_finalize;
|
object_class->finalize = gimp_imagefile_finalize;
|
||||||
|
|
||||||
gimp_object_class->name_changed = gimp_imagefile_name_changed;
|
gimp_object_class->name_changed = gimp_imagefile_name_changed;
|
||||||
|
@ -164,6 +172,21 @@ gimp_imagefile_init (GimpImagefile *imagefile)
|
||||||
imagefile, G_CONNECT_SWAPPED);
|
imagefile, G_CONNECT_SWAPPED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_imagefile_dispose (GObject *object)
|
||||||
|
{
|
||||||
|
GimpImagefilePrivate *private = GET_PRIVATE (object);
|
||||||
|
|
||||||
|
if (private->icon_cancellable)
|
||||||
|
{
|
||||||
|
g_cancellable_cancel (private->icon_cancellable);
|
||||||
|
g_object_unref (private->icon_cancellable);
|
||||||
|
private->icon_cancellable = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_imagefile_finalize (GObject *object)
|
gimp_imagefile_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
|
@ -183,6 +206,12 @@ gimp_imagefile_finalize (GObject *object)
|
||||||
private->thumbnail = NULL;
|
private->thumbnail = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (private->icon)
|
||||||
|
{
|
||||||
|
g_object_unref (private->icon);
|
||||||
|
private->icon = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,6 +241,39 @@ gimp_imagefile_get_thumbnail (GimpImagefile *imagefile)
|
||||||
return GET_PRIVATE (imagefile)->thumbnail;
|
return GET_PRIVATE (imagefile)->thumbnail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GIcon *
|
||||||
|
gimp_imagefile_get_gicon (GimpImagefile *imagefile)
|
||||||
|
{
|
||||||
|
GimpImagefilePrivate *private;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GIMP_IS_IMAGEFILE (imagefile), NULL);
|
||||||
|
|
||||||
|
private = GET_PRIVATE (imagefile);
|
||||||
|
|
||||||
|
if (private->icon)
|
||||||
|
return private->icon;
|
||||||
|
|
||||||
|
if (! private->icon_cancellable)
|
||||||
|
{
|
||||||
|
GFile *file;
|
||||||
|
|
||||||
|
file = g_file_new_for_uri (gimp_object_get_name (imagefile));
|
||||||
|
|
||||||
|
private->icon_cancellable = g_cancellable_new ();
|
||||||
|
|
||||||
|
g_file_query_info_async (file, "standard::icon",
|
||||||
|
G_FILE_QUERY_INFO_NONE,
|
||||||
|
G_PRIORITY_DEFAULT,
|
||||||
|
private->icon_cancellable,
|
||||||
|
gimp_imagefile_icon_callback,
|
||||||
|
imagefile);
|
||||||
|
|
||||||
|
g_object_unref (file);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_imagefile_set_mime_type (GimpImagefile *imagefile,
|
gimp_imagefile_set_mime_type (GimpImagefile *imagefile,
|
||||||
const gchar *mime_type)
|
const gchar *mime_type)
|
||||||
|
@ -559,6 +621,37 @@ gimp_imagefile_get_description (GimpViewable *viewable,
|
||||||
return basename;
|
return basename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_imagefile_icon_callback (GObject *source_object,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GimpImagefile *imagefile = GIMP_IMAGEFILE (data);
|
||||||
|
GimpImagefilePrivate *private = GET_PRIVATE (imagefile);
|
||||||
|
GFile *file = G_FILE (source_object);
|
||||||
|
GError *error = NULL;
|
||||||
|
GFileInfo *file_info;
|
||||||
|
|
||||||
|
file_info = g_file_query_info_finish (file, result, &error);
|
||||||
|
|
||||||
|
if (file_info)
|
||||||
|
{
|
||||||
|
private->icon = g_object_ref (g_file_info_get_icon (file_info));
|
||||||
|
g_object_unref (file_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_clear_error (&error);
|
||||||
|
|
||||||
|
if (private->icon_cancellable)
|
||||||
|
{
|
||||||
|
g_object_unref (private->icon_cancellable);
|
||||||
|
private->icon_cancellable = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (private->icon)
|
||||||
|
gimp_viewable_invalidate_preview (GIMP_VIEWABLE (imagefile));
|
||||||
|
}
|
||||||
|
|
||||||
const gchar *
|
const gchar *
|
||||||
gimp_imagefile_get_desc_string (GimpImagefile *imagefile)
|
gimp_imagefile_get_desc_string (GimpImagefile *imagefile)
|
||||||
{
|
{
|
||||||
|
|
|
@ -59,6 +59,7 @@ GimpImagefile * gimp_imagefile_new (Gimp *gimp,
|
||||||
const gchar *uri);
|
const gchar *uri);
|
||||||
|
|
||||||
GimpThumbnail * gimp_imagefile_get_thumbnail (GimpImagefile *imagefile);
|
GimpThumbnail * gimp_imagefile_get_thumbnail (GimpImagefile *imagefile);
|
||||||
|
GIcon * gimp_imagefile_get_gicon (GimpImagefile *imagefile);
|
||||||
|
|
||||||
void gimp_imagefile_set_mime_type (GimpImagefile *imagefile,
|
void gimp_imagefile_set_mime_type (GimpImagefile *imagefile,
|
||||||
const gchar *mime_type);
|
const gchar *mime_type);
|
||||||
|
|
|
@ -164,18 +164,9 @@ gimp_view_renderer_imagefile_get_icon (GimpImagefile *imagefile,
|
||||||
if (! gimp_object_get_name (imagefile))
|
if (! gimp_object_get_name (imagefile))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (! pixbuf)
|
if (! pixbuf)
|
||||||
{
|
{
|
||||||
GFile *file;
|
GIcon *icon = gimp_imagefile_get_gicon (imagefile);
|
||||||
GFileInfo *file_info;
|
|
||||||
|
|
||||||
file = g_file_new_for_uri (gimp_object_get_name (imagefile));
|
|
||||||
file_info = g_file_query_info (file, "standard::icon", 0, NULL, NULL);
|
|
||||||
|
|
||||||
if (file_info)
|
|
||||||
{
|
|
||||||
GIcon *icon = g_file_info_get_icon (file_info);
|
|
||||||
|
|
||||||
if (icon)
|
if (icon)
|
||||||
{
|
{
|
||||||
|
@ -186,21 +177,8 @@ gimp_view_renderer_imagefile_get_icon (GimpImagefile *imagefile,
|
||||||
if (info)
|
if (info)
|
||||||
pixbuf = gtk_icon_info_load_icon (info, NULL);
|
pixbuf = gtk_icon_info_load_icon (info, NULL);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifdef GIMP_UNSTABLE
|
|
||||||
g_printerr ("no icon for: %s\n",
|
|
||||||
gimp_object_get_name (imagefile));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_unref (file_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (file);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (! pixbuf && thumbnail->image_mimetype)
|
if (! pixbuf && thumbnail->image_mimetype)
|
||||||
{
|
{
|
||||||
pixbuf = get_icon_for_mime_type (thumbnail->image_mimetype,
|
pixbuf = get_icon_for_mime_type (thumbnail->image_mimetype,
|
||||||
|
|
Loading…
Reference in New Issue