summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qstandardpaths_winrt.cpp
diff options
context:
space:
mode:
authorMaurice Kalinowski <maurice.kalinowski@digia.com>2013-11-12 11:48:52 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-12 12:46:37 +0100
commitc784ec00faf022476c10fc622ca43f4c68d544e1 (patch)
treedc888326387e90567d53407d7cbaad03620fee50 /src/corelib/io/qstandardpaths_winrt.cpp
parent7ea584f8304ddc302315ca207e88db45ec443d20 (diff)
WinRT: implement QStandardPaths
need to leave some items out like media folder access, as this is not available by default and also requires certain capabilities to use those. Furthermore updated the tests for sandboxing as well as skip cmd.exe related tests as that does not exist on WinRT. Change-Id: I992b1e195b79615bea0be4f84f56cfb8f0d902bf Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Diffstat (limited to 'src/corelib/io/qstandardpaths_winrt.cpp')
-rw-r--r--src/corelib/io/qstandardpaths_winrt.cpp59
1 files changed, 56 insertions, 3 deletions
diff --git a/src/corelib/io/qstandardpaths_winrt.cpp b/src/corelib/io/qstandardpaths_winrt.cpp
index 55a801332e..9b6a088a30 100644
--- a/src/corelib/io/qstandardpaths_winrt.cpp
+++ b/src/corelib/io/qstandardpaths_winrt.cpp
@@ -48,6 +48,17 @@
#include <qt_windows.h>
+#include <wrl.h>
+#include <windows.foundation.h>
+#include <windows.storage.h>
+#include <Windows.ApplicationModel.h>
+
+using namespace Microsoft::WRL;
+using namespace Microsoft::WRL::Wrappers;
+using namespace ABI::Windows::Foundation;
+using namespace ABI::Windows::Storage;
+using namespace ABI::Windows::ApplicationModel;
+
#ifndef QT_NO_STANDARDPATHS
QT_BEGIN_NAMESPACE
@@ -59,9 +70,51 @@ static QString convertCharArray(const wchar_t *path)
QString QStandardPaths::writableLocation(StandardLocation type)
{
- Q_UNUSED(type)
- Q_UNIMPLEMENTED();
- return QString();
+ QString result;
+
+ switch (type) {
+ case ConfigLocation: // same as DataLocation, on Windows
+ case DataLocation:
+ case GenericDataLocation: {
+ ComPtr<IApplicationDataStatics> applicationDataStatics;
+ if (FAILED(GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Storage_ApplicationData).Get(), &applicationDataStatics)))
+ break;
+ ComPtr<IApplicationData> applicationData;
+ if (FAILED(applicationDataStatics->get_Current(&applicationData)))
+ break;
+ ComPtr<IStorageFolder> settingsFolder;
+ if (FAILED(applicationData->get_LocalFolder(&settingsFolder)))
+ break;
+ ComPtr<IStorageItem> settingsFolderItem;
+ if (FAILED(settingsFolder.As(&settingsFolderItem)))
+ break;
+ HSTRING path;
+ if (FAILED(settingsFolderItem->get_Path(&path)))
+ break;
+ result = convertCharArray(WindowsGetStringRawBuffer(path, nullptr));
+ if (isTestModeEnabled())
+ result += QLatin1String("/qttest");
+ break;
+ }
+ case CacheLocation:
+ return writableLocation(DataLocation) + QLatin1String("/cache");
+
+ case GenericCacheLocation:
+ return writableLocation(GenericDataLocation) + QLatin1String("/cache");
+
+ case RuntimeLocation:
+ case HomeLocation:
+ result = QDir::homePath();
+ break;
+
+ case TempLocation:
+ result = QDir::tempPath();
+ break;
+ default:
+ Q_UNIMPLEMENTED();
+ }
+ return result;
+
}
QStringList QStandardPaths::standardLocations(StandardLocation type)