summaryrefslogtreecommitdiff
path: root/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@qt.io>2017-04-21 12:34:05 +0200
committerOliver Wolff <oliver.wolff@qt.io>2017-04-24 12:50:00 +0000
commit3d43b398bc09319ba63afd45429c252b6d40b093 (patch)
treedc889ca7dcc172ded3c786d6e862350ca2eba3d7 /src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
parentc2691cf479c88ba0f74492195912cd9b62ce4e62 (diff)
downloadqtlocation-3d43b398bc09319ba63afd45429c252b6d40b093.tar.gz
winrt: Add error handling for GeoPositionInfoSource creation
If something goes wrong while creating the source, the factory should return a nullptr (same as in QGeoPositionInfoSourceFactoryGipsy). One such error might be, that access to location is denied on first application start. Task-number: QTBUG-60299 Change-Id: I50e87895a74bcff856aa29a195762a83466bc5b9 Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
Diffstat (limited to 'src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp')
-rw-r--r--src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
index 32a20a16..87e350dd 100644
--- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
+++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
@@ -97,8 +97,19 @@ QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent)
d->updatesOngoing = false;
qRegisterMetaType<QGeoPositionInfo>();
+}
+
+QGeoPositionInfoSourceWinRT::~QGeoPositionInfoSourceWinRT()
+{
+}
- requestAccess();
+int QGeoPositionInfoSourceWinRT::init()
+{
+ Q_D(QGeoPositionInfoSourceWinRT);
+ if (!requestAccess()) {
+ qWarning ("Location access failed.");
+ return -1;
+ }
HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([this, d]() {
HRESULT hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Devices_Geolocation_Geolocator).Get(),
&d->locator);
@@ -114,13 +125,17 @@ QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent)
return hr;
});
- Q_ASSERT_SUCCEEDED(hr);
+ if (FAILED(hr)) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ qErrnoWarning(hr, "Could not register status changed callback");
+ return -1;
+ }
hr = d->locator->put_DesiredAccuracy(PositionAccuracy::PositionAccuracy_Default);
if (FAILED(hr)) {
setError(QGeoPositionInfoSource::UnknownSourceError);
qErrnoWarning(hr, "Could not initialize desired accuracy.");
- return;
+ return -1;
}
d->positionToken.value = 0;
@@ -135,10 +150,7 @@ QGeoPositionInfoSourceWinRT::QGeoPositionInfoSourceWinRT(QObject *parent)
setPreferredPositioningMethods(QGeoPositionInfoSource::AllPositioningMethods);
connect(this, &QGeoPositionInfoSourceWinRT::nativePositionUpdate, this, &QGeoPositionInfoSourceWinRT::updateSynchronized);
-}
-
-QGeoPositionInfoSourceWinRT::~QGeoPositionInfoSourceWinRT()
-{
+ return 0;
}
QGeoPositionInfo QGeoPositionInfoSourceWinRT::lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const