diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2017-04-21 12:34:05 +0200 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2017-04-24 12:50:00 +0000 |
commit | 3d43b398bc09319ba63afd45429c252b6d40b093 (patch) | |
tree | dc889ca7dcc172ded3c786d6e862350ca2eba3d7 /src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp | |
parent | c2691cf479c88ba0f74492195912cd9b62ce4e62 (diff) | |
download | qtlocation-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.cpp | 26 |
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 |