pidgin/gtkdebug.c

changeset 33537
4998e86453d0
parent 33532
66962f44ff47
child 33538
cbeb76707f12
equal deleted inserted replaced
33536:39c2c22bc99f 33537:4998e86453d0
74 "body.l4 div.l0,body.l4 div.l1,body.l4 div.l2,body.l4 div.l3{display:none;}" \ 74 "body.l4 div.l0,body.l4 div.l1,body.l4 div.l2,body.l4 div.l3{display:none;}" \
75 "body.l5 div.l0,body.l5 div.l1,body.l5 div.l2,body.l5 div.l3,body.l5 div.l4{display:none;}" \ 75 "body.l5 div.l0,body.l5 div.l1,body.l5 div.l2,body.l5 div.l3,body.l5 div.l4{display:none;}" \
76 /* Regex */ \ 76 /* Regex */ \
77 "div.hide{display:none;}" \ 77 "div.hide{display:none;}" \
78 "span.regex{background-color:#ffafaf;font-weight:bold;}" \ 78 "span.regex{background-color:#ffafaf;font-weight:bold;}" \
79 "</style></head><body class=l%d></body></html>" 79 "</style><script>" \
80 "function append(level, time, cat, msg) {" \
81 "var div = document.createElement('div');" \
82 "div.className = 'l' + level;" \
83 "div.appendChild(document.createTextNode('(' + time + ') '));" \
84 "if (cat) {" \
85 "var cat_n = document.createElement('b');" \
86 "cat_n.appendChild(document.createTextNode(cat + ':'));" \
87 "div.appendChild(cat_n);" \
88 "div.appendChild(document.createTextNode(' '));" \
89 "}" \
90 "div.appendChild(document.createTextNode(msg));" \
91 "document.body.appendChild(div);" \
92 "alert('appended');" \
93 "}" \
94 "</script></head><body class=l%d></body></html>"
80 95
81 static DebugWindow *debug_win = NULL; 96 static DebugWindow *debug_win = NULL;
82 static guint debug_enabled_timer = 0; 97 static guint debug_enabled_timer = 0;
83 98
84 static gint 99 static gint
637 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); 652 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
638 return FALSE; 653 return FALSE;
639 } 654 }
640 655
641 static void 656 static void
642 regex_html_appended_cb(GtkWebView *webview, WebKitDOMRange *range, DebugWindow *win) 657 debug_window_appended(DebugWindow *win)
643 { 658 {
659 WebKitDOMDocument *dom;
660 WebKitDOMHTMLElement *body;
661 WebKitDOMNode *div;
662
663 if (!gtk_toggle_tool_button_get_active(
664 GTK_TOGGLE_TOOL_BUTTON(win->filter)))
665 return;
666
667 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(win->text));
668 body = webkit_dom_document_get_body(dom);
669 div = webkit_dom_node_get_last_child(WEBKIT_DOM_NODE(body));
670
671 if (webkit_dom_element_webkit_matches_selector(
672 WEBKIT_DOM_ELEMENT(div), "body>div:not(#pause)", NULL))
673 regex_match(win, dom, div);
674 }
675
676 static gboolean debug_window_alert_cb(WebKitWebView *webview,
677 WebKitWebFrame *frame, gchar *message, gpointer _win)
678 {
679 DebugWindow *win = _win;
680
644 if (!win || !win->window) 681 if (!win || !win->window)
645 return; 682 return FALSE;
646 683
647 if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(win->filter))) { 684 if (g_strcmp0(message, "appended") == 0) {
648 WebKitDOMDocument *dom; 685 debug_window_appended(win);
649 WebKitDOMHTMLElement *body; 686 return TRUE;
650 WebKitDOMNode *div; 687 }
651 688
652 dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(win->text)); 689 return FALSE;
653 body = webkit_dom_document_get_body(dom);
654 div = webkit_dom_node_get_last_child(WEBKIT_DOM_NODE(body));
655
656 if (webkit_dom_element_webkit_matches_selector(WEBKIT_DOM_ELEMENT(div),
657 "body>div:not(#pause)",
658 NULL))
659 regex_match(win, dom, div);
660 }
661 } 690 }
662 691
663 static DebugWindow * 692 static DebugWindow *
664 debug_window_new(void) 693 debug_window_new(void)
665 { 694 {
829 GTK_WEBVIEW_ALL ^ GTK_WEBVIEW_SMILEY ^ GTK_WEBVIEW_IMAGE); 858 GTK_WEBVIEW_ALL ^ GTK_WEBVIEW_SMILEY ^ GTK_WEBVIEW_IMAGE);
830 gtk_webview_set_autoscroll(GTK_WEBVIEW(win->text), TRUE); 859 gtk_webview_set_autoscroll(GTK_WEBVIEW(win->text), TRUE);
831 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); 860 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
832 gtk_widget_show(frame); 861 gtk_widget_show(frame);
833 862
834 g_signal_connect(G_OBJECT(win->text), "html-appended", 863 g_signal_connect(G_OBJECT(win->text), "script-alert",
835 G_CALLBACK(regex_html_appended_cb), win); 864 G_CALLBACK(debug_window_alert_cb), win);
836 865
837 clear_cb(NULL, win); 866 clear_cb(NULL, win);
838 867
839 gtk_widget_show_all(win->window); 868 gtk_widget_show_all(win->window);
840 869
998 } 1027 }
999 } 1028 }
1000 1029
1001 static void 1030 static void
1002 pidgin_debug_print(PurpleDebugLevel level, const char *category, 1031 pidgin_debug_print(PurpleDebugLevel level, const char *category,
1003 const char *arg_s) 1032 const char *arg_s)
1004 { 1033 {
1005 gchar *ts_s; 1034 gchar *esc_s;
1006 gchar *esc_s, *cat_s, *tmp, *s;
1007 const char *mdate; 1035 const char *mdate;
1008 time_t mtime; 1036 time_t mtime;
1009 1037 gchar *js;
1010 if (debug_win == NULL || 1038
1011 !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) 1039 if (debug_win == NULL)
1012 {
1013 return; 1040 return;
1014 } 1041 if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled"))
1042 return;
1015 1043
1016 mtime = time(NULL); 1044 mtime = time(NULL);
1017 mdate = purple_utf8_strftime("%H:%M:%S", localtime(&mtime)); 1045 mdate = purple_utf8_strftime("%H:%M:%S", localtime(&mtime));
1018 ts_s = g_strdup_printf("(%s) ", mdate); 1046
1019 if (category == NULL) 1047 esc_s = purple_escape_js(arg_s);
1020 cat_s = g_strdup(""); 1048
1021 else 1049 js = g_strdup_printf("append(%d, '%s', '%s', '%s');",
1022 cat_s = g_strdup_printf("<b>%s:</b> ", category); 1050 level, mdate, category ? category : "", esc_s);
1023
1024 tmp = purple_utf8_try_convert(arg_s);
1025 esc_s = g_markup_escape_text(tmp, -1);
1026
1027 s = g_strdup_printf("<div class=\"l%d\">%s%s%s</div>",
1028 level, ts_s, cat_s, esc_s);
1029
1030 g_free(ts_s);
1031 g_free(cat_s);
1032 g_free(esc_s); 1051 g_free(esc_s);
1033 g_free(tmp); 1052
1034 1053 gtk_webview_safe_execute_script(GTK_WEBVIEW(debug_win->text), js);
1035 gtk_webview_append_html(GTK_WEBVIEW(debug_win->text), s); 1054 g_free(js);
1036
1037 g_free(s);
1038 } 1055 }
1039 1056
1040 static gboolean 1057 static gboolean
1041 pidgin_debug_is_enabled(PurpleDebugLevel level, const char *category) 1058 pidgin_debug_is_enabled(PurpleDebugLevel level, const char *category)
1042 { 1059 {

mercurial