Git commit d4b2e714ce7feb9e198b8126251f4aeb7f2e0736 by Boudewijn Rempt. Committed on 07/09/2018 at 12:52. Pushed by rempt into branch 'krita/4.1'. Fix temporary workaround until QTBUG-57299 QSaveFile should be disabled on Windows. M +44 -5 libs/ui/KisImportExportManager.cpp https://commits.kde.org/krita/d4b2e714ce7feb9e198b8126251f4aeb7f2e0736 diff --git a/libs/ui/KisImportExportManager.cpp b/libs/ui/KisImportExportMa= nager.cpp index df40e7ffd4c..fb08c883323 100644 --- a/libs/ui/KisImportExportManager.cpp +++ b/libs/ui/KisImportExportManager.cpp @@ -35,6 +35,7 @@ #include #include #include +#include = #include #include @@ -607,28 +608,66 @@ KisImportExportFilter::ConversionStatus KisImportExpo= rtManager::doExport(const Q return status; } = +// Temporary workaround until QTBUG-57299 is fixed. +#ifndef Q_OS_WIN +#define USE_QSAVEFILE +#endif + KisImportExportFilter::ConversionStatus KisImportExportManager::doExportIm= pl(const QString &location, QSharedPointer filter, K= isPropertiesConfigurationSP exportConfiguration) { +#ifdef USE_QSAVEFILE QSaveFile file(location); file.setDirectWriteFallback(true); - if (filter->supportsIO() && !file.open(QFile::WriteOnly)) { - m_document->setErrorMessage(file.errorString()); +#else + QFileInfo fi(location); + QTemporaryFile file(fi.absolutePath() + ".XXXXXX.kra"); + if (filter->supportsIO() && !file.open()) { +#endif + QString error =3D file.errorString(); + if (error.isEmpty()) { + error =3D i18n("Could not open %1 for writing.", location); + } + m_document->setErrorMessage(error); +#ifdef USE_QSAVEFILE file.cancelWriting(); +#endif return KisImportExportFilter::CreationError; } = - KisImportExportFilter::ConversionStatus status =3D - filter->convert(m_document, &file, exportConfiguration); + KisImportExportFilter::ConversionStatus status =3D filter->convert(m_d= ocument, &file, exportConfiguration); = if (filter->supportsIO()) { if (status !=3D KisImportExportFilter::OK) { +#ifdef USE_QSAVEFILE file.cancelWriting(); +#endif } else { +#ifdef USE_QSAVEFILE if (!file.commit()) { - m_document->setErrorMessage(file.errorString()); + QString error =3D file.errorString(); + if (error.isEmpty()) { + error =3D i18n("Could not write to %1.", location); + } + if (m_document->errorMessage().isEmpty()) { + m_document->setErrorMessage(error); + } status =3D KisImportExportFilter::CreationError; } +#else + file.flush(); + file.close(); + QFile target(location); + if (target.exists()) { + // There should already be a .kra~ backup + target.remove(); + } + if (!file.copy(location)) { + file.setAutoRemove(false); + m_document->setErrorMessage(i18n("Could not copy %1 to its= final location %2", file.fileName(), location)); + return KisImportExportFilter::CreationError; + } +#endif } } return status;