Index: src/gtkdebug.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkdebug.c,v retrieving revision 1.34 diff -u -p -r1.34 gtkdebug.c --- src/gtkdebug.c 21 Apr 2004 01:34:22 -0000 1.34 +++ src/gtkdebug.c 16 May 2004 11:17:13 -0000 @@ -26,9 +26,11 @@ #include "prefs.h" #include "util.h" +#include "request.h" #include "gtkdebug.h" #include "gtkimhtml.h" +#include "gtkutils.h" #include "stock.h" #include "ui.h" @@ -84,6 +86,70 @@ configure_cb(GtkWidget *w, GdkEventConfi } static void +do_save_cb(GtkWidget *wid) +{ + DebugWindow *win; + const char *filename, *tmp; + FILE *fp; + + win = g_object_get_data(G_OBJECT(GTK_FILE_SELECTION(wid)->ok_button), + "gaim_debugwin"); + + filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); + gtk_widget_destroy(wid); + + if (filename == NULL) + return; + + if ((fp = fopen(filename, "w+")) == NULL) + return; + + tmp = gtk_imhtml_get_text(GTK_IMHTML(win->text), NULL, NULL); + fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full()); + fprintf(fp, "%s", tmp); + + fclose(fp); +} + +static void +do_check_save_cb(GtkObject *obj, GtkWidget *wid) +{ + const char *filename; + + filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); + if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(wid))) + return; + + if (g_file_test(filename, G_FILE_TEST_EXISTS)) + { + gaim_request_yes_no(NULL, NULL, _("That file already exists"), + _("Would you like to overwrite it?"), 1, wid, + G_CALLBACK(do_save_cb), NULL); + } + else + do_save_cb(wid); +} + +static void +save_cb(GtkWidget *w, DebugWindow *win) +{ + char buf[BUF_LONG]; + GtkWidget *window; + + window = gtk_file_selection_new(_("Save Debug Log")); + g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gaim-debug.log", + gaim_home_dir()); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); + g_object_set_data(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), + "gaim_debugwin", win); + g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), + "clicked", G_CALLBACK(do_check_save_cb), window); + g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), + "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)window); + gtk_widget_show(window); +} + +static void clear_cb(GtkWidget *w, DebugWindow *win) { gtk_imhtml_clear(GTK_IMHTML(win->text)); @@ -157,10 +223,10 @@ debug_window_new(void) gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_FIND, NULL, NULL, NULL, NULL, -1); +#endif /* Save */ gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_SAVE, - NULL, NULL, NULL, NULL, -1); -#endif + NULL, NULL, G_CALLBACK(save_cb), win, -1); /* Clear button */ gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_CLEAR,