| 662 buttons &= ~GTK_WEBVIEW_SHRINK; |
640 buttons &= ~GTK_WEBVIEW_SHRINK; |
| 663 } |
641 } |
| 664 if (flags & PURPLE_CONNECTION_NO_URLDESC) |
642 if (flags & PURPLE_CONNECTION_NO_URLDESC) |
| 665 buttons &= ~GTK_WEBVIEW_LINKDESC; |
643 buttons &= ~GTK_WEBVIEW_LINKDESC; |
| 666 |
644 |
| |
645 gtk_webview_get_current_format(webview, &bold, &italic, &underline, &strike); |
| |
646 |
| 667 gtk_webview_set_format_functions(webview, GTK_WEBVIEW_ALL); |
647 gtk_webview_set_format_functions(webview, GTK_WEBVIEW_ALL); |
| 668 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold") != priv->edit.bold) |
648 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold") != bold) |
| 669 gtk_webview_toggle_bold(webview); |
649 gtk_webview_toggle_bold(webview); |
| 670 |
650 |
| 671 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic") != priv->edit.italic) |
651 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic") != italic) |
| 672 gtk_webview_toggle_italic(webview); |
652 gtk_webview_toggle_italic(webview); |
| 673 |
653 |
| 674 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline") != priv->edit.underline) |
654 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline") != underline) |
| 675 gtk_webview_toggle_underline(webview); |
655 gtk_webview_toggle_underline(webview); |
| 676 |
656 |
| 677 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_strike") != priv->edit.strike) |
657 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_strike") != strike) |
| 678 gtk_webview_toggle_strike(webview); |
658 gtk_webview_toggle_strike(webview); |
| 679 |
659 |
| 680 gtk_webview_toggle_fontface(webview, |
660 gtk_webview_toggle_fontface(webview, |
| 681 purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/font_face")); |
661 purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/font_face")); |
| 682 |
662 |
| 691 |
671 |
| 692 if (strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor"), "") != 0) |
672 if (strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor"), "") != 0) |
| 693 { |
673 { |
| 694 gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor"), |
674 gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor"), |
| 695 &fg_color); |
675 &fg_color); |
| 696 g_snprintf(color, sizeof(color), "#%02x%02x%02x", |
676 g_snprintf(color, sizeof(color), |
| 697 fg_color.red / 256, |
677 "#%02x%02x%02x", |
| 698 fg_color.green / 256, |
678 fg_color.red / 256, |
| 699 fg_color.blue / 256); |
679 fg_color.green / 256, |
| |
680 fg_color.blue / 256); |
| 700 } else |
681 } else |
| 701 strcpy(color, ""); |
682 strcpy(color, ""); |
| 702 |
683 |
| 703 gtk_webview_toggle_forecolor(webview, color); |
684 gtk_webview_toggle_forecolor(webview, color); |
| 704 |
685 |
| 705 if(!(flags & PURPLE_CONNECTION_NO_BGCOLOR) && |
686 if (!(flags & PURPLE_CONNECTION_NO_BGCOLOR) && |
| 706 strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"), "") != 0) |
687 strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"), "") != 0) |
| 707 { |
688 { |
| 708 gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"), |
689 gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"), |
| 709 &bg_color); |
690 &bg_color); |
| 710 g_snprintf(color, sizeof(color), "#%02x%02x%02x", |
691 g_snprintf(color, sizeof(color), |
| 711 bg_color.red / 256, |
692 "#%02x%02x%02x", |
| 712 bg_color.green / 256, |
693 bg_color.red / 256, |
| 713 bg_color.blue / 256); |
694 bg_color.green / 256, |
| |
695 bg_color.blue / 256); |
| 714 } else |
696 } else |
| 715 strcpy(color, ""); |
697 strcpy(color, ""); |
| 716 |
698 |
| 717 gtk_webview_toggle_background(webview, color); |
699 gtk_webview_toggle_backcolor(webview, color); |
| 718 |
700 |
| 719 if (flags & PURPLE_CONNECTION_FORMATTING_WBFO) |
701 if (flags & PURPLE_CONNECTION_FORMATTING_WBFO) |
| 720 gtk_webview_set_whole_buffer_formatting_only(webview, TRUE); |
702 gtk_webview_set_whole_buffer_formatting_only(webview, TRUE); |
| 721 else |
703 else |
| 722 gtk_webview_set_whole_buffer_formatting_only(webview, FALSE); |
704 gtk_webview_set_whole_buffer_formatting_only(webview, FALSE); |
| 763 void |
745 void |
| 764 gtk_webview_get_current_format(GtkWebView *webview, gboolean *bold, |
746 gtk_webview_get_current_format(GtkWebView *webview, gboolean *bold, |
| 765 gboolean *italic, gboolean *underline, |
747 gboolean *italic, gboolean *underline, |
| 766 gboolean *strike) |
748 gboolean *strike) |
| 767 { |
749 { |
| 768 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
750 WebKitDOMDocument *dom; |
| |
751 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| |
752 |
| 769 if (bold) |
753 if (bold) |
| 770 *bold = priv->edit.bold; |
754 *bold = webkit_dom_document_query_command_state(dom, "bold"); |
| 771 if (italic) |
755 if (italic) |
| 772 *italic = priv->edit.italic; |
756 *italic = webkit_dom_document_query_command_state(dom, "italic"); |
| 773 if (underline) |
757 if (underline) |
| 774 *underline = priv->edit.underline; |
758 *underline = webkit_dom_document_query_command_state(dom, "underline"); |
| 775 if (strike) |
759 if (strike) |
| 776 *strike = priv->edit.strike; |
760 *strike = webkit_dom_document_query_command_state(dom, "strikethrough"); |
| 777 } |
761 } |
| 778 |
762 |
| 779 const char * |
763 char * |
| 780 gtk_webview_get_current_fontface(GtkWebView *webview) |
764 gtk_webview_get_current_fontface(GtkWebView *webview) |
| 781 { |
765 { |
| 782 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
766 WebKitDOMDocument *dom; |
| 783 return priv->edit.fontface; |
767 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 784 } |
768 return webkit_dom_document_query_command_value(dom, "fontName"); |
| 785 |
769 } |
| 786 const char * |
770 |
| |
771 char * |
| 787 gtk_webview_get_current_forecolor(GtkWebView *webview) |
772 gtk_webview_get_current_forecolor(GtkWebView *webview) |
| 788 { |
773 { |
| 789 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
774 WebKitDOMDocument *dom; |
| 790 return priv->edit.forecolor; |
775 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 791 } |
776 return webkit_dom_document_query_command_value(dom, "foreColor"); |
| 792 |
777 } |
| 793 const char * |
778 |
| |
779 char * |
| 794 gtk_webview_get_current_backcolor(GtkWebView *webview) |
780 gtk_webview_get_current_backcolor(GtkWebView *webview) |
| 795 { |
781 { |
| 796 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
782 WebKitDOMDocument *dom; |
| 797 return priv->edit.backcolor; |
783 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 798 } |
784 return webkit_dom_document_query_command_value(dom, "backColor"); |
| 799 |
|
| 800 const char * |
|
| 801 gtk_webview_get_current_background(GtkWebView *webview) |
|
| 802 { |
|
| 803 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
|
| 804 return priv->edit.background; |
|
| 805 } |
785 } |
| 806 |
786 |
| 807 gint |
787 gint |
| 808 gtk_webview_get_current_fontsize(GtkWebView *webview) |
788 gtk_webview_get_current_fontsize(GtkWebView *webview) |
| 809 { |
789 { |
| 810 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
790 WebKitDOMDocument *dom; |
| 811 return priv->edit.fontsize; |
791 gchar *text; |
| |
792 gint size; |
| |
793 |
| |
794 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| |
795 text = webkit_dom_document_query_command_value(dom, "fontSize"); |
| |
796 size = atoi(text); |
| |
797 g_free(text); |
| |
798 |
| |
799 return size; |
| 812 } |
800 } |
| 813 |
801 |
| 814 gboolean |
802 gboolean |
| 815 gtk_webview_get_editable(GtkWebView *webview) |
803 gtk_webview_get_editable(GtkWebView *webview) |
| 816 { |
804 { |
| 831 } |
819 } |
| 832 |
820 |
| 833 void |
821 void |
| 834 gtk_webview_toggle_bold(GtkWebView *webview) |
822 gtk_webview_toggle_bold(GtkWebView *webview) |
| 835 { |
823 { |
| 836 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
824 WebKitDOMDocument *dom; |
| 837 WebKitDOMDocument *dom; |
|
| 838 |
|
| 839 priv->edit.bold = !priv->edit.bold; |
|
| 840 |
825 |
| 841 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
826 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 842 webkit_dom_document_exec_command(dom, "bold", FALSE, ""); |
827 webkit_dom_document_exec_command(dom, "bold", FALSE, ""); |
| 843 } |
828 } |
| 844 |
829 |
| 845 void |
830 void |
| 846 gtk_webview_toggle_italic(GtkWebView *webview) |
831 gtk_webview_toggle_italic(GtkWebView *webview) |
| 847 { |
832 { |
| 848 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
833 WebKitDOMDocument *dom; |
| 849 WebKitDOMDocument *dom; |
|
| 850 |
|
| 851 priv->edit.italic = !priv->edit.italic; |
|
| 852 |
834 |
| 853 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
835 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 854 webkit_dom_document_exec_command(dom, "italic", FALSE, ""); |
836 webkit_dom_document_exec_command(dom, "italic", FALSE, ""); |
| 855 } |
837 } |
| 856 |
838 |
| 857 void |
839 void |
| 858 gtk_webview_toggle_underline(GtkWebView *webview) |
840 gtk_webview_toggle_underline(GtkWebView *webview) |
| 859 { |
841 { |
| 860 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
842 WebKitDOMDocument *dom; |
| 861 WebKitDOMDocument *dom; |
|
| 862 |
|
| 863 priv->edit.underline = !priv->edit.underline; |
|
| 864 |
843 |
| 865 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
844 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 866 webkit_dom_document_exec_command(dom, "underline", FALSE, ""); |
845 webkit_dom_document_exec_command(dom, "underline", FALSE, ""); |
| 867 } |
846 } |
| 868 |
847 |
| 869 void |
848 void |
| 870 gtk_webview_toggle_strike(GtkWebView *webview) |
849 gtk_webview_toggle_strike(GtkWebView *webview) |
| 871 { |
850 { |
| 872 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
851 WebKitDOMDocument *dom; |
| 873 WebKitDOMDocument *dom; |
|
| 874 |
|
| 875 priv->edit.strike = !priv->edit.strike; |
|
| 876 |
852 |
| 877 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
853 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 878 webkit_dom_document_exec_command(dom, "strikethrough", FALSE, ""); |
854 webkit_dom_document_exec_command(dom, "strikethrough", FALSE, ""); |
| 879 } |
855 } |
| 880 |
856 |
| 881 gboolean |
857 gboolean |
| 882 gtk_webview_toggle_forecolor(GtkWebView *webview, const char *color) |
858 gtk_webview_toggle_forecolor(GtkWebView *webview, const char *color) |
| 883 { |
859 { |
| 884 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
860 WebKitDOMDocument *dom; |
| 885 WebKitDOMDocument *dom; |
861 |
| 886 |
862 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 887 g_free(priv->edit.forecolor); |
863 webkit_dom_document_exec_command(dom, "foreColor", FALSE, color); |
| 888 priv->edit.forecolor = g_strdup(color); |
|
| 889 |
|
| 890 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
|
| 891 webkit_dom_document_exec_command(dom, "forecolor", FALSE, color); |
|
| 892 |
864 |
| 893 return FALSE; |
865 return FALSE; |
| 894 } |
866 } |
| 895 |
867 |
| 896 gboolean |
868 gboolean |
| 897 gtk_webview_toggle_backcolor(GtkWebView *webview, const char *color) |
869 gtk_webview_toggle_backcolor(GtkWebView *webview, const char *color) |
| 898 { |
870 { |
| 899 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
871 WebKitDOMDocument *dom; |
| 900 WebKitDOMDocument *dom; |
872 |
| 901 |
873 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 902 g_free(priv->edit.backcolor); |
874 webkit_dom_document_exec_command(dom, "backColor", FALSE, color); |
| 903 priv->edit.backcolor = g_strdup(color); |
|
| 904 |
|
| 905 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
|
| 906 webkit_dom_document_exec_command(dom, "backcolor", FALSE, color); |
|
| 907 |
|
| 908 return FALSE; |
|
| 909 } |
|
| 910 |
|
| 911 gboolean |
|
| 912 gtk_webview_toggle_background(GtkWebView *webview, const char *color) |
|
| 913 { |
|
| 914 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
|
| 915 |
|
| 916 g_free(priv->edit.background); |
|
| 917 priv->edit.background = g_strdup(color); |
|
| 918 |
875 |
| 919 return FALSE; |
876 return FALSE; |
| 920 } |
877 } |
| 921 |
878 |
| 922 gboolean |
879 gboolean |
| 923 gtk_webview_toggle_fontface(GtkWebView *webview, const char *face) |
880 gtk_webview_toggle_fontface(GtkWebView *webview, const char *face) |
| 924 { |
881 { |
| 925 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
882 WebKitDOMDocument *dom; |
| 926 WebKitDOMDocument *dom; |
883 |
| 927 |
884 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 928 g_free(priv->edit.fontface); |
885 webkit_dom_document_exec_command(dom, "fontName", FALSE, face); |
| 929 priv->edit.fontface = g_strdup(face); |
|
| 930 |
|
| 931 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
|
| 932 webkit_dom_document_exec_command(dom, "fontname", FALSE, face); |
|
| 933 |
886 |
| 934 return FALSE; |
887 return FALSE; |
| 935 } |
888 } |
| 936 |
889 |
| 937 void |
890 void |
| 938 gtk_webview_font_set_size(GtkWebView *webview, gint size) |
891 gtk_webview_font_set_size(GtkWebView *webview, gint size) |
| 939 { |
892 { |
| 940 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
|
| 941 WebKitDOMDocument *dom; |
893 WebKitDOMDocument *dom; |
| 942 char *tmp; |
894 char *tmp; |
| 943 |
895 |
| 944 priv->edit.fontsize = size; |
|
| 945 |
|
| 946 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
896 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 947 tmp = g_strdup_printf("%d", size); |
897 tmp = g_strdup_printf("%d", size); |
| 948 webkit_dom_document_exec_command(dom, "fontsize", FALSE, tmp); |
898 webkit_dom_document_exec_command(dom, "fontSize", FALSE, tmp); |
| 949 g_free(tmp); |
899 g_free(tmp); |
| 950 } |
900 } |
| 951 |
901 |
| 952 void |
902 void |
| 953 gtk_webview_font_shrink(GtkWebView *webview) |
903 gtk_webview_font_shrink(GtkWebView *webview) |
| 954 { |
904 { |
| 955 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
905 WebKitDOMDocument *dom; |
| 956 WebKitDOMDocument *dom; |
906 gint fontsize; |
| 957 char *tmp; |
907 char *tmp; |
| 958 |
908 |
| 959 priv->edit.fontsize = MAX(priv->edit.fontsize - 1, 1); |
909 fontsize = gtk_webview_get_current_fontsize(webview); |
| 960 |
910 fontsize = MAX(fontsize - 1, 1); |
| 961 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
911 |
| 962 tmp = g_strdup_printf("%d", priv->edit.fontsize); |
912 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 963 webkit_dom_document_exec_command(dom, "fontsize", FALSE, tmp); |
913 tmp = g_strdup_printf("%d", fontsize); |
| |
914 webkit_dom_document_exec_command(dom, "fontSize", FALSE, tmp); |
| 964 g_free(tmp); |
915 g_free(tmp); |
| 965 } |
916 } |
| 966 |
917 |
| 967 void |
918 void |
| 968 gtk_webview_font_grow(GtkWebView *webview) |
919 gtk_webview_font_grow(GtkWebView *webview) |
| 969 { |
920 { |
| 970 GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); |
921 WebKitDOMDocument *dom; |
| 971 WebKitDOMDocument *dom; |
922 gint fontsize; |
| 972 char *tmp; |
923 char *tmp; |
| 973 |
924 |
| 974 priv->edit.fontsize = MIN(priv->edit.fontsize + 1, MAX_FONT_SIZE); |
925 fontsize = gtk_webview_get_current_fontsize(webview); |
| 975 |
926 fontsize = MIN(fontsize + 1, MAX_FONT_SIZE); |
| 976 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
927 |
| 977 tmp = g_strdup_printf("%d", priv->edit.fontsize); |
928 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); |
| 978 webkit_dom_document_exec_command(dom, "fontsize", FALSE, tmp); |
929 tmp = g_strdup_printf("%d", fontsize); |
| |
930 webkit_dom_document_exec_command(dom, "fontSize", FALSE, tmp); |
| 979 g_free(tmp); |
931 g_free(tmp); |
| 980 } |
932 } |
| 981 |
933 |