Mercurial > pidgin.yaz
comparison pidgin/gtknotify.c @ 32520:fe75cd926073
Webkit Message views.
This commit is a squashed commit of the series of commits from my git repository which I was using for development.
(git://github.com/tdrhq/pidgin-clone.git, branch webkit)
author | tdrhq@soc.pidgin.im |
---|---|
date | Fri, 24 Jul 2009 01:18:07 +0000 |
parents | 975a29213f35 |
children | 1ca2df744414 |
comparison
equal
deleted
inserted
replaced
28007:ed3184cc557d | 32520:fe75cd926073 |
---|---|
34 #include "prefs.h" | 34 #include "prefs.h" |
35 #include "pidginstock.h" | 35 #include "pidginstock.h" |
36 #include "util.h" | 36 #include "util.h" |
37 | 37 |
38 #include "gtkblist.h" | 38 #include "gtkblist.h" |
39 #include "gtkimhtml.h" | |
40 #include "gtknotify.h" | 39 #include "gtknotify.h" |
41 #include "gtkpounce.h" | 40 #include "gtkpounce.h" |
42 #include "gtkutils.h" | 41 #include "gtkutils.h" |
42 #include "gtkwebview.h" | |
43 | 43 |
44 typedef struct | 44 typedef struct |
45 { | 45 { |
46 GtkWidget *window; | 46 GtkWidget *window; |
47 int count; | 47 int count; |
736 } | 736 } |
737 | 737 |
738 return FALSE; | 738 return FALSE; |
739 } | 739 } |
740 | 740 |
741 static GtkIMHtmlOptions | |
742 notify_imhtml_options(void) | |
743 { | |
744 GtkIMHtmlOptions options = 0; | |
745 | |
746 if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting")) | |
747 options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES; | |
748 | |
749 options |= GTK_IMHTML_NO_COMMENTS; | |
750 options |= GTK_IMHTML_NO_TITLE; | |
751 options |= GTK_IMHTML_NO_NEWLINE; | |
752 options |= GTK_IMHTML_NO_SCROLL; | |
753 return options; | |
754 } | |
755 | |
756 static void * | 741 static void * |
757 pidgin_notify_formatted(const char *title, const char *primary, | 742 pidgin_notify_formatted(const char *title, const char *primary, |
758 const char *secondary, const char *text) | 743 const char *secondary, const char *text) |
759 { | 744 { |
760 GtkWidget *window; | 745 GtkWidget *window; |
761 GtkWidget *vbox; | 746 GtkWidget *vbox; |
762 GtkWidget *label; | 747 GtkWidget *label; |
763 GtkWidget *button; | 748 GtkWidget *button; |
764 GtkWidget *imhtml; | 749 GtkWidget *web_view; |
765 GtkWidget *frame; | 750 GtkWidget *scrolled_window; |
766 char label_text[2048]; | 751 char label_text[2048]; |
767 char *linked_text, *primary_esc, *secondary_esc; | 752 char *linked_text, *primary_esc, *secondary_esc; |
768 | 753 |
769 window = gtk_dialog_new(); | 754 window = gtk_dialog_new(); |
770 gtk_window_set_title(GTK_WINDOW(window), title); | 755 gtk_window_set_title(GTK_WINDOW(window), title); |
795 gtk_label_set_selectable(GTK_LABEL(label), TRUE); | 780 gtk_label_set_selectable(GTK_LABEL(label), TRUE); |
796 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | 781 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
797 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | 782 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
798 gtk_widget_show(label); | 783 gtk_widget_show(label); |
799 | 784 |
800 /* Add the imhtml */ | 785 /* Add the webview */ |
801 frame = pidgin_create_imhtml(FALSE, &imhtml, NULL, NULL); | 786 scrolled_window = gtk_scrolled_window_new (NULL, NULL); |
802 gtk_widget_set_name(imhtml, "pidgin_notify_imhtml"); | 787 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); |
803 gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), | 788 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
804 gtk_imhtml_get_format_functions(GTK_IMHTML(imhtml)) | GTK_IMHTML_IMAGE); | 789 |
805 gtk_widget_set_size_request(imhtml, 300, 250); | 790 web_view = gtk_webview_new (); |
806 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); | 791 gtk_container_add (GTK_CONTAINER (scrolled_window), web_view); |
807 gtk_widget_show(frame); | 792 |
793 gtk_widget_set_name(web_view, "pidgin_notify_webview"); | |
794 gtk_widget_set_size_request(web_view, 300, 250); | |
795 gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0); | |
796 gtk_widget_show_all(scrolled_window); | |
808 | 797 |
809 /* Add the Close button. */ | 798 /* Add the Close button. */ |
810 button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); | 799 button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); |
811 gtk_widget_grab_focus(button); | 800 gtk_widget_grab_focus(button); |
812 | 801 |
815 g_signal_connect(G_OBJECT(window), "key_press_event", | 804 g_signal_connect(G_OBJECT(window), "key_press_event", |
816 G_CALLBACK(formatted_input_cb), NULL); | 805 G_CALLBACK(formatted_input_cb), NULL); |
817 | 806 |
818 /* Make sure URLs are clickable */ | 807 /* Make sure URLs are clickable */ |
819 linked_text = purple_markup_linkify(text); | 808 linked_text = purple_markup_linkify(text); |
820 gtk_imhtml_append_text(GTK_IMHTML(imhtml), linked_text, notify_imhtml_options()); | 809 webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (web_view), linked_text, ""); |
821 g_free(linked_text); | 810 g_free(linked_text); |
822 | 811 |
823 g_object_set_data(G_OBJECT(window), "info-widget", imhtml); | 812 g_object_set_data(G_OBJECT(window), "webview-widget", web_view); |
824 | 813 |
825 /* Show the window */ | 814 /* Show the window */ |
826 pidgin_auto_parent_window(window); | 815 pidgin_auto_parent_window(window); |
827 | 816 |
828 gtk_widget_show(window); | 817 gtk_widget_show(window); |
1077 } | 1066 } |
1078 | 1067 |
1079 info = purple_notify_user_info_get_text_with_newline(user_info, "<br />"); | 1068 info = purple_notify_user_info_get_text_with_newline(user_info, "<br />"); |
1080 pinfo = g_hash_table_lookup(userinfo, key); | 1069 pinfo = g_hash_table_lookup(userinfo, key); |
1081 if (pinfo != NULL) { | 1070 if (pinfo != NULL) { |
1082 GtkIMHtml *imhtml = g_object_get_data(G_OBJECT(pinfo->window), "info-widget"); | 1071 GtkWidget *webview = g_object_get_data(G_OBJECT(pinfo->window), "webview-widget"); |
1083 char *linked_text = purple_markup_linkify(info); | 1072 char *linked_text = purple_markup_linkify(info); |
1084 gtk_imhtml_clear(imhtml); | 1073 g_assert (webview); |
1085 gtk_imhtml_append_text(imhtml, linked_text, notify_imhtml_options()); | 1074 printf ("%s\n", linked_text); |
1075 gtk_webview_load_html_string_with_imgstore (GTK_WEBVIEW (webview), linked_text); | |
1086 g_free(linked_text); | 1076 g_free(linked_text); |
1087 g_free(key); | 1077 g_free(key); |
1088 ui_handle = pinfo->window; | 1078 ui_handle = pinfo->window; |
1089 pinfo->count++; | 1079 pinfo->count++; |
1090 } else { | 1080 } else { |