gtk+ r20820 - trunk/gdk-pixbuf
- From: matthiasc svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r20820 - trunk/gdk-pixbuf
- Date: Sat, 12 Jul 2008 02:37:35 +0000 (UTC)
Author: matthiasc
Date: Sat Jul 12 02:37:35 2008
New Revision: 20820
URL: http://svn.gnome.org/viewvc/gtk+?rev=20820&view=rev
Log:
2008-07-11 Matthias Clasen <mclasen redhat com>
* gdk-pixbuf-io.c: Use GIO for sniffing image types, except
on Win32, where GIO doesn't do any sniffing.
Modified:
trunk/gdk-pixbuf/ChangeLog
trunk/gdk-pixbuf/gdk-pixbuf-io.c
Modified: trunk/gdk-pixbuf/gdk-pixbuf-io.c
==============================================================================
--- trunk/gdk-pixbuf/gdk-pixbuf-io.c (original)
+++ trunk/gdk-pixbuf/gdk-pixbuf-io.c Sat Jul 12 02:37:35 2008
@@ -51,6 +51,12 @@
#define SNIFF_BUFFER_SIZE 4096
#define LOAD_BUFFER_SIZE 65536
+#ifndef G_OS_WIN32
+/* GIO doesn't do mime sniffing on Win32, so we need to do our own */
+#define GDK_PIXBUF_USE_GIO_MIME 1
+#endif
+
+#ifndef GDK_PIXBUF_USE_GIO_MIME
static gint
format_check (GdkPixbufModule *module, guchar *buffer, int size)
{
@@ -102,6 +108,7 @@
}
return 0;
}
+#endif
G_LOCK_DEFINE_STATIC (init_lock);
G_LOCK_DEFINE_STATIC (threadunsafe_loader_lock);
@@ -763,9 +770,33 @@
{
GSList *modules;
- gint score, best = 0;
GdkPixbufModule *selected = NULL;
gchar *display_name = NULL;
+#ifdef GDK_PIXBUF_USE_GIO_MIME
+ gchar *mime_type;
+ gchar **mimes;
+ gint j;
+
+ mime_type = g_content_type_guess (filename, buffer, size, NULL);
+
+ for (modules = get_file_formats (); modules; modules = g_slist_next (modules)) {
+ GdkPixbufModule *module = (GdkPixbufModule *)modules->data;
+ GdkPixbufFormat *info = module->info;
+
+ if (info->disabled)
+ continue;
+
+ mimes = info->mime_types;
+ for (j = 0; mimes[j] != NULL; j++) {
+ if (g_ascii_strcasecmp (mimes[j], mime_type) == 0) {
+ selected = module;
+ break;
+ }
+ }
+ }
+ g_free (mime_type);
+#else
+ gint score, best = 0;
for (modules = get_file_formats (); modules; modules = g_slist_next (modules)) {
GdkPixbufModule *module = (GdkPixbufModule *)modules->data;
@@ -781,6 +812,8 @@
if (score >= 100)
break;
}
+#endif
+
if (selected != NULL)
return selected;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]