From c088d75cf5733bb83053cff0c71e2fd9abfeb48f Mon Sep 17 00:00:00 2001 From: Paul Mangan Date: Wed, 18 Apr 2007 08:28:32 +0000 Subject: [PATCH] 2007-04-18 [paul] 2.9.0cvs7 * src/messageview.c * src/mimeview.c * src/summaryview.c * src/gtk/filesel.c Fix encoding woes wrt saving of mails and parts Thanks to Colin --- ChangeLog | 10 ++++++++++ PATCHSETS | 1 + configure.ac | 2 +- src/gtk/filesel.c | 9 +++++---- src/messageview.c | 14 +++++++++++++- src/mimeview.c | 21 ++++++++++++++++----- src/summaryview.c | 3 +-- 7 files changed, 47 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1f3811e80..0d1489e4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-04-18 [paul] 2.9.0cvs7 + + * src/messageview.c + * src/mimeview.c + * src/summaryview.c + * src/gtk/filesel.c + Fix encoding woes wrt saving of + mails and parts + Thanks to Colin + 2007-04-18 [colin] 2.9.0cvs6 * src/gtk/pluginwindow.c diff --git a/PATCHSETS b/PATCHSETS index d77c4641d..17f1566bf 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -2525,3 +2525,4 @@ ( cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/ldapupdate.c; ) > 2.9.0cvs4.patchset ( cvs diff -u -r 1.9.2.14 -r 1.9.2.15 src/addressadd.c; cvs diff -u -r 1.60.2.85 -r 1.60.2.86 src/addressbook.c; cvs diff -u -r 1.28.2.26 -r 1.28.2.27 src/addrindex.c; cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/ldapupdate.c; ) > 2.9.0cvs5.patchset ( cvs diff -u -r 1.5.2.44 -r 1.5.2.45 src/gtk/pluginwindow.c; ) > 2.9.0cvs6.patchset +( cvs diff -u -r 1.94.2.131 -r 1.94.2.132 src/messageview.c; cvs diff -u -r 1.83.2.104 -r 1.83.2.105 src/mimeview.c; cvs diff -u -r 1.395.2.295 -r 1.395.2.296 src/summaryview.c; cvs diff -u -r 1.2.2.32 -r 1.2.2.33 src/gtk/filesel.c; ) > 2.9.0cvs7.patchset diff --git a/configure.ac b/configure.ac index 0a09ed698..15b075b85 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=9 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=6 +EXTRA_VERSION=7 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/gtk/filesel.c b/src/gtk/filesel.c index 6000a63ea..ab133494f 100644 --- a/src/gtk/filesel.c +++ b/src/gtk/filesel.c @@ -134,17 +134,18 @@ static GList *filesel_create(const gchar *title, const gchar *path, g_free(realpath); realpath = g_strdup(get_home_dir()); } + tmp = NULL; if (g_utf8_validate(realpath, -1, NULL)) tmp = g_filename_from_utf8(realpath, -1, NULL, NULL, NULL); - else + if (tmp == NULL) tmp = g_strdup(realpath); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), tmp); g_free(tmp); - if (action == GTK_FILE_CHOOSER_ACTION_SAVE) { + tmp = NULL; if (g_utf8_validate(filename, -1, NULL)) tmp = g_filename_from_utf8(filename, -1, NULL, NULL, NULL); - else + if (tmp == NULL) tmp = g_strdup(filename); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(chooser), tmp); g_free(tmp); @@ -156,7 +157,7 @@ static GList *filesel_create(const gchar *title, const gchar *path, prefs_common.attach_load_dir = g_strdup_printf("%s%c", get_home_dir(), G_DIR_SEPARATOR); if (g_utf8_validate(prefs_common.attach_load_dir, -1, NULL)) tmp = g_filename_from_utf8(prefs_common.attach_load_dir, -1, NULL, NULL, NULL); - else + if (tmp == NULL) tmp = g_strdup(prefs_common.attach_load_dir); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), tmp); g_free(tmp); diff --git a/src/messageview.c b/src/messageview.c index 5779e9dea..dbfcc8df4 100644 --- a/src/messageview.c +++ b/src/messageview.c @@ -1172,7 +1172,19 @@ static void messageview_save_as(MessageView *messageview) Xstrdup_a(filename, msginfo->subject, return); subst_for_filename(filename); } - dest = filesel_select_file_save(_("Save as"), filename); + if (filename && !g_utf8_validate(filename, -1, NULL)) { + gchar *oldstr = filename; + filename = conv_codeset_strdup(filename, + conv_get_locale_charset_str(), + CS_UTF_8); + if (!filename) { + g_warning("messageview_save_as(): faild to convert character set."); + filename = g_strdup(oldstr); + } + dest = filesel_select_file_save(_("Save as"), filename); + g_free(filename); + } else + dest = filesel_select_file_save(_("Save as"), filename); if (!dest) return; if (is_file_exist(dest)) { AlertValue aval; diff --git a/src/mimeview.c b/src/mimeview.c index 562f67b76..fbacdcef5 100644 --- a/src/mimeview.c +++ b/src/mimeview.c @@ -1370,10 +1370,14 @@ static void mimeview_drag_data_get(GtkWidget *widget, } if (filename == NULL) filename = g_path_get_basename("Unnamed part"); - - tmp = g_filename_from_utf8(filename, -1, NULL, NULL, NULL); - + if (!g_utf8_validate(filename, -1, NULL)) + tmp = conv_codeset_strdup(filename, + conv_get_locale_charset_str(), + CS_UTF_8); + else + tmp = g_strdup(filename); + if (tmp == NULL) { g_warning("filename not in UTF-8"); tmp = g_strdup("Unnamed part"); @@ -1589,8 +1593,15 @@ static void mimeview_save_as(MimeView *mimeview) if (!g_utf8_validate(partname, -1, NULL)) { gchar *tmp = conv_filename_to_utf8(partname); - g_free(partname); - partname = tmp; + if (!tmp) { + tmp = conv_codeset_strdup(partname, + conv_get_locale_charset_str(), + CS_UTF_8); + } + if (tmp) { + g_free(partname); + partname = tmp; + } } subst_for_filename(partname); diff --git a/src/summaryview.c b/src/summaryview.c index a9459849f..9dcb96971 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -4174,8 +4174,7 @@ void summary_save_as(SummaryView *summaryview) Xstrdup_a(filename, msginfo->subject, return); subst_for_filename(filename); } - if (g_getenv ("G_BROKEN_FILENAMES") && - filename && !g_utf8_validate(filename, -1, NULL)) { + if (filename && !g_utf8_validate(filename, -1, NULL)) { gchar *oldstr = filename; filename = conv_codeset_strdup(filename, conv_get_locale_charset_str(), -- 2.25.1