# HG changeset patch # User Mark Doliner # Date 1089249888 0 # Node ID 91856b52a391d1d54d2953909c128734460db571 # Parent fababc25f270bd3b884b0f950d669ba4904122b8 [gaim-migrate @ 10305] Make the debug window's save button use the gtk 2.4 file chooser. I'll ChangeLog this when I'm done with all the dialogs. The code isn't the prettiest thing in the world... but I don't see a better way. And I'm about to test this on a gtk less than 2.4, once I commit it. committer: Tailor Script diff -r fababc25f270 -r 91856b52a391 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