diff -r f11c4b993424 -r 53c6b966ac05 pidgin/plugins/screencap.c --- a/pidgin/plugins/screencap.c Wed Oct 31 01:59:44 2018 +0000 +++ b/pidgin/plugins/screencap.c Thu Nov 01 17:28:46 2018 -0500 @@ -117,34 +117,24 @@ } } -static gboolean -scrncap_pixbuf_to_image_cb(const gchar *buf, gsize count, GError **error, - gpointer data) -{ - PurpleImage *image = *(PurpleImage **)data; - - image = purple_image_new_from_data(buf, count); - - return TRUE; -} - static PurpleImage * scrncap_pixbuf_to_image(GdkPixbuf *pixbuf) { PurpleImage *image = NULL; + gchar *buffer; + gsize count; GError *error = NULL; - gdk_pixbuf_save_to_callback(pixbuf, scrncap_pixbuf_to_image_cb, &image, - "png", &error, NULL); - - if (error != NULL) { + if (!gdk_pixbuf_save_to_buffer(pixbuf, &buffer, &count, "png", + &error, NULL)) { purple_debug_error("screencap", "Failed saving an image: %s", error->message); g_error_free(error); - g_object_unref(image); return NULL; } + image = purple_image_new_take_data((guint8 *)buffer, count); + if (purple_image_get_extension(image) == NULL) { purple_debug_error("screencap", "Invalid image format"); g_object_unref(image);