diff -r 61b755f852a7 -r bc5253318167 pidgin/gtkwebviewtoolbar.c --- a/pidgin/gtkwebviewtoolbar.c Tue Apr 08 17:51:13 2014 +0200 +++ b/pidgin/gtkwebviewtoolbar.c Tue Apr 08 18:01:04 2014 +0200 @@ -702,15 +702,29 @@ static void insert_smiley_text(GtkWidget *widget, PidginWebViewToolbar *toolbar) { - char *smiley_text, *escaped_smiley; + PurpleSmiley *smiley; + PurpleStoredImage *image; + int image_id; + gchar *escaped_smiley, *smiley_html; + const gchar *smiley_class; - smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); - escaped_smiley = g_markup_escape_text(smiley_text, -1); + smiley = g_object_get_data(G_OBJECT(widget), "smiley"); + smiley_class = g_object_get_data(G_OBJECT(widget), "smiley-class"); + image = purple_smiley_get_image(smiley); + image_id = purple_imgstore_add_with_id(image); + + escaped_smiley = g_markup_escape_text( + purple_smiley_get_shortcut(smiley), -1); + smiley_html = g_strdup_printf("\"%s\"", + image_id, smiley_class, escaped_smiley, escaped_smiley); + + g_free(escaped_smiley); pidgin_webview_append_html(PIDGIN_WEBVIEW(toolbar->webview), - escaped_smiley); + smiley_html); - g_free(escaped_smiley); + g_free(smiley_html); close_smiley_dialog(toolbar); } @@ -778,7 +792,8 @@ static void add_smiley_list(PidginWebViewToolbar *toolbar, GtkWidget *container, - GList *smileys, int max_width, PurpleSmileyList *shadow_smileys) + GList *smileys, int max_width, PurpleSmileyList *shadow_smileys, + const gchar *smiley_class) { GList *it; GtkWidget *line; @@ -815,8 +830,13 @@ button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(button), GTK_WIDGET(image)); - g_object_set_data_full(G_OBJECT(button), "smiley_text", - g_strdup(smiley_shortcut), g_free); + + g_object_ref(smiley); + g_object_set_data_full(G_OBJECT(button), "smiley", + smiley, g_object_unref); + g_object_set_data(G_OBJECT(button), + "smiley-class", (gpointer)smiley_class); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); gtk_widget_set_tooltip_text(button, smiley_shortcut); @@ -946,7 +966,7 @@ /* Add buttons for smileys. */ if (theme_smileys) { add_smiley_list(toolbar, smiley_table, theme_smileys, - max_line_width, smileys_from_custom); + max_line_width, smileys_from_custom, "theme"); } if (theme_smileys && custom_smileys) { gtk_box_pack_start(GTK_BOX(smiley_table), @@ -955,7 +975,7 @@ } if (custom_smileys) { add_smiley_list(toolbar, smiley_table, custom_smileys, - max_line_width, NULL); + max_line_width, NULL, "custom"); } gtk_widget_add_events(dialog, GDK_KEY_PRESS_MASK);