--- a/pidgin/plugins/xmppconsole.c Sun Jun 03 20:03:35 2012 +0000
+++ b/pidgin/plugins/xmppconsole.c Sun Jun 03 20:23:23 2012 +0000
@@ -29,6 +29,8 @@
+#include <gdk/gdkkeysyms.h> @@ -187,44 +189,47 @@
-static void message_send_cb(GtkWidget *widget, gpointer p)
+message_send_cb(GtkWidget *widget, GdkEventKey *event, gpointer p) - GtkTextIter start, end;
PurplePluginProtocolInfo *prpl_info = NULL;
+ if (event->keyval != GDK_KEY_KP_Enter && event->keyval != GDK_KEY_Return) prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc));
- buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry));
- gtk_text_buffer_get_start_iter(buffer, &start);
- gtk_text_buffer_get_end_iter(buffer, &end);
- text = gtk_imhtml_get_text(GTK_IMHTML(console->entry), &start, &end);
+ text = gtk_webview_get_body_text(GTK_WEBVIEW(widget)); if (prpl_info && prpl_info->send_raw != NULL)
prpl_info->send_raw(gc, text, strlen(text));
- gtk_imhtml_clear(GTK_IMHTML(console->entry));
+ gtk_webview_load_html_string(GTK_WEBVIEW(console->entry), ""); -static void entry_changed_cb(GtkTextBuffer *buffer, void *data)
+entry_changed_cb(GtkWidget *webview, void *data)
int pad_top, pad_inside, pad_bottom;
- GtkTextIter start, end;
+ /* TODO WebKit: Do entry auto-sizing... */ gtk_text_buffer_get_start_iter(buffer, &iter);
gtk_text_view_get_iter_location(GTK_TEXT_VIEW(console->entry), &iter, &oneline);
@@ -245,18 +250,17 @@
height += (oneline.height + pad_inside) * (wrapped_lines - lines);
gtk_widget_set_size_request(console->sw, -1, height + 6);
- gtk_text_buffer_get_start_iter(buffer, &start);
- gtk_text_buffer_get_end_iter(buffer, &end);
- str = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+ str = gtk_webview_get_body_text(GTK_WEBVIEW(webview)); xmlstr = g_strdup_printf("<xml>%s</xml>", str);
node = xmlnode_from_str(xmlstr, -1);
- gtk_imhtml_clear_formatting(GTK_IMHTML(console->entry));
+ gtk_webview_clear_formatting(GTK_WEBVIEW(console->entry)); - gtk_imhtml_toggle_background(GTK_IMHTML(console->entry), "#ffcece");
+ gtk_webview_toggle_backcolor(GTK_WEBVIEW(console->entry), "#ffcece"); @@ -762,7 +766,6 @@
GtkWidget *vbox = gtk_vbox_new(FALSE, 6);
@@ -830,17 +833,16 @@
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
- console->entry = gtk_imhtml_new(NULL, NULL);
- gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(console->entry), TRUE);
- g_signal_connect(G_OBJECT(console->entry),"message_send", G_CALLBACK(message_send_cb), console);
+ console->entry = gtk_webview_new(); + gtk_webview_set_whole_buffer_formatting_only(GTK_WEBVIEW(console->entry), TRUE); + g_signal_connect(G_OBJECT(console->entry),"key-press-event", G_CALLBACK(message_send_cb), console); console->sw = pidgin_make_scrollable(console->entry, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1);
gtk_box_pack_start(GTK_BOX(vbox), console->sw, FALSE, FALSE, 0);
- gtk_imhtml_set_editable(GTK_IMHTML(console->entry), TRUE);
- buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry));
- g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(entry_changed_cb), NULL);
+ gtk_webview_set_editable(GTK_WEBVIEW(console->entry), TRUE); + g_signal_connect(G_OBJECT(console->entry), "changed", G_CALLBACK(entry_changed_cb), NULL); - entry_changed_cb(buffer, NULL);
+ entry_changed_cb(console->entry, NULL); gtk_widget_show_all(console->window);