summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2018-06-13 01:58:35 -0400
committerElliott Sales de Andrade <qulogic@pidgin.im>2018-06-13 01:58:35 -0400
commit290a9422b8ac4c53f8be7a8dbdd408f0d8c0c8d9 (patch)
tree30e75de738634507711453c05a77b6c989701cbf
parent7f46f1a8e57abf2e4c499df2b1c8713658943e51 (diff)
downloadpidgin-290a9422b8ac4c53f8be7a8dbdd408f0d8c0c8d9.tar.gz
debugwin: Also filter new messages as they come in.
-rw-r--r--pidgin/pidgindebug.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/pidgin/pidgindebug.c b/pidgin/pidgindebug.c
index ae60d2c92d..a48e083f7c 100644
--- a/pidgin/pidgindebug.c
+++ b/pidgin/pidgindebug.c
@@ -48,6 +48,7 @@ struct _PidginDebugWindow {
GtkWidget *toolbar;
GtkWidget *textview;
GtkTextBuffer *buffer;
+ GtkTextMark *start_mark;
GtkTextMark *end_mark;
struct {
GtkTextTag *level[PURPLE_DEBUG_FATAL + 1];
@@ -646,9 +647,15 @@ pidgin_debug_window_init(PidginDebugWindow *win)
filter_level_pref_changed, win);
}
- win->end_mark = gtk_text_mark_new("end", FALSE);
+ /* The *start* and *end* marks bound the beginning and end of an
+ insertion, used for filtering. The *end* mark is also used for
+ auto-scrolling. */
gtk_text_buffer_get_end_iter(win->buffer, &end);
- gtk_text_buffer_add_mark(win->buffer, win->end_mark, &end);
+ win->start_mark = gtk_text_buffer_create_mark(win->buffer,
+ "start", &end, TRUE);
+ win->end_mark = gtk_text_buffer_create_mark(win->buffer,
+ "end", &end, FALSE);
+
/* Set active filter level in textview */
debug_window_set_filter_level(win,
purple_prefs_get_int(PIDGIN_PREFS_ROOT "/debug/filterlevel"));
@@ -863,6 +870,8 @@ pidgin_debug_print(PurpleDebugUi *self,
scroll = view_near_bottom(debug_win);
gtk_text_buffer_get_end_iter(debug_win->buffer, &end);
+ gtk_text_buffer_move_mark(debug_win->buffer, debug_win->start_mark,
+ &end);
level_tag = debug_win->tags.level[level];
@@ -915,6 +924,18 @@ pidgin_debug_print(PurpleDebugUi *self,
debug_win->paused ? debug_win->tags.paused : NULL,
NULL);
+ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/filter") && debug_win->regex) {
+ /* Filter out any new messages. */
+ GtkTextIter start;
+
+ gtk_text_buffer_get_iter_at_mark(debug_win->buffer, &start,
+ debug_win->start_mark);
+ gtk_text_buffer_get_iter_at_mark(debug_win->buffer, &end,
+ debug_win->end_mark);
+
+ do_regex(debug_win, &start, &end);
+ }
+
if (scroll) {
gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(debug_win->textview),
debug_win->end_mark, 0, TRUE, 0, 1);