summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2022-10-14 12:37:18 +0200
committerIvan Solovev <ivan.solovev@qt.io>2022-10-18 09:22:02 +0200
commit4ed9f2f6768a3d3f8fcb80bbfceae7bd6bc9b998 (patch)
treeefe9c930ce4f186b15383b38665986418081c968
parentde9bffc7e501a553814f6789a93cc1c9ffdc6f2e (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.cpp10
-rw-r--r--src/positioningquick/qdeclarativepositionsource_p.h1
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