| 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; |
| 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 } |