diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-01-27 15:40:17 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-01-29 10:40:46 +0100 |
commit | 26b53660fc916c543759e7add964ab696582120a (patch) | |
tree | 98f3de6180609447a4a7b14362aa3031b4b496ab /src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp | |
parent | a8496e8d52e261a5a9206c4963adf43f6083de9e (diff) | |
download | qtlocation-26b53660fc916c543759e7add964ab696582120a.tar.gz |
QtPositioning: reset errors properly
Calling startUpdates(), startMonitoring() or requestUpdate() on
QGeoPositionInfoSource/QGeoSatelliteInfoSource/QGeoAreaMonitorSource
subclasses effectively means starting a new work session, which means
that we should not care about the previous errors. This patch resets
the errors to Error::NoError in all subclasses when calling these
methods.
Task-number: QTBUG-90491
Change-Id: Ia9cf0345e8c672d47814d8d0a865cd23541af61a
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp')
-rw-r--r-- | src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp index 622c074f..34a1a035 100644 --- a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp +++ b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp @@ -159,6 +159,9 @@ void QGeoPositionInfoSourceGeoclue2::startUpdates() } qCDebug(lcPositioningGeoclue2) << "Starting updates"; + + m_error = QGeoPositionInfoSource::NoError; + m_running = true; startClient(); @@ -184,13 +187,15 @@ void QGeoPositionInfoSourceGeoclue2::stopUpdates() void QGeoPositionInfoSourceGeoclue2::requestUpdate(int timeout) { - if (timeout < minimumUpdateInterval() && timeout != 0) { - setError(QGeoPositionInfoSource::UpdateTimeoutError); + if (m_requestTimer->isActive()) { + qCDebug(lcPositioningGeoclue2) << "Request timer was active, ignoring startUpdates"; return; } - if (m_requestTimer->isActive()) { - qCDebug(lcPositioningGeoclue2) << "Request timer was active, ignoring startUpdates"; + m_error = QGeoPositionInfoSource::NoError; + + if (timeout < minimumUpdateInterval() && timeout != 0) { + setError(QGeoPositionInfoSource::UpdateTimeoutError); return; } @@ -201,7 +206,8 @@ void QGeoPositionInfoSourceGeoclue2::requestUpdate(int timeout) void QGeoPositionInfoSourceGeoclue2::setError(QGeoPositionInfoSource::Error error) { m_error = error; - emit QGeoPositionInfoSource::errorOccurred(m_error); + if (m_error != QGeoPositionInfoSource::NoError) + emit QGeoPositionInfoSource::errorOccurred(m_error); } void QGeoPositionInfoSourceGeoclue2::restoreLastPosition() |