+Sun Nov 9 23:07:05 2003 Matthias Clasen <maclas@gmx.de>
+
+ * gdk-pixbuf-io.c (_gdk_pixbuf_generic_image_load): If neither
+ load nor begin_load are available fall back to load_animation
+ and use gdk_pixbuf_animation_get_static_image() to obtain a
+ pixbuf. Inefficient, but at least doesn't crash.
+
Sun Nov 9 21:56:20 2003 Matthias Clasen <maclas@gmx.de>
* queryloaders.c (write_loader_info): New function to write
guchar buffer[4096];
size_t length;
GdkPixbuf *pixbuf = NULL;
+ GdkPixbufAnimation *animation = NULL;
gpointer context;
if (module->load != NULL)
return (* module->load) (f, error);
- context = module->begin_load (NULL, prepared_notify, NULL, &pixbuf, error);
-
- if (!context)
- return NULL;
+ if (module->begin_load != NULL) {
+
+ context = module->begin_load (NULL, prepared_notify, NULL, &pixbuf, error);
- while (!feof (f)) {
- length = fread (buffer, 1, sizeof (buffer), f);
- if (length > 0)
- if (!module->load_increment (context, buffer, length, error)) {
- module->stop_load (context, NULL);
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
- return NULL;
- }
+ if (!context)
+ return NULL;
+
+ while (!feof (f)) {
+ length = fread (buffer, 1, sizeof (buffer), f);
+ if (length > 0)
+ if (!module->load_increment (context, buffer, length, error)) {
+ module->stop_load (context, NULL);
+ if (pixbuf != NULL)
+ g_object_unref (pixbuf);
+ return NULL;
+ }
+ }
+
+ if (!module->stop_load (context, error)) {
+ if (pixbuf != NULL)
+ g_object_unref (pixbuf);
+ return NULL;
+ }
+
+ return pixbuf;
}
+
+ if (module->load_animation != NULL) {
+ animation = (* module->load_animation) (f, error);
+ if (animation != NULL) {
+ pixbuf = gdk_pixbuf_animation_get_static_image (animation);
- if (!module->stop_load (context, error)) {
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
- return NULL;
+ g_object_ref (pixbuf);
+
+ g_object_unref (animation);
+
+ return pixbuf;
+ }
}
-
- return pixbuf;
+
+ return NULL;
}
/**