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 *****************************************************************************/