diff options
Diffstat (limited to 'src/views/viewproperties.cpp')
| -rw-r--r-- | src/views/viewproperties.cpp | 13 |
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) { |
