[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [krita/krita/4.1] libs/ui: Fix temporary workaround until QTBUG-57299
From: Boudewijn Rempt <null () kde ! org>
Date: 2018-09-07 14:15:56
Message-ID: E1fyHYC-0003Xd-IO () code ! kde ! org
[Download RAW message or body]
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/KisImportExportManager.cpp
index df40e7ffd4c..fb08c883323 100644
--- a/libs/ui/KisImportExportManager.cpp
+++ b/libs/ui/KisImportExportManager.cpp
@@ -35,6 +35,7 @@
#include <QGroupBox>
#include <QFuture>
#include <QtConcurrent>
+#include <QFileInfo>
#include <klocalizedstring.h>
#include <ksqueezedtextlabel.h>
@@ -607,28 +608,66 @@ KisImportExportFilter::ConversionStatus \
KisImportExportManager::doExport(const Q return status;
}
+// Temporary workaround until QTBUG-57299 is fixed.
+#ifndef Q_OS_WIN
+#define USE_QSAVEFILE
+#endif
+
KisImportExportFilter::ConversionStatus KisImportExportManager::doExportImpl(const \
QString &location, QSharedPointer<KisImportExportFilter> filter, \
KisPropertiesConfigurationSP 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 = file.errorString();
+ if (error.isEmpty()) {
+ error = i18n("Could not open %1 for writing.", location);
+ }
+ m_document->setErrorMessage(error);
+#ifdef USE_QSAVEFILE
file.cancelWriting();
+#endif
return KisImportExportFilter::CreationError;
}
- KisImportExportFilter::ConversionStatus status =
- filter->convert(m_document, &file, exportConfiguration);
+ KisImportExportFilter::ConversionStatus status = filter->convert(m_document, \
&file, exportConfiguration);
if (filter->supportsIO()) {
if (status != KisImportExportFilter::OK) {
+#ifdef USE_QSAVEFILE
file.cancelWriting();
+#endif
} else {
+#ifdef USE_QSAVEFILE
if (!file.commit()) {
- m_document->setErrorMessage(file.errorString());
+ QString error = file.errorString();
+ if (error.isEmpty()) {
+ error = i18n("Could not write to %1.", location);
+ }
+ if (m_document->errorMessage().isEmpty()) {
+ m_document->setErrorMessage(error);
+ }
status = 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;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic