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())