diff -r 43fab0434710 -r b4d46aa1be7d src/gtkdebug.c --- a/src/gtkdebug.c Wed Jul 07 22:06:44 2004 +0000 +++ b/src/gtkdebug.c Thu Jul 08 01:24:48 2004 +0000 @@ -24,6 +24,7 @@ */ #include "gtkinternal.h" +#include "notify.h" #include "prefs.h" #include "request.h" #include "util.h" @@ -42,6 +43,7 @@ GtkWidget *window; GtkWidget *text; GtkWidget *find; + GtkWidget *save; gboolean timestamps; gboolean paused; @@ -71,12 +73,14 @@ { if (debug_win->timestamps_handle != 0) gaim_prefs_disconnect_callback(debug_win->timestamps_handle); - - gaim_prefs_set_bool("/gaim/gtk/debug/enabled", FALSE); + if (debug_win->save != NULL) + gtk_widget_destroy(debug_win->save); g_free(debug_win); debug_win = NULL; + gaim_prefs_set_bool("/gaim/gtk/debug/enabled", FALSE); + return FALSE; } @@ -168,73 +172,128 @@ } static void -do_save_cb(GtkWidget *wid) +do_save_cb(GtkWidget *widget) { - DebugWindow *win = NULL; const char *filename; char *tmp; FILE *fp; - win = g_object_get_data(G_OBJECT(GTK_FILE_SELECTION(wid)->ok_button), - "gaim_debugwin"); + g_return_if_fail(debug_win != NULL); - filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); - gtk_widget_destroy(wid); +#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(debug_win->save)); +#else /* FILECHOOSER */ + filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(debug_win->save)); +#endif /* FILECHOOSER */ - if (filename == NULL) + if (filename == NULL) { + gaim_notify_error(NULL, NULL, _("Invalid file name."), NULL); return; - - if ((fp = fopen(filename, "w+")) == NULL) - return; + } - if (debug_win == NULL) + if ((fp = fopen(filename, "w+")) == NULL) { + gaim_notify_error(NULL, NULL, _("Unable to open file."), NULL); return; + } - tmp = gtk_imhtml_get_text(GTK_IMHTML(win->text), NULL, NULL); + tmp = gtk_imhtml_get_text(GTK_IMHTML(debug_win->text), NULL, NULL); fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full()); fprintf(fp, "%s", tmp); g_free(tmp); fclose(fp); + + gtk_widget_destroy(debug_win->save); + debug_win->save = NULL; } +#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ static void -do_check_save_cb(GtkObject *obj, GtkWidget *wid) +do_check_save_cb(GtkWidget *widget, gint response, gpointer data) +{ + DebugWindow *win = (DebugWindow *)data; + const char *filename; + + if (response != GTK_RESPONSE_ACCEPT) { + if (response == GTK_RESPONSE_CANCEL) + gtk_widget_destroy(win->save); + win->save = NULL; + return; + } + + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(win->save)); +#else /* FILECHOOSER */ +static void +do_check_save_cb(GtkWidget *widget, DebugWindow *win) { const char *filename; - filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); - if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(wid))) + filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(win->save)); + if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(win->save))) { + /* Descend into directory? */ return; + } +#endif /* FILECHOOSER */ 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); + _("Would you like to overwrite it?"), 1, + win->save, G_CALLBACK(do_save_cb), NULL); } else - do_save_cb(wid); + do_save_cb(win->save); } +#if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ +static void +cancel_save_cb(GtkWidget *widget, DebugWindow *win) +{ + if (win->save != NULL) + gtk_widget_destroy(win->save); + + win->save = NULL; +} +#endif + static void save_cb(GtkWidget *w, DebugWindow *win) { - char buf[BUF_LONG]; - GtkWidget *window; + if (win->save != NULL) { + gtk_widget_show(win->save); + gdk_window_raise(win->save->window); + return; + } - 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); +#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ + win->save = gtk_file_chooser_dialog_new(_("Save Conversation"), + GTK_WINDOW(win->window), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL); + gtk_dialog_set_default_response(GTK_DIALOG(win->save), GTK_RESPONSE_ACCEPT); + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(win->save), + "gaim-debug.log"); + g_signal_connect(G_OBJECT(win->save), + "response", G_CALLBACK(do_check_save_cb), win->save); +#else /* FILECHOOSER */ + gchar *buf; - gtk_widget_show(window); + win->save = gtk_file_selection_new(_("Save Debug Log")); + buf = g_strdup_printf("%s" G_DIR_SEPARATOR_S "gaim-debug.log", + gaim_home_dir()); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(win->save), buf); + g_free(buf); + g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->ok_button), + "clicked", G_CALLBACK(do_check_save_cb), win); + g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(win->save)->cancel_button), + "clicked", G_CALLBACK(cancel_save_cb), win); + g_signal_connect(G_OBJECT(win->save), + "destroy", G_CALLBACK(cancel_save_cb), win); +#endif /* FILECHOOSER */ + + gtk_widget_show(win->save); } static void