diff options
-rw-r--r-- | e-util/ChangeLog | 5 | ||||
-rw-r--r-- | e-util/e-dialog-utils.c | 58 |
2 files changed, 52 insertions, 11 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog index cae9acbc05..a441f4fb33 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,8 @@ +2004-08-12 Carlos Garnacho Parro <carlosg@gnome.org> + + * e-dialog-utils.c: Optionally use GtkFileChooser if compiled + against Gtk+ >= 2.4.0 + 2004-08-10 Not Zed <NotZed@Ximian.com> ** See bug #61840, and others. diff --git a/e-util/e-dialog-utils.c b/e-util/e-dialog-utils.c index 751a89be68..702ee053ca 100644 --- a/e-util/e-dialog-utils.c +++ b/e-util/e-dialog-utils.c @@ -30,9 +30,17 @@ #include <gdk/gdkx.h> -#include <gtk/gtkfilesel.h> #include <gtk/gtkmain.h> #include <gtk/gtkplug.h> +#include <gtk/gtkversion.h> + +#ifdef USE_GTKFILECHOOSER +#include <gtk/gtkfilechooser.h> +#include <gtk/gtkfilechooserdialog.h> +#include <gtk/gtkstock.h> +#else +#include <gtk/gtkfilesel.h> +#endif #include <libgnome/gnome-i18n.h> #include <libgnome/gnome-util.h> @@ -242,7 +250,11 @@ save_ok (GtkWidget *widget, gpointer data) int btn = GTK_RESPONSE_YES; fs = gtk_widget_get_toplevel (widget); +#ifdef USE_GTKFILECHOOSER + path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fs)); +#else path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); +#endif if (g_file_test (path, G_FILE_TEST_IS_REGULAR)) { GtkWidget *dlg; @@ -265,25 +277,49 @@ save_ok (GtkWidget *widget, gpointer data) gtk_main_quit (); } +#ifdef USE_GTKFILECHOOSER +static void +filechooser_response (GtkWidget *fc, gint response_id, gpointer data) +{ + if (response_id == GTK_RESPONSE_ACCEPT) + save_ok (fc, data); + else + gtk_widget_destroy (fc); +} +#endif + char * e_file_dialog_save (const char *title) { - GtkFileSelection *fs; + GtkWidget *selection; char *path, *filename = NULL; - - fs = GTK_FILE_SELECTION (gtk_file_selection_new (title)); + +#ifdef USE_GTKFILECHOOSER + selection = gtk_file_chooser_dialog_new (title, + NULL, + 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 (selection), GTK_RESPONSE_ACCEPT); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (selection), g_get_home_dir ()); + + g_signal_connect (G_OBJECT (selection), "response", G_CALLBACK (filechooser_response), &filename); +#else + selection = gtk_file_selection_new (title); path = g_strdup_printf ("%s/", g_get_home_dir ()); - gtk_file_selection_set_filename (fs, path); + gtk_file_selection_set_filename (GTK_FILE_SELECTION (selection), path); g_free (path); + + g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (selection)->ok_button), "clicked", G_CALLBACK (save_ok), &filename); + g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (selection)->cancel_button), "clicked", G_CALLBACK (gtk_main_quit), NULL); +#endif - g_signal_connect (fs->ok_button, "clicked", G_CALLBACK (save_ok), &filename); - g_signal_connect (fs->cancel_button, "clicked", G_CALLBACK (gtk_main_quit), NULL); - - gtk_widget_show (GTK_WIDGET (fs)); - gtk_grab_add (GTK_WIDGET (fs)); + gtk_widget_show (GTK_WIDGET (selection)); + gtk_grab_add (GTK_WIDGET (selection)); gtk_main (); - gtk_widget_destroy (GTK_WIDGET (fs)); + gtk_widget_destroy (GTK_WIDGET (selection)); return filename; } |