--- a/pidgin/gtknotify.c Thu May 31 03:48:16 2012 +0000
+++ b/pidgin/gtknotify.c Thu May 31 06:20:22 2012 +0000
@@ -891,7 +891,7 @@
/* Make sure URLs are clickable */
linked_text = purple_markup_linkify(text);
- webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(web_view), linked_text, "");
+ gtk_webview_load_html_string(GTK_WEBVIEW(web_view), linked_text); g_object_set_data(G_OBJECT(window), "webview-widget", web_view);
@@ -1151,7 +1151,7 @@
GtkWidget *webview = g_object_get_data(G_OBJECT(pinfo->window), "webview-widget");
char *linked_text = purple_markup_linkify(info);
- gtk_webview_load_html_string_with_imgstore(GTK_WEBVIEW(webview), linked_text);
+ gtk_webview_load_html_string(GTK_WEBVIEW(webview), linked_text); ui_handle = pinfo->window;
--- a/pidgin/gtkwebview.c Thu May 31 03:48:16 2012 +0000
+++ b/pidgin/gtkwebview.c Thu May 31 06:20:22 2012 +0000
@@ -526,7 +526,7 @@
-gtk_webview_load_html_string_with_imgstore(GtkWebView *webview, const char *html)
+gtk_webview_load_html_string(GtkWebView *webview, const char *html) GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
@@ -551,12 +551,12 @@
gtk_webview_append_html(GtkWebView *webview, const char *html)
GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- char *escaped = gtk_webview_quote_js_string(html);
- char *script = g_strdup_printf("document.write(%s)", escaped);
- webkit_web_view_execute_script(WEBKIT_WEB_VIEW(webview), script);
+ WebKitDOMDocument *doc; + WebKitDOMHTMLElement *body; + doc = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); + body = webkit_dom_document_get_body(doc); + webkit_dom_html_element_insert_adjacent_html(body, "beforeend", html, NULL);
--- a/pidgin/gtkwebview.h Thu May 31 03:48:16 2012 +0000
+++ b/pidgin/gtkwebview.h Thu May 31 06:20:22 2012 +0000
@@ -120,7 +120,7 @@
* @param webview The GtkWebView object
* @param html The HTML content to load
-void gtk_webview_load_html_string_with_imgstore(GtkWebView *webview, const char *html);
+void gtk_webview_load_html_string(GtkWebView *webview, const char *html); * Execute the JavaScript only after the webkit_webview_load_string
--- a/pidgin/plugins/xmppconsole.c Thu May 31 03:48:16 2012 +0000
+++ b/pidgin/plugins/xmppconsole.c Thu May 31 06:20:22 2012 +0000
@@ -26,6 +26,7 @@
@@ -33,7 +34,7 @@
@@ -43,31 +44,34 @@
XmppConsole *console = NULL;
static void *xmpp_console_handle = NULL;
-#define BRACKET_COLOR "#940f8c"
-#define TAG_COLOR "#8b1dab"
-#define ATTR_NAME_COLOR "#a02961"
-#define ATTR_VALUE_COLOR "#324aa4"
-#define XMLNS_COLOR "#2cb12f"
+"<html><head><style type='text/css'>" \ + "body { word-wrap: break-word; margin: 0; }" \ + "div.tab { padding-left: 1em; }" \ + "div.info { color: #777777; }" \ + "div.incoming { background-color: #ffcece; }" \ + "div.outgoing { background-color: #dcecc4; }" \ + "span.bracket { color: #940f8c; }" \ + "span.tag { color: #8b1dab; font-weight: bold; }" \ + "span.attr { color: #a02961; font-weight: bold; }" \ + "span.value { color: #324aa4; }" \ + "span.xmlns { color: #2cb12f; font-weight: bold;}" \ +"</style></head></html>" -xmlnode_to_pretty_str(xmlnode *node, int *len, int depth)
+xmlnode_to_pretty_str(xmlnode *node, int *len) GString *text = g_string_new("");
- char *node_name, *esc, *esc2, *tab = NULL;
+ char *node_name, *esc, *esc2; gboolean need_end = FALSE, pretty = TRUE;
g_return_val_if_fail(node != NULL, NULL);
- tab = g_strnfill(depth, '\t');
- text = g_string_append(text, tab);
node_name = g_markup_escape_text(node->name, -1);
g_string_append_printf(text,
- "<font color='" BRACKET_COLOR "'><</font>"
- "<font color='" TAG_COLOR "'><b>%s</b></font>",
+ "<span class=bracket><</span>" + "<span class=tag>%s</span>", @@ -78,8 +82,8 @@
char *xmlns = g_markup_escape_text(node->xmlns, -1);
g_string_append_printf(text,
- " <font color='" ATTR_NAME_COLOR "'><b>xmlns</b></font>="
- "'<font color='" XMLNS_COLOR "'><b>%s</b></font>'",
+ " <span class=attr>xmlns</span>=" + "'<span class=xmlns>%s</span>'", @@ -90,8 +94,8 @@
esc = g_markup_escape_text(c->name, -1);
esc2 = g_markup_escape_text(c->data, -1);
g_string_append_printf(text,
- " <font color='" ATTR_NAME_COLOR "'><b>%s</b></font>="
- "'<font color='" ATTR_VALUE_COLOR "'>%s</font>'",
+ " <span class=attr>%s</span>=" + "'<span class=value>%s</span>'", @@ -104,14 +108,19 @@
g_string_append_printf(text,
- "<font color='"BRACKET_COLOR"'>></font>%s",
+ "<span class=bracket>></span>%s", for (c = node->child; c; c = c->next)
if (c->type == XMLNODE_TYPE_TAG) {
- esc = xmlnode_to_pretty_str(c, &esc_len, depth+1);
+ esc = xmlnode_to_pretty_str(c, &esc_len); + g_string_append(text, "<div class=tab>"); text = g_string_append_len(text, esc, esc_len);
} else if (c->type == XMLNODE_TYPE_DATA && c->data_sz > 0) {
@@ -121,23 +130,22 @@
- text = g_string_append(text, tab);
+ g_string_append(text, "</div>"); g_string_append_printf(text,
- "<font color='" BRACKET_COLOR "'><</font>/"
- "<font color='" TAG_COLOR "'><b>%s</b></font>"
- "<font color='" BRACKET_COLOR "'>></font><br>",
+ "<span class=bracket><</span>/" + "<span class=tag>%s</span>" + "<span class=bracket>></span><br>", g_string_append_printf(text,
- "/<font color='" BRACKET_COLOR "'>></font><br>");
+ "/<span class=bracket>></span><br>");
return g_string_free(text, FALSE);
@@ -150,9 +158,9 @@
if (!console || console->gc != gc)
- str = xmlnode_to_pretty_str(*packet, NULL, 0);
- formatted = g_strdup_printf("<body bgcolor='#ffcece'><pre>%s</pre></body>", str);
- gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), formatted, 0);
+ str = xmlnode_to_pretty_str(*packet, NULL); + formatted = g_strdup_printf("<div class=incoming>%s</div>", str); + gtk_webview_append_html(GTK_WEBVIEW(console->webview), formatted); @@ -171,9 +179,9 @@
- str = xmlnode_to_pretty_str(node, NULL, 0);
- formatted = g_strdup_printf("<body bgcolor='#dcecc4'><pre>%s</pre></body>", str);
- gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), formatted, 0);
+ str = xmlnode_to_pretty_str(node, NULL); + formatted = g_strdup_printf("<div class=outgoing>%s</div>", str); + gtk_webview_append_html(GTK_WEBVIEW(console->webview), formatted); @@ -646,16 +654,24 @@
signing_on_cb(PurpleConnection *gc)
+ PurpleAccount *account; - gtk_combo_box_append_text(GTK_COMBO_BOX(console->dropdown), purple_account_get_username(purple_connection_get_account(gc)));
+ account = purple_connection_get_account(gc); + if (strcmp(purple_account_get_protocol_id(account), "prpl-jabber")) + gtk_combo_box_append_text(GTK_COMBO_BOX(console->dropdown), purple_account_get_username(account)); console->accounts = g_list_append(console->accounts, gc);
- if (console->count == 1)
+ if (console->count == 1) {
+ gtk_webview_load_html_string(GTK_WEBVIEW(console->webview), EMPTY_HTML); + gtk_combo_box_set_active(GTK_COMBO_BOX(console->dropdown), 0); gtk_widget_show_all(console->hbox);
@@ -685,9 +701,11 @@
+ char *tmp = g_strdup_printf("<div class=info>%s</div>", + gtk_webview_append_html(GTK_WEBVIEW(console->webview), tmp); - gtk_imhtml_append_text(GTK_IMHTML(console->imhtml),
- _("<font color='#777777'>Logged out.</font>"), 0);
@@ -732,18 +750,11 @@
dropdown_changed_cb(GtkComboBox *widget, gpointer nul)
- PurpleAccount *account;
- account = purple_accounts_find(gtk_combo_box_get_active_text(GTK_COMBO_BOX(console->dropdown)),
- if (!account || !purple_account_get_connection(account))
- console->gc = purple_account_get_connection(account);
- gtk_imhtml_clear(GTK_IMHTML(console->imhtml));
+ console->gc = g_list_nth_data(console->accounts, gtk_combo_box_get_active(GTK_COMBO_BOX(console->dropdown))); + gtk_webview_load_html_string(GTK_WEBVIEW(console->webview), EMPTY_HTML); @@ -785,16 +796,20 @@
- gtk_combo_box_set_active(GTK_COMBO_BOX(console->dropdown),0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(console->dropdown), 0); gtk_box_pack_start(GTK_BOX(console->hbox), console->dropdown, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(console->dropdown), "changed", G_CALLBACK(dropdown_changed_cb), NULL);
- console->imhtml = gtk_imhtml_new(NULL, NULL);
- if (console->count == 0)
- gtk_imhtml_append_text(GTK_IMHTML(console->imhtml),
- _("<font color='#777777'>Not connected to XMPP</font>"), 0);
+ console->webview = gtk_webview_new(); + gtk_webview_load_html_string(GTK_WEBVIEW(console->webview), EMPTY_HTML); + if (console->count == 0) { + char *tmp = g_strdup_printf("<div class=info>%s</div>", + _("Not connected to XMPP")); + gtk_webview_append_html(GTK_WEBVIEW(console->webview), tmp); gtk_box_pack_start(GTK_BOX(vbox),
- pidgin_make_scrollable(console->imhtml, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1),
+ pidgin_make_scrollable(console->webview, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1), toolbar = gtk_toolbar_new();