diff -r 39c2c22bc99f -r 4998e86453d0 pidgin/gtkdebug.c --- a/pidgin/gtkdebug.c Mon Nov 19 15:53:52 2012 +0100 +++ b/pidgin/gtkdebug.c Wed Nov 21 18:15:54 2012 +0100 @@ -76,7 +76,22 @@ /* Regex */ \ "div.hide{display:none;}" \ "span.regex{background-color:#ffafaf;font-weight:bold;}" \ - "" + "" static DebugWindow *debug_win = NULL; static guint debug_enabled_timer = 0; @@ -639,25 +654,39 @@ } static void -regex_html_appended_cb(GtkWebView *webview, WebKitDOMRange *range, DebugWindow *win) +debug_window_appended(DebugWindow *win) { - if (!win || !win->window) + WebKitDOMDocument *dom; + WebKitDOMHTMLElement *body; + WebKitDOMNode *div; + + if (!gtk_toggle_tool_button_get_active( + GTK_TOGGLE_TOOL_BUTTON(win->filter))) return; - if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(win->filter))) { - WebKitDOMDocument *dom; - WebKitDOMHTMLElement *body; - WebKitDOMNode *div; + dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(win->text)); + body = webkit_dom_document_get_body(dom); + div = webkit_dom_node_get_last_child(WEBKIT_DOM_NODE(body)); + + if (webkit_dom_element_webkit_matches_selector( + WEBKIT_DOM_ELEMENT(div), "body>div:not(#pause)", NULL)) + regex_match(win, dom, div); +} - dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(win->text)); - body = webkit_dom_document_get_body(dom); - div = webkit_dom_node_get_last_child(WEBKIT_DOM_NODE(body)); +static gboolean debug_window_alert_cb(WebKitWebView *webview, + WebKitWebFrame *frame, gchar *message, gpointer _win) +{ + DebugWindow *win = _win; - if (webkit_dom_element_webkit_matches_selector(WEBKIT_DOM_ELEMENT(div), - "body>div:not(#pause)", - NULL)) - regex_match(win, dom, div); + if (!win || !win->window) + return FALSE; + + if (g_strcmp0(message, "appended") == 0) { + debug_window_appended(win); + return TRUE; } + + return FALSE; } static DebugWindow * @@ -831,8 +860,8 @@ gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); gtk_widget_show(frame); - g_signal_connect(G_OBJECT(win->text), "html-appended", - G_CALLBACK(regex_html_appended_cb), win); + g_signal_connect(G_OBJECT(win->text), "script-alert", + G_CALLBACK(debug_window_alert_cb), win); clear_cb(NULL, win); @@ -1000,41 +1029,29 @@ static void pidgin_debug_print(PurpleDebugLevel level, const char *category, - const char *arg_s) + const char *arg_s) { - gchar *ts_s; - gchar *esc_s, *cat_s, *tmp, *s; + gchar *esc_s; const char *mdate; time_t mtime; + gchar *js; - if (debug_win == NULL || - !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) - { + if (debug_win == NULL) return; - } + if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) + return; mtime = time(NULL); mdate = purple_utf8_strftime("%H:%M:%S", localtime(&mtime)); - ts_s = g_strdup_printf("(%s) ", mdate); - if (category == NULL) - cat_s = g_strdup(""); - else - cat_s = g_strdup_printf("%s: ", category); - tmp = purple_utf8_try_convert(arg_s); - esc_s = g_markup_escape_text(tmp, -1); + esc_s = purple_escape_js(arg_s); - s = g_strdup_printf("
%s%s%s
", - level, ts_s, cat_s, esc_s); - - g_free(ts_s); - g_free(cat_s); + js = g_strdup_printf("append(%d, '%s', '%s', '%s');", + level, mdate, category ? category : "", esc_s); g_free(esc_s); - g_free(tmp); - gtk_webview_append_html(GTK_WEBVIEW(debug_win->text), s); - - g_free(s); + gtk_webview_safe_execute_script(GTK_WEBVIEW(debug_win->text), js); + g_free(js); } static gboolean