Mercurial > pidgin.yaz
comparison pidgin/gtksmiley.c @ 27120:804141095de5
Allow adding received animated custom smileys to locale custom smiley
collection. Closes #9066.
committer: Sadrul Habib Chowdhury <imadil@gmail.com>
author | Andrea Piccinelli <frasten@gmail.com> |
---|---|
date | Fri, 05 Jun 2009 08:23:18 +0000 |
parents | 38a5df43d525 |
children | 5dcee348bc22 |
comparison
equal
deleted
inserted
replaced
27119:f3b0232ef1ea | 27120:804141095de5 |
---|---|
45 GtkWidget *parent; | 45 GtkWidget *parent; |
46 GtkWidget *smile; | 46 GtkWidget *smile; |
47 GtkWidget *smiley_image; | 47 GtkWidget *smiley_image; |
48 gchar *filename; | 48 gchar *filename; |
49 GdkPixbuf *custom_pixbuf; | 49 GdkPixbuf *custom_pixbuf; |
50 gpointer data; /** @since 2.6.0 */ | |
51 gsize datasize; /** @since 2.6.0 */ | |
50 }; | 52 }; |
51 | 53 |
52 typedef struct | 54 typedef struct |
53 { | 55 { |
54 GtkWidget *window; | 56 GtkWidget *window; |
275 } | 277 } |
276 | 278 |
277 purple_debug_info("gtksmiley", "adding a new smiley\n"); | 279 purple_debug_info("gtksmiley", "adding a new smiley\n"); |
278 | 280 |
279 if (s->filename == NULL) { | 281 if (s->filename == NULL) { |
280 /* Get the smiley from the custom pixbuf */ | |
281 gchar *buffer = NULL; | 282 gchar *buffer = NULL; |
282 gsize size = 0; | 283 gsize size = 0; |
283 gchar *filename; | 284 gchar *filename; |
284 const gchar *dirname = purple_smileys_get_storing_dir(); | 285 const gchar *dirname = purple_smileys_get_storing_dir(); |
285 | 286 |
294 "Unable to create directory %s: %s\n", | 295 "Unable to create directory %s: %s\n", |
295 dirname, g_strerror(errno)); | 296 dirname, g_strerror(errno)); |
296 } | 297 } |
297 } | 298 } |
298 | 299 |
299 gdk_pixbuf_save_to_buffer(s->custom_pixbuf, &buffer, &size, | 300 if (s->data && s->datasize) { |
300 "png", NULL, "compression", "9", NULL, NULL); | 301 /* Cached data & size in memory */ |
302 buffer = s->data; | |
303 size = s->datasize; | |
304 } | |
305 else { | |
306 /* Get the smiley from the custom pixbuf */ | |
307 gdk_pixbuf_save_to_buffer(s->custom_pixbuf, &buffer, &size, | |
308 "png", NULL, "compression", "9", NULL, NULL); | |
309 } | |
301 filename = purple_util_get_image_filename(buffer, size); | 310 filename = purple_util_get_image_filename(buffer, size); |
302 s->filename = g_build_filename(dirname, filename, NULL); | 311 s->filename = g_build_filename(dirname, filename, NULL); |
303 purple_util_write_data_to_file_absolute(s->filename, buffer, size); | 312 purple_util_write_data_to_file_absolute(s->filename, buffer, size); |
304 g_free(filename); | 313 g_free(filename); |
305 g_free(buffer); | 314 g_free(buffer); |
461 if (editor->custom_pixbuf) | 470 if (editor->custom_pixbuf) |
462 g_object_unref(G_OBJECT(editor->custom_pixbuf)); | 471 g_object_unref(G_OBJECT(editor->custom_pixbuf)); |
463 editor->custom_pixbuf = image ? g_object_ref(G_OBJECT(image)) : NULL; | 472 editor->custom_pixbuf = image ? g_object_ref(G_OBJECT(image)) : NULL; |
464 if (image) | 473 if (image) |
465 gtk_image_set_from_pixbuf(GTK_IMAGE(editor->smiley_image), image); | 474 gtk_image_set_from_pixbuf(GTK_IMAGE(editor->smiley_image), image); |
475 } | |
476 | |
477 void | |
478 pidgin_smiley_editor_set_data(PidginSmiley *editor, gpointer *data, gsize datasize) | |
479 { | |
480 editor->data = data; | |
481 editor->datasize = datasize; | |
466 } | 482 } |
467 | 483 |
468 /****************************************************************************** | 484 /****************************************************************************** |
469 * Delete smiley | 485 * Delete smiley |
470 *****************************************************************************/ | 486 *****************************************************************************/ |