[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