[Commits] [SCM] claws branch, master, updated. 3.13.2-129-ge895ed1

ticho at claws-mail.org ticho at claws-mail.org
Fri Apr 22 20:05:28 CEST 2016


The branch, master has been updated
       via  e895ed1467f5f85a663dbd4af529d681456cebbb (commit)
      from  61383c66ea45ad4e17efce4c59441b35bae5ff25 (commit)

Summary of changes:
 src/gtk/w32_filesel.c |   32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)


- Log -----------------------------------------------------------------
commit e895ed1467f5f85a663dbd4af529d681456cebbb
Author: Andrej Kacian <ticho at claws-mail.org>
Date:   Fri Apr 22 20:04:02 2016 +0200

    More fixes for the Windows native file choosers.
    
    Filter string should be terminated with two nuls.
    Save dialog did not show for message parts which have no
    attachment name.

diff --git a/src/gtk/w32_filesel.c b/src/gtk/w32_filesel.c
index 3f0244b..5b7f9d8 100644
--- a/src/gtk/w32_filesel.c
+++ b/src/gtk/w32_filesel.c
@@ -245,7 +245,8 @@ gchar *filesel_select_file_open_with_filter(const gchar *title, const gchar *pat
 	o.Flags = OFN_LONGNAMES;
 
 	if (filter != NULL && strlen(filter) > 0) {
-		win_filter = g_strdup_printf("%s%c%s%c", filter, '\0', filter, '\0');
+		win_filter = g_strdup_printf("%s%c%s%c%c",
+				filter, '\0', filter, '\0', '\0');
 		win_filter16 = g_utf8_to_utf16(win_filter, -1, NULL, NULL, &error);
 		g_free(win_filter);
 		if (error != NULL) {
@@ -317,8 +318,8 @@ GList *filesel_select_multiple_files_open_with_filter(const gchar *title,
 gchar *filesel_select_file_save(const gchar *title, const gchar *path)
 {
 	gboolean ret;
-	gchar *str;
-	gunichar2 *path16, *title16;
+	gchar *str, *filename = NULL;
+	gunichar2 *filename16, *path16, *title16;
 	glong conv_items;
 	GError *error = NULL;
 	WinChooserCtx *ctx;
@@ -326,14 +327,34 @@ gchar *filesel_select_file_save(const gchar *title, const gchar *path)
 	pthread_t pt;
 #endif
 
+	/* Find the filename part, if any */
+	if (path[strlen(path)-1] == G_DIR_SEPARATOR) {
+		filename = "";
+	} else if ((filename = strrchr(path, G_DIR_SEPARATOR)) != NULL) {
+		filename++;
+	} else {
+		filename = (char *) path;
+	}
+
+	/* Convert it to UTF-16. */
+	filename16 = g_utf8_to_utf16(filename, -1, NULL, &conv_items, &error);
+	if (error != NULL) {
+		alertpanel_error(_("Could not convert attachment name to UTF-16:\n\n%s"),
+				error->message);
+		debug_print("filename '%s' conversion to UTF-16 failed\n", filename);
+		g_error_free(error);
+		return NULL;
+	}
+
 	/* Path needs to be converted to UTF-16, so that the native chooser
 	 * can understand it. */
-	path16 = g_utf8_to_utf16(path, -1, NULL, &conv_items, &error);
+	path16 = g_utf8_to_utf16(path, -1, NULL, NULL, &error);
 	if (error != NULL) {
 		alertpanel_error(_("Could not convert file path to UTF-16:\n\n%s"),
 				error->message);
 		debug_print("file path '%s' conversion to UTF-16 failed\n", path);
 		g_error_free(error);
+		g_free(filename16);
 		return NULL;
 	}
 
@@ -353,7 +374,7 @@ gchar *filesel_select_file_save(const gchar *title, const gchar *path)
 	o.lpstrCustomFilter = NULL;
 	o.lpstrFile = g_malloc0(MAXPATHLEN);
 	if (path16 != NULL)
-		memcpy(o.lpstrFile, path16, conv_items * sizeof(gunichar2));
+		memcpy(o.lpstrFile, filename16, conv_items * sizeof(gunichar2));
 	o.nMaxFile = MAXPATHLEN;
 	o.lpstrFileTitle = NULL;
 	o.lpstrInitialDir = path16;
@@ -382,6 +403,7 @@ gchar *filesel_select_file_save(const gchar *title, const gchar *path)
 	ret = GetSaveFileName(&o);
 #endif
 
+	g_free(filename16);
 	g_free(path16);
 	g_free(title16);
 	g_free(ctx);

-----------------------------------------------------------------------


hooks/post-receive
-- 
Claws Mail


More information about the Commits mailing list