diff -r ce92490a3edb -r 416f017698b1 pidgin/plugins/xmppconsole.c
--- a/pidgin/plugins/xmppconsole.c Thu May 31 03:42:49 2012 +0000
+++ b/pidgin/plugins/xmppconsole.c Thu May 31 05:32:47 2012 +0000
@@ -26,6 +26,7 @@
#include "xmlnode.h"
#include "gtkimhtml.h"
+#include "gtkwebview.h"
#include "gtkutils.h"
typedef struct {
@@ -33,7 +34,7 @@
GtkWidget *window;
GtkWidget *hbox;
GtkWidget *dropdown;
- GtkWidget *imhtml;
+ GtkWidget *webview;
GtkWidget *entry;
GtkWidget *sw;
int count;
@@ -43,11 +44,18 @@
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"
+#define EMPTY_HTML \
+"
"
static char *
xmlnode_to_pretty_str(xmlnode *node, int *len, int depth)
@@ -66,8 +74,8 @@
node_name = g_markup_escape_text(node->name, -1);
g_string_append_printf(text,
- "<"
- "%s",
+ "<"
+ "%s",
node_name);
if (node->xmlns) {
@@ -78,8 +86,8 @@
{
char *xmlns = g_markup_escape_text(node->xmlns, -1);
g_string_append_printf(text,
- " xmlns="
- "'%s'",
+ " xmlns="
+ "'%s'",
xmlns);
g_free(xmlns);
}
@@ -90,8 +98,8 @@
esc = g_markup_escape_text(c->name, -1);
esc2 = g_markup_escape_text(c->data, -1);
g_string_append_printf(text,
- " %s="
- "'%s'",
+ " %s="
+ "'%s'",
esc, esc2);
g_free(esc);
g_free(esc2);
@@ -104,7 +112,7 @@
if (need_end) {
g_string_append_printf(text,
- ">%s",
+ ">%s",
pretty ? "
" : "");
for (c = node->child; c; c = c->next)
@@ -124,20 +132,20 @@
if(tab && pretty)
text = g_string_append(text, tab);
g_string_append_printf(text,
- "</"
- "%s"
- ">
",
+ "</"
+ "%s"
+ ">
",
node_name);
} else {
g_string_append_printf(text,
- "/>
");
+ "/>
");
}
g_free(node_name);
g_free(tab);
- if(len)
+ if (len)
*len = text->len;
return g_string_free(text, FALSE);
@@ -151,8 +159,8 @@
if (!console || console->gc != gc)
return;
str = xmlnode_to_pretty_str(*packet, NULL, 0);
- formatted = g_strdup_printf("%s
", str);
- gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), formatted, 0);
+ formatted = g_strdup_printf("%s
", str);
+ gtk_webview_append_html(GTK_WEBVIEW(console->webview), formatted);
g_free(formatted);
g_free(str);
}
@@ -172,8 +180,8 @@
return;
str = xmlnode_to_pretty_str(node, NULL, 0);
- formatted = g_strdup_printf("%s
", str);
- gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), formatted, 0);
+ formatted = g_strdup_printf("%s
", str);
+ gtk_webview_append_html(GTK_WEBVIEW(console->webview), formatted);
g_free(formatted);
g_free(str);
xmlnode_free(node);
@@ -653,9 +661,10 @@
console->accounts = g_list_append(console->accounts, gc);
console->count++;
- if (console->count == 1)
+ if (console->count == 1) {
console->gc = gc;
- else
+ gtk_webview_load_html_string(GTK_WEBVIEW(console->webview), EMPTY_HTML);
+ } else
gtk_widget_show_all(console->hbox);
}
@@ -685,9 +694,11 @@
console->count--;
if (gc == console->gc) {
+ char *tmp = g_strdup_printf("%s
",
+ _("Logged out."));
+ gtk_webview_append_html(GTK_WEBVIEW(console->webview), tmp);
+ g_free(tmp);
console->gc = NULL;
- gtk_imhtml_append_text(GTK_IMHTML(console->imhtml),
- _("Logged out."), 0);
}
}
@@ -743,7 +754,7 @@
return;
console->gc = purple_account_get_connection(account);
- gtk_imhtml_clear(GTK_IMHTML(console->imhtml));
+ gtk_webview_load_html_string(GTK_WEBVIEW(console->webview), EMPTY_HTML);
}
static void
@@ -785,16 +796,20 @@
console->gc = gc;
}
}
- 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),
- _("Not connected to XMPP"), 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("%s
",
+ _("Not connected to XMPP"));
+ gtk_webview_append_html(GTK_WEBVIEW(console->webview), tmp);
+ g_free(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),
TRUE, TRUE, 0);
toolbar = gtk_toolbar_new();