diff options
author | Daniel Gryniewicz <dang@gentoo.org> | 2006-11-28 02:49:11 +0800 |
---|---|---|
committer | Srinivasa Ragavan <sragavan@src.gnome.org> | 2006-11-28 02:49:11 +0800 |
commit | 6395ec0243694ee6677e65c4d5fef0731d7c7e86 (patch) | |
tree | 35b199198b2bcd4b31c2883feb8ab408c12b2ce6 | |
parent | 97585dc9f97faf21762939ef107eba756a47ef63 (diff) | |
download | gsoc2013-evolution-6395ec0243694ee6677e65c4d5fef0731d7c7e86.tar.gz gsoc2013-evolution-6395ec0243694ee6677e65c4d5fef0731d7c7e86.tar.zst gsoc2013-evolution-6395ec0243694ee6677e65c4d5fef0731d7c7e86.zip |
** Fix for bug #349966
2006-11-28 Daniel Gryniewicz <dang@gentoo.org>
** Fix for bug #349966
svn path=/trunk/; revision=33026
-rw-r--r-- | calendar/ChangeLog | 8 | ||||
-rw-r--r-- | calendar/gui/apps_evolution_calendar.schemas.in.in | 14 | ||||
-rw-r--r-- | calendar/gui/calendar-config-keys.h | 2 | ||||
-rw-r--r-- | calendar/gui/dialogs/alarm-dialog.c | 1 | ||||
-rw-r--r-- | e-util/ChangeLog | 12 | ||||
-rw-r--r-- | e-util/e-dialog-utils.c | 239 | ||||
-rw-r--r-- | e-util/e-dialog-utils.h | 6 | ||||
-rw-r--r-- | e-util/e-util.c | 41 | ||||
-rw-r--r-- | e-util/e-util.h | 3 | ||||
-rw-r--r-- | mail/ChangeLog | 9 | ||||
-rw-r--r-- | mail/em-utils.c | 167 | ||||
-rw-r--r-- | mail/evolution-mail.schemas.in.in | 15 |
12 files changed, 258 insertions, 259 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index d235e04709..6a97fbfa9b 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,11 @@ +2006-11-28 Daniel Gryniewicz <dang@gentoo.org> + + ** Fix for bug #349966 + + * gui/apps_evolution_calendar.schemas.in.in: + * gui/calendar-config-keys.h: + * gui/dialogs/alarm-dialog.c: (action_selection_done_cb): + 2006-11-20 Carlos Garcia Campos <carlosgc@gnome.org> Fixes bug #367183 diff --git a/calendar/gui/apps_evolution_calendar.schemas.in.in b/calendar/gui/apps_evolution_calendar.schemas.in.in index 34730bd303..e024826c95 100644 --- a/calendar/gui/apps_evolution_calendar.schemas.in.in +++ b/calendar/gui/apps_evolution_calendar.schemas.in.in @@ -577,5 +577,19 @@ <long>The URL template to use as a free/busy data fallback, %u is replaced by the user part of the mail address and %d is replaced by the domain.</long> </locale> </schema> + + <schema> + <key>/schemas/apps/evolution/calendar/audio_dir</key> + <applyto>/apps/evolution/calendar/audio_dir</applyto> + <owner>evolution-calendar</owner> + <type>string</type> + <locale name="C"> + <short>Save directory for alarm audio</short> + <long> + Directory for saving alarm audio files + </long> + </locale> + </schema> + </schemalist> </gconfschemafile> diff --git a/calendar/gui/calendar-config-keys.h b/calendar/gui/calendar-config-keys.h index 2f85954ab7..b1fe13918b 100644 --- a/calendar/gui/calendar-config-keys.h +++ b/calendar/gui/calendar-config-keys.h @@ -91,7 +91,7 @@ G_BEGIN_DECLS /* Free/Busy settings */ #define CALENDAR_CONFIG_TEMPLATE CALENDAR_CONFIG_PREFIX"/publish/template" -#define CALENDAR_CONFIG_SAVE_DIR "/apps/evolution/mail/save_dir" +#define CALENDAR_CONFIG_SAVE_DIR CALENDAR_CONFIG_PREFIX"/audio_dir" G_END_DECLS #endif diff --git a/calendar/gui/dialogs/alarm-dialog.c b/calendar/gui/dialogs/alarm-dialog.c index 90f3e72e2b..d6e03cc036 100644 --- a/calendar/gui/dialogs/alarm-dialog.c +++ b/calendar/gui/dialogs/alarm-dialog.c @@ -1080,6 +1080,7 @@ action_selection_done_cb (GtkMenuShell *menu_shell, gpointer data) dir = calendar_config_get_dir_path (); if ( dir && *dir ) gnome_file_entry_set_default_path (GNOME_FILE_ENTRY (dialog->aalarm_file_entry), dir); + g_free (dir); check_custom_sound (dialog); break; diff --git a/e-util/ChangeLog b/e-util/ChangeLog index a0e1bf8f38..57bf7fd461 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,15 @@ +2006-11-28 Daniel Gryniewicz <dang@gentoo.org> + + ** Fix for bug #349966 + + * e-dialog-utils.c: (save_ok), (filechooser_response), + (e_file_dialog_save), (save_folder_ok), (folderchooser_response), + (e_file_dialog_save_folder), (e_file_get_save_filesel), + (e_file_can_save), (e_file_check_local): + * e-dialog-utils.h: + * e-util.c: (e_file_update_save_path), (e_file_get_save_path): + * e-util.h: + 2006-11-20 Harish Krishnaswamy <kharish@novell.com> * e-icon-factory.c: (load_icon), (e_icon_factory_get_icon): diff --git a/e-util/e-dialog-utils.c b/e-util/e-dialog-utils.c index 44c5c24194..581c24240c 100644 --- a/e-util/e-dialog-utils.c +++ b/e-util/e-dialog-utils.c @@ -28,6 +28,10 @@ #include "e-dialog-utils.h" +#include <unistd.h> +#include <glib.h> +#include <glib/gstdio.h> + #include <gdkconfig.h> #ifdef GDK_WINDOWING_X11 #include <gdk/gdkx.h> @@ -37,18 +41,19 @@ #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 <gconf/gconf-client.h> #include <libgnome/gnome-i18n.h> #include <libgnome/gnome-util.h> +#include <libgnomevfs/gnome-vfs-utils.h> + +#include "e-util/e-util.h" +#include "e-util/e-error.h" + /** * e_notice: @@ -261,104 +266,42 @@ save_ok (GtkWidget *widget, gpointer data) GtkWidget *fs; char **filename = data; char *uri; - const char *path; - int btn = GTK_RESPONSE_YES; - GConfClient *gconf = gconf_client_get_default(); - char *dir; fs = gtk_widget_get_toplevel (widget); -#ifdef USE_GTKFILECHOOSER - path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fs)); uri = gtk_file_chooser_get_uri (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; - - dlg = gtk_message_dialog_new (GTK_WINDOW (fs), 0, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - _("A file by that name already exists.\n" - "Overwrite it?")); - gtk_window_set_title (GTK_WINDOW (dlg), _("Overwrite file?")); - gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE); - - btn = gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - } - if (btn == GTK_RESPONSE_YES) { - dir = g_path_get_dirname (path); - gconf_client_set_string(gconf, "/apps/evolution/mail/save_dir", dir, NULL); - g_free (dir); + if (e_file_can_save((GtkWindow *)widget, uri)) { + e_file_update_save_path(gtk_file_chooser_get_current_folder_uri(GTK_FILE_CHOOSER(fs)), TRUE); *filename = uri; } - g_object_unref(gconf); gtk_main_quit (); } -#ifdef USE_GTKFILECHOOSER static void filechooser_response (GtkWidget *fc, gint response_id, gpointer data) { - if (response_id == GTK_RESPONSE_ACCEPT) + if (response_id == GTK_RESPONSE_OK) save_ok (fc, data); else gtk_widget_destroy (fc); } -#endif char * e_file_dialog_save (const char *title, const char *fname) { GtkWidget *selection; char *filename = NULL; - char *dir, *gdir = NULL; - GConfClient *gconf; - - gconf = gconf_client_get_default(); - dir = gdir = gconf_client_get_string(gconf, "/apps/evolution/mail/save_dir", NULL); - g_object_unref(gconf); - - if (dir == NULL) - dir = (char *)g_get_home_dir(); - -#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), dir); - gtk_file_chooser_set_local_only (selection, FALSE); - - if (fname) - gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (selection), fname); - - g_signal_connect (G_OBJECT (selection), "response", G_CALLBACK (filechooser_response), &filename); -#else - char *path; - selection = gtk_file_selection_new (title); - path = g_strdup_printf ("%s/", dir); - gtk_file_selection_set_filename (GTK_FILE_SELECTION (selection), path); - g_free (path); + selection = e_file_get_save_filesel(NULL, title, fname, GTK_FILE_CHOOSER_ACTION_SAVE); - 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 (G_OBJECT (selection), "response", G_CALLBACK (filechooser_response), &filename); gtk_widget_show (GTK_WIDGET (selection)); gtk_grab_add (GTK_WIDGET (selection)); gtk_main (); gtk_widget_destroy (GTK_WIDGET (selection)); - g_free (gdir); return filename; } @@ -369,83 +312,147 @@ save_folder_ok (GtkWidget *widget, gpointer data) GtkWidget *fs; char **filename = data; char *uri; - const char *path; - GConfClient *gconf = gconf_client_get_default(); fs = gtk_widget_get_toplevel (widget); -#ifdef USE_GTKFILECHOOSER - path = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (fs)); uri = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (fs)); -#else - path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); -#endif - gconf_client_set_string(gconf, "/apps/evolution/mail/save_dir", path, NULL); - g_object_unref(gconf); + e_file_update_save_path(uri, FALSE); *filename = uri; gtk_main_quit (); } -#ifdef USE_GTKFILECHOOSER static void folderchooser_response (GtkWidget *fc, gint response_id, gpointer data) { - if (response_id == GTK_RESPONSE_ACCEPT) + if (response_id == GTK_RESPONSE_OK) save_folder_ok (fc, data); else gtk_widget_destroy (fc); } -#endif char * e_file_dialog_save_folder (const char *title) { GtkWidget *selection; -#ifndef USE_GTKFILECHOOSER - char *path; -#endif char *filename = NULL; - char *dir, *gdir = NULL; - GConfClient *gconf; - - gconf = gconf_client_get_default(); - dir = gdir = gconf_client_get_string(gconf, "/apps/evolution/mail/save_dir", NULL); - g_object_unref(gconf); - - if (dir == NULL) - dir = (char *)g_get_home_dir(); - -#ifdef USE_GTKFILECHOOSER - selection = gtk_file_chooser_dialog_new (title, - NULL, - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, - 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_local_only (selection, FALSE); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (selection), dir); + selection = e_file_get_save_filesel(NULL, title, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); g_signal_connect (G_OBJECT (selection), "response", G_CALLBACK (folderchooser_response), &filename); -#else - selection = gtk_file_selection_new (title); - path = g_strdup_printf ("%s/", dir); - 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_folder_ok), &filename); - g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (selection)->cancel_button), "clicked", G_CALLBACK (gtk_main_quit), NULL); -#endif gtk_widget_show (GTK_WIDGET (selection)); gtk_grab_add (GTK_WIDGET (selection)); gtk_main (); gtk_widget_destroy (GTK_WIDGET (selection)); - g_free (gdir); return filename; } +/** + * e_file_get_save_filesel: + * @parent: parent window + * @title: dialog title + * @name: filename + * @action: action for dialog + * + * Creates a save dialog, using the saved directory from gconf. The dialog has + * no signals connected and is not shown. + **/ +GtkWidget * +e_file_get_save_filesel (GtkWidget *parent, const char *title, const char *name, GtkFileChooserAction action) +{ + GtkWidget *filesel; + char *realname, *uri; + + filesel = gtk_file_chooser_dialog_new (title, + NULL, + action, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, + NULL); + gtk_dialog_set_default_response (GTK_DIALOG (filesel), GTK_RESPONSE_OK); + gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (filesel), FALSE); + + if (parent) + e_dialog_set_transient_for((GtkWindow *)filesel, parent); + + uri = e_file_get_save_path(); + + if (name && name[0]) { + realname = gnome_vfs_escape_string (name); + } else { + realname = NULL; + } + + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (filesel), uri); + + if (realname) + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filesel), realname); + + g_free (realname); + g_free (uri); + + return filesel; +} + +/** + * e_file_can_save: + * + * Return TRUE if the URI can be saved to, FALSE otherwise. It checks local + * files to see if they're regular and can be accessed. If the file exists and + * is writable, it pops up a dialog asking the user if they want to overwrite + * it. Returns the users choice. + **/ +gboolean +e_file_can_save(GtkWindow *parent, const char *uri) +{ + struct stat st; + char *path; + gboolean res; + + if (!uri || uri[0] == 0) + return FALSE; + + /* Assume remote files are writable; too costly to check */ + if (!e_file_check_local(uri)) + return TRUE; + + path = gnome_vfs_get_local_path_from_uri(uri); + if (!path) + return FALSE; + /* make sure we can actually save to it... */ + if (g_stat (path, &st) != -1 && !S_ISREG (st.st_mode)) { + g_free(path); + return FALSE; + } + + res = TRUE; + if (g_access (path, F_OK) == 0) { + if (g_access (path, W_OK) != 0) { e_error_run(parent, "mail:no-save-path", path, g_strerror(errno), NULL); + g_free(path); + return FALSE; + } + + res = e_error_run(parent, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, path, NULL) == GTK_RESPONSE_OK; + + } + + g_free(path); + return res; +} + +gboolean +e_file_check_local (const char *name) +{ + char *uri; + + uri = gnome_vfs_get_local_path_from_uri(name); + if (uri) { + g_free(uri); + return TRUE; + } + + return FALSE; +} diff --git a/e-util/e-dialog-utils.h b/e-util/e-dialog-utils.h index 6ae3a2ec23..57cfac90c3 100644 --- a/e-util/e-dialog-utils.h +++ b/e-util/e-dialog-utils.h @@ -24,6 +24,7 @@ #define E_DIALOG_UTILS_H #include <gtk/gtkmessagedialog.h> +#include <gtk/gtkfilechooser.h> void e_notice (gpointer parent, GtkMessageType type, @@ -43,5 +44,10 @@ char *e_file_dialog_save (const char *title, const char *fname) char *e_file_dialog_save_folder (const char *title); +GtkWidget * e_file_get_save_filesel (GtkWidget *parent, const char *title, const char *name, GtkFileChooserAction action); + +gboolean e_file_can_save(GtkWindow *parent, const char *uri); +gboolean e_file_check_local(const char *name); + #endif diff --git a/e-util/e-util.c b/e-util/e-util.c index d213296041..5d854e0d51 100644 --- a/e-util/e-util.c +++ b/e-util/e-util.c @@ -1187,4 +1187,45 @@ get_font_options () return font_options; } +/** + * e_file_update_save_path: + * @uri: URI to store + * @free: If TRUE, free uri + * + * Save the save_dir path for evolution. If free is TRUE, uri gets freed when + * done. Genearally, this should be called with the output of + * gtk_file_chooser_get_current_folder_uri() The URI must be a path URI, not a + * file URI. + **/ +void +e_file_update_save_path(char *uri, gboolean free) +{ + GConfClient *gconf = gconf_client_get_default(); + + gconf_client_set_string(gconf, "/apps/evolution/mail/save_dir", uri, NULL); + g_object_unref(gconf); + if (free) + g_free(uri); +} + +/** + * e_file_get_save_path: + * + * Return the save_dir path for evolution. If there isn't a save_dir, returns + * the users home directory. Returns an allocated URI that should be freed by + * the caller. + **/ +char * +e_file_get_save_path(void) +{ + GConfClient *gconf = gconf_client_get_default(); + char *uri; + + uri = gconf_client_get_string(gconf, "/apps/evolution/mail/save_dir", NULL); + g_object_unref(gconf); + + if (uri == NULL) + uri = gnome_vfs_get_uri_from_local_path(g_get_home_dir()); + return (uri); +} diff --git a/e-util/e-util.h b/e-util/e-util.h index 1d3d6ba150..d0faa995d8 100644 --- a/e-util/e-util.h +++ b/e-util/e-util.h @@ -217,6 +217,9 @@ gchar *e_strdup_append_strings (gcha ...); cairo_font_options_t * get_font_options (); +void e_file_update_save_path(char *uri, gboolean free); +char *e_file_get_save_path(void); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/mail/ChangeLog b/mail/ChangeLog index b4fb5a7f5a..dcc159d862 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,12 @@ +2006-11-28 Daniel Gryniewicz <dang@gentoo.org> + + ** Fix for bug #349966 + + * em-utils.c: (emu_save_part_response), (em_utils_save_part), + (emu_save_parts_response), (em_utils_save_parts), + (emu_save_messages_response), (em_utils_save_messages): + * evolution-mail.schemas.in.in: + 2006-11-26 Srinivasa Ragavan <sragavan@novell.com> * Fix for bug #337439 DoS attach with large emails diff --git a/mail/em-utils.c b/mail/em-utils.c index d8d0109fa7..0c6945444a 100644 --- a/mail/em-utils.c +++ b/mail/em-utils.c @@ -90,23 +90,6 @@ extern struct _CamelSession *session; #define d(x) -static gboolean -emu_file_check_local (const char *name) -{ - CamelURL *url; - gboolean local = FALSE; - - url = camel_url_new (name, NULL); - if (url == NULL) - return TRUE; - - if (!g_ascii_strcasecmp (url->protocol, "file")) - local = TRUE; - - camel_url_free (url); - - return local; -} /** * em_utils_prompt_user: * @parent: parent window @@ -375,119 +358,24 @@ em_filename_make_safe (gchar *string) /* Saving messages... */ -static GtkWidget * -emu_get_save_filesel (GtkWidget *parent, const char *title, const char *name, GtkFileChooserAction action) -{ - GtkWidget *filesel; - const char *dir; - char *realname, *gdir; - GConfClient *gconf; - -#ifdef USE_GTKFILECHOOSER - filesel = gtk_file_chooser_dialog_new (title, - NULL, - action, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_OK, - NULL); - gtk_dialog_set_default_response (GTK_DIALOG (filesel), GTK_RESPONSE_OK); - gtk_file_chooser_set_local_only (filesel, FALSE); -#else - char *filename; - - filesel = gtk_file_selection_new (title); -#endif - - if (parent) - e_dialog_set_transient_for((GtkWindow *)filesel, parent); - - gconf = gconf_client_get_default(); - dir = gdir = gconf_client_get_string(gconf, "/apps/evolution/mail/save_dir", NULL); - g_object_unref(gconf); - - if (dir == NULL) - dir = g_get_home_dir(); - - if (name && name[0]) { - realname = g_strdup (name); - em_filename_make_safe (realname); - } else { - realname = NULL; - } - -#ifdef USE_GTKFILECHOOSER - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filesel), dir); - - if (realname) - gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filesel), realname); -#else - filename = g_build_filename (dir, G_DIR_SEPARATOR_S, realname, NULL); - gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel), filename); - g_free (filename); -#endif - - g_free (realname); - g_free (gdir); - - return filesel; -} - -static void -emu_update_save_path(const char *filename, gboolean path) -{ - char *dir = path ? (char *)filename : g_path_get_dirname(filename); - GConfClient *gconf = gconf_client_get_default(); - - gconf_client_set_string(gconf, "/apps/evolution/mail/save_dir", dir, NULL); - g_object_unref(gconf); - if (!path) - g_free(dir); -} - -static gboolean -emu_can_save(GtkWindow *parent, const char *path) -{ - struct stat st; - - if (!path || path[0] == 0) - return FALSE; - - /* make sure we can actually save to it... */ - if (g_stat (path, &st) != -1 && !S_ISREG (st.st_mode)) - return FALSE; - - if (g_access (path, F_OK) == 0) { - if (g_access (path, W_OK) != 0) { - e_error_run(parent, "mail:no-save-path", path, g_strerror(errno), NULL); - return FALSE; - } - - return e_error_run(parent, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, path, NULL) == GTK_RESPONSE_OK; - } - - return TRUE; -} - static void emu_save_part_response(GtkWidget *filesel, int response, CamelMimePart *part) { - const char *path; - const char *uri; + char *uri; if (response == GTK_RESPONSE_OK) { -#ifdef USE_GTKFILECHOOSER uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (filesel)); - path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)); -#else - path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel)); -#endif - if (emu_file_check_local(uri) && !emu_can_save((GtkWindow *)filesel, path)) + if (!e_file_can_save((GtkWindow *)filesel, uri)) { + g_free(uri); return; + } - emu_update_save_path(path, FALSE); + e_file_update_save_path(gtk_file_chooser_get_current_folder_uri( + GTK_FILE_CHOOSER(filesel)), TRUE); /* FIXME: popup error if it fails? */ mail_save_part(part, uri, NULL, NULL, FALSE); + g_free(uri); } gtk_widget_destroy((GtkWidget *)filesel); @@ -519,7 +407,7 @@ em_utils_save_part(GtkWidget *parent, const char *prompt, CamelMimePart *part) } } - filesel = emu_get_save_filesel(parent, prompt, name, GTK_FILE_CHOOSER_ACTION_SAVE); + filesel = e_file_get_save_filesel(parent, prompt, name, GTK_FILE_CHOOSER_ACTION_SAVE); camel_object_ref(part); g_signal_connect (filesel, "response", G_CALLBACK (emu_save_part_response), part); gtk_widget_show (filesel); @@ -528,16 +416,11 @@ em_utils_save_part(GtkWidget *parent, const char *prompt, CamelMimePart *part) static void emu_save_parts_response (GtkWidget *filesel, int response, GSList *parts) { - char *path = NULL; GSList *selected; + char *uri = NULL; if (response == GTK_RESPONSE_OK) { -#ifdef USE_GTKFILECHOOSER - path = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (filesel)); -#else - path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel)); -#endif - - emu_update_save_path(path, TRUE); + uri = gtk_file_chooser_get_current_folder_uri(GTK_FILE_CHOOSER (filesel)); + e_file_update_save_path(uri, FALSE); for ( selected = parts; selected != NULL; selected = selected->next) { const char *file_name; @@ -560,8 +443,8 @@ emu_save_parts_response (GtkWidget *filesel, int response, GSList *parts) file_name = safe_name; } - file_path = g_build_filename (path, file_name, NULL); - if (!g_file_test(file_path, (G_FILE_TEST_EXISTS)) || e_error_run(NULL, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, file_name, NULL) == GTK_RESPONSE_OK) + file_path = g_build_filename (uri, file_name, NULL); + if (!e_file_check_local(file_path) || !g_file_test(file_path, (G_FILE_TEST_EXISTS)) || e_error_run(NULL, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, file_name, NULL) == GTK_RESPONSE_OK) mail_save_part(part, file_path, NULL, NULL, FALSE); else g_warning ("Could not save %s. File already exists", file_path); @@ -570,7 +453,7 @@ emu_save_parts_response (GtkWidget *filesel, int response, GSList *parts) g_free (safe_name); } - g_free (path); + g_free (uri); } g_slist_free (parts); @@ -582,7 +465,7 @@ em_utils_save_parts (GtkWidget *parent, const char *prompt, GSList * parts) { GtkWidget *filesel; - filesel = emu_get_save_filesel (parent, prompt, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + filesel = e_file_get_save_filesel (parent, prompt, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); g_signal_connect (filesel, "response", G_CALLBACK (emu_save_parts_response), parts); gtk_widget_show (filesel); } @@ -643,21 +526,21 @@ struct _save_messages_data { static void emu_save_messages_response(GtkWidget *filesel, int response, struct _save_messages_data *data) { - const char *path; + char *uri; if (response == GTK_RESPONSE_OK) { -#ifdef USE_GTKFILECHOOSER - path = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (filesel)); -#else - path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel)); -#endif + uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (filesel)); - if (!emu_can_save((GtkWindow *)filesel, path)) + if (!e_file_can_save((GtkWindow *)filesel, uri)) { + g_free(uri); return; + } - emu_update_save_path(path, FALSE); - mail_save_messages(data->folder, data->uids, path, NULL, NULL); + e_file_update_save_path(gtk_file_chooser_get_current_folder_uri( + GTK_FILE_CHOOSER (filesel)), TRUE); + mail_save_messages(data->folder, data->uids, uri, NULL, NULL); data->uids = NULL; + g_free(uri); } camel_object_unref(data->folder); @@ -685,7 +568,7 @@ em_utils_save_messages (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids) g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); - filesel = emu_get_save_filesel(parent, _("Save Message..."), NULL, GTK_FILE_CHOOSER_ACTION_SAVE); + filesel = e_file_get_save_filesel(parent, _("Save Message..."), NULL, GTK_FILE_CHOOSER_ACTION_SAVE); camel_object_ref(folder); data = g_malloc(sizeof(struct _save_messages_data)); diff --git a/mail/evolution-mail.schemas.in.in b/mail/evolution-mail.schemas.in.in index 692a190ee4..6ab3b1b844 100644 --- a/mail/evolution-mail.schemas.in.in +++ b/mail/evolution-mail.schemas.in.in @@ -942,5 +942,20 @@ </locale> </schema> + <!-- save directory settings --> + + <schema> + <key>/schemas/apps/evolution/mail/save_dir</key> + <applyto>/apps/evolution/mail/save_dir</applyto> + <owner>evolution-mail</owner> + <type>string</type> + <locale name="C"> + <short>Save directory</short> + <long> + Directory for saving mail component files + </long> + </locale> + </schema> + </schemalist> </gconfschemafile> |