diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2022-10-14 12:37:18 +0200 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2022-10-18 09:22:02 +0200 |
commit | 4ed9f2f6768a3d3f8fcb80bbfceae7bd6bc9b998 (patch) | |
tree | efe9c930ce4f186b15383b38665986418081c968 | |
parent | de9bffc7e501a553814f6789a93cc1c9ffdc6f2e (diff) |
PositionSource: fix lastKnownPosition request at startup
As mentioned in QTBUG-107580, the m_active property is always false by
the time we invoke the tryAttach() method. That is because calling
setActive(true), even at construct time, does not update the value
immediately, but instead defers the update until the real position
source is created.
This patch fixes it by introducing an m_startPending flag and
checking it instead of m_active. This flag is set when
setActive(true) is called, so it will have the correct value in
tryAttach().
This commit amends 53388508305ada6c364919042d5bd90ab5611337.
Fixes: QTBUG-107580
Task-number: QTBUG-103478
Change-Id: I72d532205f4bc1387dad0bd0e65a1871a840b356
Reviewed-by: Juha Vuolle <juha.vuolle@insta.fi>
-rw-r--r-- | src/positioningquick/qdeclarativepositionsource.cpp | 10 | ||||
-rw-r--r-- | src/positioningquick/qdeclarativepositionsource_p.h | 1 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/positioningquick/qdeclarativepositionsource.cpp b/src/positioningquick/qdeclarativepositionsource.cpp index a7903008..93158004 100644 --- a/src/positioningquick/qdeclarativepositionsource.cpp +++ b/src/positioningquick/qdeclarativepositionsource.cpp @@ -227,7 +227,7 @@ void QDeclarativePositionSource::tryAttach(const QString &newName, bool useFallb m_positionSource->setPreferredPositioningMethods( static_cast<QGeoPositionInfoSource::PositioningMethods>(int(m_preferredPositioningMethods))); - if (m_active) { + if (m_startPending) { const QGeoPositionInfo &lastKnown = m_positionSource->lastKnownPosition(); if (lastKnown.isValid()) setPosition(lastKnown); @@ -655,6 +655,8 @@ QDeclarativePositionSource::PositioningMethods QDeclarativePositionSource::prefe void QDeclarativePositionSource::start() { + m_startPending = false; + if (m_positionSource) m_positionSource->startUpdates(); @@ -727,10 +729,12 @@ void QDeclarativePositionSource::setActive(bool active) if (active == m_active) return; - if (active) + if (active) { + m_startPending = true; QTimer::singleShot(0, this, SLOT(start())); // delay ensures all properties have been set - else + } else { stop(); + } } bool QDeclarativePositionSource::isActive() const diff --git a/src/positioningquick/qdeclarativepositionsource_p.h b/src/positioningquick/qdeclarativepositionsource_p.h index e819d3e6..4deac248 100644 --- a/src/positioningquick/qdeclarativepositionsource_p.h +++ b/src/positioningquick/qdeclarativepositionsource_p.h @@ -185,6 +185,7 @@ private: QList<QDeclarativePluginParameter *> m_parameters; bool m_componentComplete = false; bool m_parametersInitialized = false; + bool m_startPending = false; }; QT_END_NAMESPACE |