[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [krita] libs/ui: Temporary workaround for QTBUG-57299
From: Boudewijn Rempt <null () kde ! org>
Date: 2018-09-03 7:48:29
Message-ID: E1fwjb3-0007k1-KB () code ! kde ! org
[Download RAW message or body]
Git commit 0f36057d79b0390084c7e68e65187d12cbf732ca by Boudewijn Rempt.
Committed on 03/09/2018 at 07:48.
Pushed by rempt into branch 'master'.
Temporary workaround for QTBUG-57299
Differential Revision: https://phabricator.kde.org/D15184
M +45 -5 libs/ui/KisImportExportManager.cpp
https://commits.kde.org/krita/0f36057d79b0390084c7e68e65187d12cbf732ca
diff --git a/libs/ui/KisImportExportManager.cpp b/libs/ui/KisImportExportManager.cpp
index 8cb9905d46e..834fe793489 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,67 @@ KisImportExportFilter::ConversionStatus \
KisImportExportManager::doExport(const Q return status;
}
+// Temporary workaround until QTBUG-57299 is fixed.
+#ifdef 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