summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2017-07-25 09:02:56 +0300
committerPaolo Angelelli <paolo.angelelli@qt.io>2017-07-28 14:09:43 +0000
commitc467f608ec92d4a2023140a1f212e4b46b892bb8 (patch)
tree190c6d1b17215859f93a8528ba368ffa81984438
parent763d5977e7758adb232e1ecd091f926e6f54e75a (diff)
downloadqtlocation-c467f608ec92d4a2023140a1f212e4b46b892bb8.tar.gz
Fix memleak: delete QGeoMap when QDeclarativeGeoMap gets deleted
Task-number: QTBUG-62122 Change-Id: I538e1eeb6bce3f5de424003b0b31fa59599dc2d5 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap.cpp36
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap_p.h2
-rw-r--r--src/location/declarativemaps/qquickgeomapgesturearea.cpp2
-rw-r--r--src/location/declarativemaps/qquickgeomapgesturearea_p.h4
-rw-r--r--src/location/maps/qgeomappingmanager.cpp6
5 files changed, 25 insertions, 25 deletions
diff --git a/src/location/declarativemaps/qdeclarativegeomap.cpp b/src/location/declarativemaps/qdeclarativegeomap.cpp
index f5d2bdb5..bd9c9cf2 100644
--- a/src/location/declarativemaps/qdeclarativegeomap.cpp
+++ b/src/location/declarativemaps/qdeclarativegeomap.cpp
@@ -241,6 +241,8 @@ QDeclarativeGeoMap::~QDeclarativeGeoMap()
delete m_copyrights.data();
m_copyrights.clear();
+
+ delete m_map;
}
/*!
@@ -279,17 +281,17 @@ void QDeclarativeGeoMap::onMapChildrenChanged()
copyrights = m_copyrights.data();
- connect(m_map.data(), SIGNAL(copyrightsChanged(QImage)),
+ connect(m_map, SIGNAL(copyrightsChanged(QImage)),
copyrights, SLOT(copyrightsChanged(QImage)));
- connect(m_map.data(), SIGNAL(copyrightsChanged(QImage)),
+ connect(m_map, SIGNAL(copyrightsChanged(QImage)),
this, SIGNAL(copyrightsChanged(QImage)));
- connect(m_map.data(), SIGNAL(copyrightsChanged(QString)),
+ connect(m_map, SIGNAL(copyrightsChanged(QString)),
copyrights, SLOT(copyrightsChanged(QString)));
- connect(m_map.data(), SIGNAL(copyrightsChanged(QString)),
+ connect(m_map, SIGNAL(copyrightsChanged(QString)),
this, SIGNAL(copyrightsChanged(QString)));
- connect(m_map.data(), SIGNAL(copyrightsStyleSheetChanged(QString)),
+ connect(m_map, SIGNAL(copyrightsStyleSheetChanged(QString)),
copyrights, SLOT(onCopyrightsStyleSheetChanged(QString)));
connect(copyrights, SIGNAL(linkActivated(QString)),
@@ -725,7 +727,7 @@ void QDeclarativeGeoMap::onCameraCapabilitiesChanged(const QGeoCameraCapabilitie
*/
void QDeclarativeGeoMap::mappingManagerInitialized()
{
- m_map = QPointer<QGeoMap>(m_mappingManager->createMap(this));
+ m_map = m_mappingManager->createMap(this);
if (!m_map)
return;
@@ -765,11 +767,11 @@ void QDeclarativeGeoMap::mappingManagerInitialized()
QImage copyrightImage;
if (!m_initialized && width() > 0 && height() > 0) {
QMetaObject::Connection copyrightStringCatcherConnection =
- connect(m_map.data(),
+ connect(m_map,
QOverload<const QString &>::of(&QGeoMap::copyrightsChanged),
[&copyrightString](const QString &copy){ copyrightString = copy; });
QMetaObject::Connection copyrightImageCatcherConnection =
- connect(m_map.data(),
+ connect(m_map,
QOverload<const QImage &>::of(&QGeoMap::copyrightsChanged),
[&copyrightImage](const QImage &copy){ copyrightImage = copy; });
m_map->setViewportSize(QSize(width(), height()));
@@ -781,28 +783,28 @@ void QDeclarativeGeoMap::mappingManagerInitialized()
m_copyrights = new QDeclarativeGeoMapCopyrightNotice(this);
m_copyrights->onCopyrightsStyleSheetChanged(m_map->copyrightsStyleSheet());
- connect(m_map.data(), SIGNAL(copyrightsChanged(QImage)),
+ connect(m_map, SIGNAL(copyrightsChanged(QImage)),
m_copyrights.data(), SLOT(copyrightsChanged(QImage)));
- connect(m_map.data(), SIGNAL(copyrightsChanged(QImage)),
+ connect(m_map, SIGNAL(copyrightsChanged(QImage)),
this, SIGNAL(copyrightsChanged(QImage)));
- connect(m_map.data(), SIGNAL(copyrightsChanged(QString)),
+ connect(m_map, SIGNAL(copyrightsChanged(QString)),
m_copyrights.data(), SLOT(copyrightsChanged(QString)));
- connect(m_map.data(), SIGNAL(copyrightsChanged(QString)),
+ connect(m_map, SIGNAL(copyrightsChanged(QString)),
this, SIGNAL(copyrightsChanged(QString)));
if (!copyrightString.isEmpty())
- emit m_map.data()->copyrightsChanged(copyrightString);
+ emit m_map->copyrightsChanged(copyrightString);
else if (!copyrightImage.isNull())
- emit m_map.data()->copyrightsChanged(copyrightImage);
+ emit m_map->copyrightsChanged(copyrightImage);
- connect(m_map.data(), SIGNAL(copyrightsStyleSheetChanged(QString)),
+ connect(m_map, SIGNAL(copyrightsStyleSheetChanged(QString)),
m_copyrights.data(), SLOT(onCopyrightsStyleSheetChanged(QString)));
connect(m_copyrights.data(), SIGNAL(linkActivated(QString)),
this, SIGNAL(copyrightLinkActivated(QString)));
- connect(m_map.data(), &QGeoMap::sgNodeChanged, this, &QQuickItem::update);
- connect(m_map.data(), &QGeoMap::cameraCapabilitiesChanged, this, &QDeclarativeGeoMap::onCameraCapabilitiesChanged);
+ connect(m_map, &QGeoMap::sgNodeChanged, this, &QQuickItem::update);
+ connect(m_map, &QGeoMap::cameraCapabilitiesChanged, this, &QDeclarativeGeoMap::onCameraCapabilitiesChanged);
// set visibility of copyright notice
m_copyrights->setCopyrightsVisible(m_copyrightsVisible);
diff --git a/src/location/declarativemaps/qdeclarativegeomap_p.h b/src/location/declarativemaps/qdeclarativegeomap_p.h
index f07a2e7f..e8ff3265 100644
--- a/src/location/declarativemaps/qdeclarativegeomap_p.h
+++ b/src/location/declarativemaps/qdeclarativegeomap_p.h
@@ -252,7 +252,7 @@ private:
QList<QDeclarativeGeoMapType *> m_supportedMapTypes;
QList<QDeclarativeGeoMapItemView *> m_mapViews;
QQuickGeoMapGestureArea *m_gestureArea;
- QPointer<QGeoMap> m_map;
+ QGeoMap* m_map = nullptr;
QPointer<QDeclarativeGeoMapCopyrightNotice> m_copyrights;
QList<QPointer<QDeclarativeGeoMapItemBase> > m_mapItems;
QList<QPointer<QDeclarativeGeoMapItemGroup> > m_mapItemGroups;
diff --git a/src/location/declarativemaps/qquickgeomapgesturearea.cpp b/src/location/declarativemaps/qquickgeomapgesturearea.cpp
index a40afd68..33a984d6 100644
--- a/src/location/declarativemaps/qquickgeomapgesturearea.cpp
+++ b/src/location/declarativemaps/qquickgeomapgesturearea.cpp
@@ -508,7 +508,7 @@ QQuickGeoMapGestureArea::QQuickGeoMapGestureArea(QDeclarativeGeoMap *map)
/*!
\internal
*/
-void QQuickGeoMapGestureArea::setMap(QPointer<QGeoMap> map)
+void QQuickGeoMapGestureArea::setMap(QGeoMap *map)
{
if (m_map || !map)
return;
diff --git a/src/location/declarativemaps/qquickgeomapgesturearea_p.h b/src/location/declarativemaps/qquickgeomapgesturearea_p.h
index 5daa39cf..0bc774d3 100644
--- a/src/location/declarativemaps/qquickgeomapgesturearea_p.h
+++ b/src/location/declarativemaps/qquickgeomapgesturearea_p.h
@@ -178,7 +178,7 @@ public:
void setMaximumZoomLevel(qreal max);
qreal maximumZoomLevel() const;
- void setMap(QPointer<QGeoMap> map);
+ void setMap(QGeoMap* map);
bool preventStealing() const;
void setPreventStealing(bool prevent);
@@ -267,7 +267,7 @@ private:
void updateFlickParameters(const QPointF &pos);
private:
- QPointer<QGeoMap> m_map;
+ QGeoMap* m_map;
QDeclarativeGeoMap *m_declarativeMap;
bool m_enabled;
diff --git a/src/location/maps/qgeomappingmanager.cpp b/src/location/maps/qgeomappingmanager.cpp
index cf040beb..d73050f7 100644
--- a/src/location/maps/qgeomappingmanager.cpp
+++ b/src/location/maps/qgeomappingmanager.cpp
@@ -133,10 +133,8 @@ int QGeoMappingManager::managerVersion() const
*/
QGeoMap *QGeoMappingManager::createMap(QObject *parent)
{
- QGeoMap * map = d_ptr->engine->createMap();
- if (map)
- connect(parent, &QObject::destroyed,map, &QGeoMap::deleteLater);
- return map;
+ Q_UNUSED(parent)
+ return d_ptr->engine->createMap();
}
QList<QGeoMapType> QGeoMappingManager::supportedMapTypes() const