diff --git a/app/src/filedialog.cpp b/app/src/filedialog.cpp index c5817fc683..8b35d69ca2 100644 --- a/app/src/filedialog.cpp +++ b/app/src/filedialog.cpp @@ -95,6 +95,11 @@ QString FileDialog::getSaveFileName(QWidget* parent, FileType fileType, const QS if (filePath.isEmpty()) { return QString(); } + if (!hasValidSuffix(strFilter, filePath)) + { + filePath += getDefaultExtensionByFileType(fileType); + } + if (fileType == FileType::ANIMATION) { // When we save a new project, change default path for all other filetypes @@ -103,12 +108,6 @@ QString FileDialog::getSaveFileName(QWidget* parent, FileType fileType, const QS setLastSavePath(fileType, filePath); - QFileInfo info(filePath); - if (info.suffix().isEmpty() && strSelectedFilter.isEmpty()) - { - filePath += getDefaultExtensionByFileType(fileType); - } - return filePath; } @@ -220,6 +219,22 @@ QString FileDialog::saveFileFilters(FileType fileType) return ""; } +bool FileDialog::hasValidSuffix(const QString& filters, const QString& filePath) +{ + QString fileName = QFileInfo(filePath).fileName(); + for (const QString& filter : filters.split(";;")) + { + int start = filter.indexOf("(") + 1; + int end = filter.indexOf(")"); + Q_ASSERT(start >= 1 && end >= 0); + + if (QDir::match(filter.mid(start, end - start), fileName)) { + return true; + } + } + return false; +} + QString FileDialog::getFilterForFile(const QString& filters, QString filePath) { if (!filePath.contains(".")) diff --git a/app/src/filedialog.h b/app/src/filedialog.h index 95311c2250..385bf330e6 100644 --- a/app/src/filedialog.h +++ b/app/src/filedialog.h @@ -107,6 +107,7 @@ class FileDialog : public QObject static QString getFilterForFile( const QString& fileType, QString filePath ); static QString defaultFileName(FileType fileType , QString baseName = QString()); + static bool hasValidSuffix(const QString& filters, const QString& filePath); static QString getDefaultExtensionByFileType(FileType fileType); static QString toSettingKey( FileType fileType ); diff --git a/core_lib/src/util/fileformat.h b/core_lib/src/util/fileformat.h index ffc01cb79b..2ce07e5fa0 100644 --- a/core_lib/src/util/fileformat.h +++ b/core_lib/src/util/fileformat.h @@ -59,7 +59,7 @@ GNU General Public License for more details. QString(".pclx") #define PFF_DEFAULT_IMAGE_EXT \ - QString(".png") + QString(".png") #define PFF_DEFAULT_IMAGE_SEQ_EXT \ QString(".png")