From 21d5f00b5cbf93bfc495cbb1cf63da03d0a61f6d Mon Sep 17 00:00:00 2001 From: VKamyshniy Date: Wed, 15 Apr 2015 16:58:23 +0300 Subject: [PATCH] [Summary] FIxed bug in Windows version of the open file dialog and save file dialog. The filter string for required file types was formed incorrectly. --- gtk2_ardour/open_file_dialog_windows.cc | 35 +++++++++++-------------- gtk2_ardour/waves_import_dialog.cc | 22 +++++++++------- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/gtk2_ardour/open_file_dialog_windows.cc b/gtk2_ardour/open_file_dialog_windows.cc index 9db7a4ca3d..1ff76777d6 100644 --- a/gtk2_ardour/open_file_dialog_windows.cc +++ b/gtk2_ardour/open_file_dialog_windows.cc @@ -76,24 +76,22 @@ ARDOUR::save_file_dialog (std::vector extensions, std::string initi ofn.lpstrTitle = title.c_str(); ofn.Flags = OFN_OVERWRITEPROMPT | OFN_EXPLORER; - // Create filter for required file types std::string filter; for (int i = 0; i < extensions.size(); ++i) { - filter += "*."+extensions[i]+";"; + filter += "*."+extensions[i]; + if (i < (extensions.size() - 1)) { + filter += ';'; + } } - char c_filter[1 + filter.size() + 2]; - c_filter[0] = 0; - strcpy (c_filter + 1, filter.c_str ()); - c_filter[1 + filter.size() + 1] = '\0'; + char c_filter[filter.size()*2 + 3]; + strcpy (c_filter, filter.c_str ()); + strcpy (c_filter + filter.size() + 1, filter.c_str ()); + c_filter[filter.size()*2 + 2] = '\0'; ofn.lpstrFilter = c_filter; - if (!extensions.empty()) { - ofn.lpstrDefExt = extensions[0].c_str (); - } - // Check on valid path WIN32_FIND_DATA FindFileData; HANDLE handle = FindFirstFile(initial_path.c_str(), &FindFileData) ; @@ -166,20 +164,19 @@ ARDOUR::open_file_dialog (std::vector extensions, bool multi_select // Create filter for required file types std::string filter; for (int i = 0; i < extensions.size(); ++i) { - filter += "*."+extensions[i]+";"; + filter += "*."+extensions[i]; + if (i < (extensions.size() - 1)) { + filter += ';'; + } } - char c_filter[1 + filter.size() + 2]; - c_filter[0] = 0; - strcpy (c_filter + 1, filter.c_str ()); - c_filter[1 + filter.size() + 1] = '\0'; + char c_filter[filter.size()*2 + 3]; + strcpy (c_filter, filter.c_str ()); + strcpy (c_filter + filter.size() + 1, filter.c_str ()); + c_filter[filter.size()*2 + 2] = '\0'; ofn.lpstrFilter = c_filter; - if (!extensions.empty()) { - ofn.lpstrDefExt = extensions[0].c_str (); - } - // Check on valid path WIN32_FIND_DATA FindFileData; HANDLE handle = FindFirstFile(initial_path.c_str(), &FindFileData) ; diff --git a/gtk2_ardour/waves_import_dialog.cc b/gtk2_ardour/waves_import_dialog.cc index 06bd91f7f0..8a7f303c7c 100644 --- a/gtk2_ardour/waves_import_dialog.cc +++ b/gtk2_ardour/waves_import_dialog.cc @@ -129,17 +129,18 @@ WavesImportDialog::_get_import_mode() const } const std::string __audiofile_types[] = { - "aif", "AIF", "aifc", "AIFC", "aiff", "AIFF", "amb", "AMB", "au", "AU", "caf", "CAF", - "cdr", "CDR", "flac", "FLAC", "htk", "HTK", "iff", "IFF", "mat", "MAT", "oga", "OGA", - "ogg", "OGG", "paf", "PAF", "pvf", "PVF", "sf", "SF", "smp", "SMP", "snd", "SND", - "maud", "MAUD", "voc", "VOC", "vwe", "VWE", "w64", "W64", "wav", "WAV", + "aif", "aifc", "aiff", "amb", "au", "caf", + "cdr", "flac", "htk", "iff", "mat", "oga", + "ogg", "paf", "pvf", "sf", "smp", "snd", + "maud", "voc", "vwe", "w64", "wav" #ifdef HAVE_COREAUDIO - "aac", "AAC", "adts", "ADTS", - "ac3", "AC3", "amr", "AMR", - "mpa", "MPA", "mpeg", "MPEG", - "mp1", "MP1", "mp2", "MP2", - "mp3", "MP3", "mp4", "MP4", - "m4a", "M4A", "sd2", "SD2", // libsndfile supports sd2 also, but the resource fork is required to open. + , + "aac", "adts", + "ac3", "amr", + "mpa", "mpeg", + "mp1", "mp2", + "mp3", "mp4", + "m4a", "sd2" // libsndfile supports sd2 also, but the resource fork is required to open. #endif // HAVE_COREAUDIO }; @@ -148,6 +149,7 @@ WavesImportDialog::run_import () { std::vector audiofile_types (__audiofile_types, __audiofile_types + sizeof (__audiofile_types)/sizeof(__audiofile_types[0])); + do { _files_to_import = ARDOUR::open_file_dialog (audiofile_types, true, __initial_folder); if (_files_to_import.empty ()) {