diff options
Diffstat (limited to 'mail-client/evolution/files/evolution-2.8.0-uri.patch')
-rw-r--r-- | mail-client/evolution/files/evolution-2.8.0-uri.patch | 746 |
1 files changed, 746 insertions, 0 deletions
diff --git a/mail-client/evolution/files/evolution-2.8.0-uri.patch b/mail-client/evolution/files/evolution-2.8.0-uri.patch new file mode 100644 index 000000000000..118e8ee07aba --- /dev/null +++ b/mail-client/evolution/files/evolution-2.8.0-uri.patch @@ -0,0 +1,746 @@ +diff --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/calendar/gui/apps_evolution_calendar.schemas.in.in evolution-2.7.91.uri/calendar/gui/apps_evolution_calendar.schemas.in.in +--- evolution-2.7.91.orig/calendar/gui/apps_evolution_calendar.schemas.in.in 2006-08-07 00:47:42.000000000 -0400 ++++ evolution-2.7.91.uri/calendar/gui/apps_evolution_calendar.schemas.in.in 2006-08-24 13:06:28.000000000 -0400 +@@ -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 --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/calendar/gui/calendar-config-keys.h evolution-2.7.91.uri/calendar/gui/calendar-config-keys.h +--- evolution-2.7.91.orig/calendar/gui/calendar-config-keys.h 2006-07-22 07:14:50.000000000 -0400 ++++ evolution-2.7.91.uri/calendar/gui/calendar-config-keys.h 2006-08-24 12:05:43.000000000 -0400 +@@ -91,7 +91,7 @@ + /* 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 --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/calendar/gui/dialogs/alarm-dialog.c evolution-2.7.91.uri/calendar/gui/dialogs/alarm-dialog.c +--- evolution-2.7.91.orig/calendar/gui/dialogs/alarm-dialog.c 2006-07-09 23:54:00.000000000 -0400 ++++ evolution-2.7.91.uri/calendar/gui/dialogs/alarm-dialog.c 2006-08-24 11:47:41.000000000 -0400 +@@ -1080,6 +1080,7 @@ + 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 --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/e-util/e-dialog-utils.c evolution-2.7.91.uri/e-util/e-dialog-utils.c +--- evolution-2.7.91.orig/e-util/e-dialog-utils.c 2006-05-31 23:29:48.000000000 -0400 ++++ evolution-2.7.91.uri/e-util/e-dialog-utils.c 2006-08-24 11:45:27.000000000 -0400 +@@ -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 @@ + 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 @@ + 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 --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/e-util/e-dialog-utils.h evolution-2.7.91.uri/e-util/e-dialog-utils.h +--- evolution-2.7.91.orig/e-util/e-dialog-utils.h 2005-10-18 05:57:20.000000000 -0400 ++++ evolution-2.7.91.uri/e-util/e-dialog-utils.h 2006-08-24 11:44:48.000000000 -0400 +@@ -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_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 --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/e-util/e-util.c evolution-2.7.91.uri/e-util/e-util.c +--- evolution-2.7.91.orig/e-util/e-util.c 2006-07-24 04:21:14.000000000 -0400 ++++ evolution-2.7.91.uri/e-util/e-util.c 2006-08-24 11:45:06.000000000 -0400 +@@ -1187,4 +1187,45 @@ + 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 --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/e-util/e-util.h evolution-2.7.91.uri/e-util/e-util.h +--- evolution-2.7.91.orig/e-util/e-util.h 2006-07-22 07:14:52.000000000 -0400 ++++ evolution-2.7.91.uri/e-util/e-util.h 2006-08-24 11:44:45.000000000 -0400 +@@ -215,6 +215,8 @@ + Less than 0 for the int means copy the whole string. */ + gchar *e_strdup_append_strings (gchar *first_string, + ...); ++void e_file_update_save_path(char *uri, gboolean free); ++char *e_file_get_save_path(void); + cairo_font_options_t * get_font_options (); + + #ifdef __cplusplus +diff --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/mail/em-utils.c evolution-2.7.91.uri/mail/em-utils.c +--- evolution-2.7.91.orig/mail/em-utils.c 2006-05-31 23:29:48.000000000 -0400 ++++ evolution-2.7.91.uri/mail/em-utils.c 2006-08-23 23:50:18.000000000 -0400 +@@ -90,23 +90,6 @@ + + #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 @@ + + /* 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 @@ + } + } + +- 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 @@ + 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 @@ + 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 @@ + g_free (safe_name); + } + +- g_free (path); ++ g_free (uri); + } + + g_slist_free (parts); +@@ -582,7 +465,7 @@ + { + 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 @@ + 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 @@ + 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 --exclude-from=/home/dang/.diffrc -u -ruN evolution-2.7.91.orig/mail/evolution-mail.schemas.in.in evolution-2.7.91.uri/mail/evolution-mail.schemas.in.in +--- evolution-2.7.91.orig/mail/evolution-mail.schemas.in.in 2006-07-22 07:14:53.000000000 -0400 ++++ evolution-2.7.91.uri/mail/evolution-mail.schemas.in.in 2006-08-24 13:04:58.000000000 -0400 +@@ -913,5 +913,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> |