pidgin/gtkwebviewtoolbar.c

changeset 35796
bc5253318167
parent 35771
d9f3612faf8d
child 35812
48c6ee645ca1
equal deleted inserted replaced
35795:61b755f852a7 35796:bc5253318167
700 } 700 }
701 701
702 static void 702 static void
703 insert_smiley_text(GtkWidget *widget, PidginWebViewToolbar *toolbar) 703 insert_smiley_text(GtkWidget *widget, PidginWebViewToolbar *toolbar)
704 { 704 {
705 char *smiley_text, *escaped_smiley; 705 PurpleSmiley *smiley;
706 706 PurpleStoredImage *image;
707 smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); 707 int image_id;
708 escaped_smiley = g_markup_escape_text(smiley_text, -1); 708 gchar *escaped_smiley, *smiley_html;
709 const gchar *smiley_class;
710
711 smiley = g_object_get_data(G_OBJECT(widget), "smiley");
712 smiley_class = g_object_get_data(G_OBJECT(widget), "smiley-class");
713 image = purple_smiley_get_image(smiley);
714 image_id = purple_imgstore_add_with_id(image);
715
716 escaped_smiley = g_markup_escape_text(
717 purple_smiley_get_shortcut(smiley), -1);
718 smiley_html = g_strdup_printf("<img src=\"" PURPLE_STORED_IMAGE_PROTOCOL
719 "%d\" class=\"emoticon %s-emoticon\" alt=\"%s\" title=\"%s\">",
720 image_id, smiley_class, escaped_smiley, escaped_smiley);
721
722 g_free(escaped_smiley);
709 723
710 pidgin_webview_append_html(PIDGIN_WEBVIEW(toolbar->webview), 724 pidgin_webview_append_html(PIDGIN_WEBVIEW(toolbar->webview),
711 escaped_smiley); 725 smiley_html);
712 726
713 g_free(escaped_smiley); 727 g_free(smiley_html);
714 728
715 close_smiley_dialog(toolbar); 729 close_smiley_dialog(toolbar);
716 } 730 }
717 731
718 static gboolean 732 static gboolean
776 return total_width; 790 return total_width;
777 } 791 }
778 792
779 static void 793 static void
780 add_smiley_list(PidginWebViewToolbar *toolbar, GtkWidget *container, 794 add_smiley_list(PidginWebViewToolbar *toolbar, GtkWidget *container,
781 GList *smileys, int max_width, PurpleSmileyList *shadow_smileys) 795 GList *smileys, int max_width, PurpleSmileyList *shadow_smileys,
796 const gchar *smiley_class)
782 { 797 {
783 GList *it; 798 GList *it;
784 GtkWidget *line; 799 GtkWidget *line;
785 int line_width = 0; 800 int line_width = 0;
786 801
813 828
814 image = GTK_IMAGE(gtk_image_new_from_pixbuf(pixbuf)); 829 image = GTK_IMAGE(gtk_image_new_from_pixbuf(pixbuf));
815 830
816 button = gtk_button_new(); 831 button = gtk_button_new();
817 gtk_container_add(GTK_CONTAINER(button), GTK_WIDGET(image)); 832 gtk_container_add(GTK_CONTAINER(button), GTK_WIDGET(image));
818 g_object_set_data_full(G_OBJECT(button), "smiley_text", 833
819 g_strdup(smiley_shortcut), g_free); 834 g_object_ref(smiley);
835 g_object_set_data_full(G_OBJECT(button), "smiley",
836 smiley, g_object_unref);
837 g_object_set_data(G_OBJECT(button),
838 "smiley-class", (gpointer)smiley_class);
839
820 g_signal_connect(G_OBJECT(button), "clicked", 840 g_signal_connect(G_OBJECT(button), "clicked",
821 G_CALLBACK(insert_smiley_text), toolbar); 841 G_CALLBACK(insert_smiley_text), toolbar);
822 gtk_widget_set_tooltip_text(button, smiley_shortcut); 842 gtk_widget_set_tooltip_text(button, smiley_shortcut);
823 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); 843 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
824 844
944 } 964 }
945 965
946 /* Add buttons for smileys. */ 966 /* Add buttons for smileys. */
947 if (theme_smileys) { 967 if (theme_smileys) {
948 add_smiley_list(toolbar, smiley_table, theme_smileys, 968 add_smiley_list(toolbar, smiley_table, theme_smileys,
949 max_line_width, smileys_from_custom); 969 max_line_width, smileys_from_custom, "theme");
950 } 970 }
951 if (theme_smileys && custom_smileys) { 971 if (theme_smileys && custom_smileys) {
952 gtk_box_pack_start(GTK_BOX(smiley_table), 972 gtk_box_pack_start(GTK_BOX(smiley_table),
953 gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), 973 gtk_separator_new(GTK_ORIENTATION_HORIZONTAL),
954 TRUE, FALSE, 0); 974 TRUE, FALSE, 0);
955 } 975 }
956 if (custom_smileys) { 976 if (custom_smileys) {
957 add_smiley_list(toolbar, smiley_table, custom_smileys, 977 add_smiley_list(toolbar, smiley_table, custom_smileys,
958 max_line_width, NULL); 978 max_line_width, NULL, "custom");
959 } 979 }
960 980
961 gtk_widget_add_events(dialog, GDK_KEY_PRESS_MASK); 981 gtk_widget_add_events(dialog, GDK_KEY_PRESS_MASK);
962 } else { 982 } else {
963 smiley_table = gtk_label_new(_("This theme has no available smileys.")); 983 smiley_table = gtk_label_new(_("This theme has no available smileys."));

mercurial