Mercurial > pidgin
comparison finch/gntdebug.c @ 17000:531a4585d437
Now that timestamps are gone, let's allow filter strings in the debug window.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Thu, 10 May 2007 03:35:52 +0000 |
parents | 87748f771638 |
children | 47a9ba4f4373 |
comparison
equal
deleted
inserted
replaced
16998:2f9e5cde6f97 | 17000:531a4585d437 |
---|---|
22 * along with this program; if not, write to the Free Software | 22 * along with this program; if not, write to the Free Software |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 */ | 24 */ |
25 #include <gnt.h> | 25 #include <gnt.h> |
26 #include <gntbox.h> | 26 #include <gntbox.h> |
27 #include <gnttextview.h> | |
28 #include <gntbutton.h> | 27 #include <gntbutton.h> |
29 #include <gntcheckbox.h> | 28 #include <gntcheckbox.h> |
29 #include <gntentry.h> | |
30 #include <gntlabel.h> | |
30 #include <gntline.h> | 31 #include <gntline.h> |
32 #include <gnttextview.h> | |
31 | 33 |
32 #include "gntdebug.h" | 34 #include "gntdebug.h" |
33 #include "finch.h" | 35 #include "finch.h" |
34 #include "util.h" | 36 #include "util.h" |
35 | 37 |
40 | 42 |
41 static struct | 43 static struct |
42 { | 44 { |
43 GntWidget *window; | 45 GntWidget *window; |
44 GntWidget *tview; | 46 GntWidget *tview; |
47 GntWidget *search; | |
45 gboolean paused; | 48 gboolean paused; |
46 } debug; | 49 } debug; |
47 | 50 |
51 static gboolean | |
52 match_string(const char *category, const char *args) | |
53 { | |
54 const char *str = gnt_entry_get_text(GNT_ENTRY(debug.search)); | |
55 if (!str || !*str) | |
56 return TRUE; | |
57 if (g_ascii_strcasecmp(str, category) == 0) | |
58 return TRUE; | |
59 if (g_ascii_strcasecmp(str, args) == 0) | |
60 return TRUE; | |
61 return FALSE; | |
62 } | |
63 | |
48 static void | 64 static void |
49 finch_debug_print(PurpleDebugLevel level, const char *category, | 65 finch_debug_print(PurpleDebugLevel level, const char *category, |
50 const char *args) | 66 const char *args) |
51 { | 67 { |
52 if (debug.window && !debug.paused) | 68 if (debug.window && !debug.paused && match_string(category, args)) |
53 { | 69 { |
54 int pos = gnt_text_view_get_lines_below(GNT_TEXT_VIEW(debug.tview)); | 70 int pos = gnt_text_view_get_lines_below(GNT_TEXT_VIEW(debug.tview)); |
55 GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL; | 71 GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL; |
56 const char *mdate; | 72 const char *mdate; |
57 time_t mtime = time(NULL); | 73 time_t mtime = time(NULL); |
106 } | 122 } |
107 | 123 |
108 static void | 124 static void |
109 reset_debug_win(GntWidget *w, gpointer null) | 125 reset_debug_win(GntWidget *w, gpointer null) |
110 { | 126 { |
111 debug.window = debug.tview = NULL; | 127 debug.window = debug.tview = debug.search = NULL; |
112 } | 128 } |
113 | 129 |
114 static void | 130 static void |
115 clear_debug_win(GntWidget *w, GntTextView *tv) | 131 clear_debug_win(GntWidget *w, GntTextView *tv) |
116 { | 132 { |
186 gnt_widget_get_size(widget, &w, &h); | 202 gnt_widget_get_size(widget, &w, &h); |
187 purple_prefs_set_int(PREF_ROOT "/size/width", w); | 203 purple_prefs_set_int(PREF_ROOT "/size/width", w); |
188 purple_prefs_set_int(PREF_ROOT "/size/height", h); | 204 purple_prefs_set_int(PREF_ROOT "/size/height", h); |
189 } | 205 } |
190 | 206 |
207 static gboolean | |
208 for_real(gpointer entry) | |
209 { | |
210 purple_prefs_set_string(PREF_ROOT "/filter", gnt_entry_get_text(entry)); | |
211 return FALSE; | |
212 } | |
213 | |
214 static void | |
215 update_filter_string(GntEntry *entry, gpointer null) | |
216 { | |
217 int id = g_timeout_add(1000, for_real, entry); | |
218 g_object_set_data_full(G_OBJECT(entry), "update-filter", GINT_TO_POINTER(id), | |
219 (GDestroyNotify)g_source_remove); | |
220 } | |
221 | |
191 void finch_debug_window_show() | 222 void finch_debug_window_show() |
192 { | 223 { |
193 debug.paused = FALSE; | 224 debug.paused = FALSE; |
194 if (debug.window == NULL) | 225 if (debug.window == NULL) |
195 { | 226 { |
220 wid = gnt_button_new(_("Clear")); | 251 wid = gnt_button_new(_("Clear")); |
221 g_signal_connect(G_OBJECT(wid), "activate", G_CALLBACK(clear_debug_win), debug.tview); | 252 g_signal_connect(G_OBJECT(wid), "activate", G_CALLBACK(clear_debug_win), debug.tview); |
222 GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); | 253 GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); |
223 gnt_box_add_widget(GNT_BOX(box), wid); | 254 gnt_box_add_widget(GNT_BOX(box), wid); |
224 | 255 |
256 debug.search = gnt_entry_new(purple_prefs_get_string(PREF_ROOT "/filter")); | |
257 gnt_box_add_widget(GNT_BOX(box), gnt_label_new(_("Filter: "))); | |
258 gnt_box_add_widget(GNT_BOX(box), debug.search); | |
259 g_signal_connect(G_OBJECT(debug.search), "text_changed", G_CALLBACK(update_filter_string), NULL); | |
260 | |
225 wid = gnt_check_box_new(_("Pause")); | 261 wid = gnt_check_box_new(_("Pause")); |
226 g_signal_connect(G_OBJECT(wid), "toggled", G_CALLBACK(toggle_pause), NULL); | 262 g_signal_connect(G_OBJECT(wid), "toggled", G_CALLBACK(toggle_pause), NULL); |
227 GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); | 263 GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); |
228 gnt_box_add_widget(GNT_BOX(box), wid); | 264 gnt_box_add_widget(GNT_BOX(box), wid); |
229 | 265 |
263 | 299 |
264 g_set_print_handler(print_stderr); /* Redirect the debug messages to stderr */ | 300 g_set_print_handler(print_stderr); /* Redirect the debug messages to stderr */ |
265 g_set_printerr_handler(suppress_error_messages); | 301 g_set_printerr_handler(suppress_error_messages); |
266 | 302 |
267 purple_prefs_add_none(PREF_ROOT); | 303 purple_prefs_add_none(PREF_ROOT); |
304 purple_prefs_add_string(PREF_ROOT "/filter", ""); | |
268 purple_prefs_add_none(PREF_ROOT "/size"); | 305 purple_prefs_add_none(PREF_ROOT "/size"); |
269 purple_prefs_add_int(PREF_ROOT "/size/width", 60); | 306 purple_prefs_add_int(PREF_ROOT "/size/width", 60); |
270 purple_prefs_add_int(PREF_ROOT "/size/height", 15); | 307 purple_prefs_add_int(PREF_ROOT "/size/height", 15); |
271 | 308 |
272 if (purple_debug_is_enabled()) | 309 if (purple_debug_is_enabled()) |