pidgin/gtkpluginpref.c

changeset 33199
e82a9f0fa7ec
parent 33170
ce4447562d64
child 33252
abcaf61b570d
equal deleted inserted replaced
33198:4b09a688030d 33199:e82a9f0fa7ec
30 #include "debug.h" 30 #include "debug.h"
31 #include "internal.h" 31 #include "internal.h"
32 #include "pluginpref.h" 32 #include "pluginpref.h"
33 #include "prefs.h" 33 #include "prefs.h"
34 34
35 #include "gtkimhtml.h"
36 #include "gtkpluginpref.h" 35 #include "gtkpluginpref.h"
37 #include "gtkprefs.h" 36 #include "gtkprefs.h"
38 #include "gtkutils.h" 37 #include "gtkutils.h"
38 #include "gtkwebview.h"
39 39
40 static gboolean 40 static gboolean
41 entry_cb(GtkWidget *entry, gpointer data) { 41 entry_cb(GtkWidget *entry, gpointer data) {
42 char *pref = data; 42 char *pref = data;
43 43
46 return FALSE; 46 return FALSE;
47 } 47 }
48 48
49 49
50 static void 50 static void
51 imhtml_cb(GtkTextBuffer *buffer, gpointer data) 51 webview_cb(GtkWebView *webview, gpointer data)
52 { 52 {
53 char *pref; 53 char *pref;
54 char *text; 54 char *text;
55 GtkIMHtml *imhtml = data; 55
56 56 pref = g_object_get_data(G_OBJECT(webview), "pref-key");
57 pref = g_object_get_data(G_OBJECT(imhtml), "pref-key");
58 g_return_if_fail(pref); 57 g_return_if_fail(pref);
59 58
60 text = gtk_imhtml_get_markup(imhtml); 59 text = gtk_webview_get_body_html(webview);
61 purple_prefs_set_string(pref, text); 60 purple_prefs_set_string(pref, text);
62 g_free(text); 61 g_free(text);
63 }
64
65 static void
66 imhtml_format_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, gpointer data)
67 {
68 imhtml_cb(gtk_text_view_get_buffer(GTK_TEXT_VIEW(imhtml)), data);
69 } 62 }
70 63
71 static void 64 static void
72 make_string_pref(GtkWidget *parent, PurplePluginPref *pref, GtkSizeGroup *sg) { 65 make_string_pref(GtkWidget *parent, PurplePluginPref *pref, GtkSizeGroup *sg) {
73 GtkWidget *box, *gtk_label, *entry; 66 GtkWidget *box, *gtk_label, *entry;
113 } 106 }
114 else 107 else
115 { 108 {
116 GtkWidget *hbox; 109 GtkWidget *hbox;
117 GtkWidget *spacer; 110 GtkWidget *spacer;
118 GtkWidget *imhtml; 111 GtkWidget *webview;
119 GtkWidget *toolbar; 112 GtkWidget *toolbar;
120 GtkWidget *frame; 113 GtkWidget *frame;
121 114
122 box = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 115 box = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
123 116
138 131
139 spacer = gtk_label_new(" "); 132 spacer = gtk_label_new(" ");
140 gtk_box_pack_start(GTK_BOX(hbox), spacer, FALSE, FALSE, 0); 133 gtk_box_pack_start(GTK_BOX(hbox), spacer, FALSE, FALSE, 0);
141 gtk_widget_show(spacer); 134 gtk_widget_show(spacer);
142 135
143 frame = pidgin_create_imhtml(TRUE, &imhtml, &toolbar, NULL); 136 frame = pidgin_create_webview(TRUE, &webview, &toolbar, NULL);
144 if (!(format & PURPLE_STRING_FORMAT_TYPE_HTML)) 137 if (!(format & PURPLE_STRING_FORMAT_TYPE_HTML))
145 gtk_widget_destroy(toolbar); 138 gtk_widget_destroy(toolbar);
146 139
147 gtk_imhtml_append_text(GTK_IMHTML(imhtml), purple_prefs_get_string(pref_name), 140 if (format & PURPLE_STRING_FORMAT_TYPE_MULTILINE) {
148 (format & PURPLE_STRING_FORMAT_TYPE_MULTILINE) ? 0 : GTK_IMHTML_NO_NEWLINE); 141 gchar *tmp = purple_strreplace(purple_prefs_get_string(pref_name), "\n", "<br>");
149 gtk_label_set_mnemonic_widget(GTK_LABEL(gtk_label), imhtml); 142 gtk_webview_append_html(GTK_WEBVIEW(webview), tmp);
143 g_free(tmp);
144 } else
145 gtk_webview_append_html(GTK_WEBVIEW(webview), purple_prefs_get_string(pref_name));
146 gtk_label_set_mnemonic_widget(GTK_LABEL(gtk_label), webview);
150 gtk_widget_show_all(frame); 147 gtk_widget_show_all(frame);
151 g_object_set_data(G_OBJECT(imhtml), "pref-key", (gpointer)pref_name); 148 g_object_set_data(G_OBJECT(webview), "pref-key", (gpointer)pref_name);
152 g_signal_connect(G_OBJECT(gtk_text_view_get_buffer(GTK_TEXT_VIEW(imhtml))), 149 g_signal_connect(G_OBJECT(webview), "changed",
153 "changed", G_CALLBACK(imhtml_cb), imhtml); 150 G_CALLBACK(webview_cb), NULL);
154 g_signal_connect(G_OBJECT(imhtml), 151 g_signal_connect(G_OBJECT(webview), "format-toggled",
155 "format_function_toggle", G_CALLBACK(imhtml_format_cb), imhtml); 152 G_CALLBACK(webview_cb), NULL);
156 gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); 153 gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
157 } 154 }
158 155
159 break; 156 break;
160 } 157 }

mercurial