diff options
Diffstat (limited to 'src/location/declarativemaps/qgeomapobject.cpp')
-rw-r--r-- | src/location/declarativemaps/qgeomapobject.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/location/declarativemaps/qgeomapobject.cpp b/src/location/declarativemaps/qgeomapobject.cpp index 9d94900f..9c97dd57 100644 --- a/src/location/declarativemaps/qgeomapobject.cpp +++ b/src/location/declarativemaps/qgeomapobject.cpp @@ -121,14 +121,28 @@ bool QGeoMapObject::visible() const void QGeoMapObject::setVisible(bool visible) { - if (visible == d_ptr->visible()) + if (visible == d_ptr->m_visible) return; + const bool oldVisible = QGeoMapObject::visible(); d_ptr->setVisible(visible); + if (d_ptr->m_componentCompleted) + setChildrenVisibility(); + if (QGeoMapObject::visible() != oldVisible) + emit visibleChanged(); +} +void QGeoMapObject::setParentVisiblity(bool visible) +{ + if (visible == d_ptr->m_parentVisible) + return; + + const bool oldVisible = QGeoMapObject::visible(); + d_ptr->setParentVisibility(visible); if (d_ptr->m_componentCompleted) setChildrenVisibility(); - emit visibleChanged(); + if (QGeoMapObject::visible() != oldVisible) + emit visibleChanged(); } QGeoMapObject::Type QGeoMapObject::type() const @@ -151,7 +165,7 @@ void QGeoMapObject::setChildrenVisibility() const bool v = visible(); const QList<QGeoMapObject *> kids = geoMapObjectChildren(); for (auto kid : qAsConst(kids)) - kid->setVisible(v); + kid->setParentVisiblity(v); } void QGeoMapObject::classBegin() @@ -249,7 +263,7 @@ bool QGeoMapObjectPrivate::equals(const QGeoMapObjectPrivate &other) const bool QGeoMapObjectPrivate::visible() const { - return m_visible; + return m_visible && m_parentVisible; } void QGeoMapObjectPrivate::setVisible(bool visible) @@ -257,4 +271,9 @@ void QGeoMapObjectPrivate::setVisible(bool visible) m_visible = visible; } +void QGeoMapObjectPrivate::setParentVisibility(bool visible) +{ + m_parentVisible = visible; +} + QT_END_NAMESPACE |