diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2022-10-11 12:50:03 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-10-12 08:45:05 +0000 |
commit | b6f3031ccf18bc371b3bce1e1379a08b24d16c45 (patch) | |
tree | d394d6685034bad06a45e7bedb500d9f5a96f38f | |
parent | b35335d78aed5aa2fde5f6a601a9242c7fab6fe7 (diff) |
PositionSource: unify error processing logic
When any error occurs during single update request, the update is
canceled, and the active state should be changed to false.
This patch takes the logic which was previously applied only to
UpdateTimeoutError, and uses it for handling all error types.
Change-Id: Ia8ca85635c2fa9c48e7cf8b631c889bfac9d2a77
Reviewed-by: Mate Barany <mate.barany@qt.io>
Reviewed-by: Juha Vuolle <juha.vuolle@insta.fi>
(cherry picked from commit 52e789fb72895631dfd08c0ed88f166d213a35ad)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/positioningquick/qdeclarativepositionsource.cpp | 33 | ||||
-rw-r--r-- | src/positioningquick/qdeclarativepositionsource_p.h | 1 |
2 files changed, 11 insertions, 23 deletions
diff --git a/src/positioningquick/qdeclarativepositionsource.cpp b/src/positioningquick/qdeclarativepositionsource.cpp index 0a059144..857d8470 100644 --- a/src/positioningquick/qdeclarativepositionsource.cpp +++ b/src/positioningquick/qdeclarativepositionsource.cpp @@ -325,27 +325,6 @@ bool QDeclarativePositionSource::isValidActualComputation() const return m_positionSource != nullptr; } -void QDeclarativePositionSource::handleUpdateTimeout() -{ - // notify will be called by the calling method - m_sourceError.setValueBypassingBindings(QDeclarativePositionSource::UpdateTimeoutError); - - if (!m_active) - return; - - if (m_singleUpdate) { - m_singleUpdate = false; - - if (!m_regularUpdates) { - // only singleUpdate based timeouts change activity - // continuous updates may resume again - // (see QGeoPositionInfoSource::startUpdates()) - m_active.setValueBypassingBindings(false); - m_active.notify(); - } - } -} - /*! \internal */ @@ -868,7 +847,7 @@ void QDeclarativePositionSource::sourceErrorReceived(const QGeoPositionInfoSourc else if (error == QGeoPositionInfoSource::ClosedError) m_sourceError.setValueBypassingBindings(QDeclarativePositionSource::ClosedError); else if (error == QGeoPositionInfoSource::UpdateTimeoutError) - handleUpdateTimeout(); // also sets m_sourceError + m_sourceError.setValueBypassingBindings(QDeclarativePositionSource::UpdateTimeoutError); else if (error == QGeoPositionInfoSource::NoError) return; //nothing to do else @@ -876,6 +855,16 @@ void QDeclarativePositionSource::sourceErrorReceived(const QGeoPositionInfoSourc m_sourceError.notify(); emit sourceErrorChanged(); + + // if an error occurred during single update, the update is stopped, so we + // need to change the active state. + if (m_active && m_singleUpdate) { + m_singleUpdate = false; + if (!m_regularUpdates) { + m_active.setValueBypassingBindings(false); + m_active.notify(); + } + } } QT_END_NAMESPACE diff --git a/src/positioningquick/qdeclarativepositionsource_p.h b/src/positioningquick/qdeclarativepositionsource_p.h index 1f3038b6..537d3459 100644 --- a/src/positioningquick/qdeclarativepositionsource_p.h +++ b/src/positioningquick/qdeclarativepositionsource_p.h @@ -132,7 +132,6 @@ private Q_SLOTS: void notifySupportedPositioningMethodsChanged(); private: - void handleUpdateTimeout(); void setPosition(const QGeoPositionInfo &pi); void setSource(QGeoPositionInfoSource *source); bool parametersReady(); |