aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/ChangeLog10
-rw-r--r--e-util/e-dialog-utils.c58
-rw-r--r--e-util/e-dialog-utils.h2
3 files changed, 70 insertions, 0 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog
index 6ea7c05660..375de2f381 100644
--- a/e-util/ChangeLog
+++ b/e-util/ChangeLog
@@ -1,3 +1,13 @@
+2002-03-29 JP Rosevear <jpr@ximian.com>
+
+ * e-dialog-utils.c (e_file_dialog_save): open a file selection
+ dialog with the given title and return the selected file name
+ (save_ok): if the ok button is clicked, make sure the file doesn't
+ already exist and if it does, see if the user wants to over write
+ it
+
+ * e-dialog-utils.h: new proto
+
2002-03-22 Ettore Perazzoli <ettore@ximian.com>
* e-lang-utils.c: New.
diff --git a/e-util/e-dialog-utils.c b/e-util/e-dialog-utils.c
index f155b83145..0102c45167 100644
--- a/e-util/e-dialog-utils.c
+++ b/e-util/e-dialog-utils.c
@@ -30,9 +30,15 @@
#include <gdk/gdkprivate.h>
#include <gdk/gdk.h>
+#include <gtk/gtkmain.h>
#include <gtk/gtksignal.h>
+#include <gtk/gtkfilesel.h>
+#include <libgnome/gnome-defs.h>
+#include <libgnome/gnome-i18n.h>
+#include <libgnome/gnome-util.h>
#include <libgnomeui/gnome-dialog-util.h>
+#include <libgnomeui/gnome-uidefs.h>
#include <bonobo/bonobo-control.h>
#include <bonobo/bonobo-property-bag.h>
@@ -204,3 +210,55 @@ e_gnome_ok_cancel_dialog_parented (const char *message, GnomeReplyCallback callb
return dialog;
}
+
+static void
+save_ok (GtkWidget *widget, gpointer data)
+{
+ GtkWidget *fs;
+ char **filename = data;
+ char *path;
+ int btn = GNOME_YES;
+
+ fs = gtk_widget_get_toplevel (widget);
+ path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+
+ if (g_file_test (path, G_FILE_TEST_ISFILE)) {
+ GtkWidget *dlg;
+
+ dlg = gnome_question_dialog_modal (_("A file by that name already exists.\n"
+ "Overwrite it?"), NULL, NULL);
+ btn = gnome_dialog_run_and_close (GNOME_DIALOG (dlg));
+ }
+
+ if (btn == GNOME_YES)
+ *filename = g_strdup (path);
+
+ gtk_main_quit ();
+}
+
+char *
+e_file_dialog_save (const char *title)
+{
+ GtkFileSelection *fs;
+ char *path, *filename = NULL;
+
+ fs = GTK_FILE_SELECTION (gtk_file_selection_new (title));
+ path = g_strdup_printf ("%s/", g_get_home_dir ());
+ gtk_file_selection_set_filename (fs, path);
+ g_free (path);
+
+ gtk_signal_connect (GTK_OBJECT (fs->ok_button), "clicked",
+ GTK_SIGNAL_FUNC (save_ok), &filename);
+ gtk_signal_connect (GTK_OBJECT (fs->cancel_button), "clicked",
+ GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+
+ gtk_widget_show (GTK_WIDGET (fs));
+ gtk_grab_add (GTK_WIDGET (fs));
+ gtk_main ();
+
+ gtk_widget_destroy (GTK_WIDGET (fs));
+
+ return filename;
+}
+
+
diff --git a/e-util/e-dialog-utils.h b/e-util/e-dialog-utils.h
index 1e1b8af22f..275f8ec264 100644
--- a/e-util/e-dialog-utils.h
+++ b/e-util/e-dialog-utils.h
@@ -42,5 +42,7 @@ GtkWidget *e_gnome_ok_cancel_dialog_parented (const char *message,
GnomeReplyCallback callback,
gpointer data,
GtkWindow *parent);
+char *e_file_dialog_save (const char *title);
+
#endif