┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views/viewproperties.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/viewproperties.cpp')
-rw-r--r--src/views/viewproperties.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/views/viewproperties.cpp b/src/views/viewproperties.cpp
index 94262e651..f461ebb89 100644
--- a/src/views/viewproperties.cpp
+++ b/src/views/viewproperties.cpp
@@ -14,6 +14,10 @@
#include <QBuffer>
#include <QCryptographicHash>
+#ifdef Q_OS_WIN
+#include <windows.h>
+#endif
+
#include <KFileItem>
#include <KFileMetaData/UserMetaData>
@@ -186,7 +190,14 @@ ViewProperties::ViewProperties(const QUrl &url)
if (!useDestinationDir) {
const QFileInfo dirInfo(m_filePath);
const QFileInfo fileInfo(m_filePath + QDir::separator() + ViewPropertiesFileName);
- useDestinationDir = !dirInfo.isWritable() || (dirInfo.size() > 0 && fileInfo.exists() && !(fileInfo.isReadable() && fileInfo.isWritable()));
+ bool dirWritable = dirInfo.isWritable();
+#ifdef Q_OS_WIN
+ if (dirWritable) {
+ const DWORD attrs = GetFileAttributesW(reinterpret_cast<const wchar_t *>(m_filePath.utf16()));
+ dirWritable = (attrs == INVALID_FILE_ATTRIBUTES) || !(attrs & FILE_ATTRIBUTE_READONLY);
+ }
+#endif
+ useDestinationDir = !dirWritable || (dirInfo.size() > 0 && fileInfo.exists() && !(fileInfo.isReadable() && fileInfo.isWritable()));
}
if (useDestinationDir) {