diff options
author | Joerg Bornemann <joerg.bornemann@nokia.com> | 2010-04-21 07:29:15 (GMT) |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@nokia.com> | 2010-04-21 08:30:37 (GMT) |
commit | 78a0cf9c347b80e7d7b1eb369d8ff28c49ed1b7d (patch) | |
tree | 027ccedaefb0241105ebcfe93e0c410fac048d07 /src/gui | |
parent | f6d816ffe37ac74d29a7423683d4e046a3906b74 (diff) | |
download | Qt-78a0cf9c347b80e7d7b1eb369d8ff28c49ed1b7d.zip Qt-78a0cf9c347b80e7d7b1eb369d8ff28c49ed1b7d.tar.gz Qt-78a0cf9c347b80e7d7b1eb369d8ff28c49ed1b7d.tar.bz2 |
QStyleSheetStyle: fix memory leak on base style change
On every change of the base style it is inserted into styleSheetCache.
If the base style gets destroyed, it must be removed from the cache.
Task-number: QTBUG-4074
Reviewed-by: ogoffart
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/styles/qstylesheetstyle.cpp | 9 | ||||
-rw-r--r-- | src/gui/styles/qstylesheetstyle_p.h | 1 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 285a789..0b615bc 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -1533,7 +1533,9 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const QHash<const void *, StyleSheet>::const_iterator defaultCacheIt = styleSheetCache->constFind(baseStyle()); if (defaultCacheIt == styleSheetCache->constEnd()) { defaultSs = getDefaultStyleSheet(); - styleSheetCache->insert(baseStyle(), defaultSs); + QStyle *bs = baseStyle(); + styleSheetCache->insert(bs, defaultSs); + QObject::connect(bs, SIGNAL(destroyed(QObject*)), this, SLOT(styleDestroyed(QObject*)), Qt::UniqueConnection); } else { defaultSs = defaultCacheIt.value(); } @@ -2660,6 +2662,11 @@ void QStyleSheetStyle::widgetDestroyed(QObject *o) autoFillDisabledWidgets->remove((const QWidget *)o); } +void QStyleSheetStyle::styleDestroyed(QObject *o) +{ + styleSheetCache->remove(o); +} + /*! * Make sure that the cache will be clean by connecting destroyed if needed. * return false if the widget is not stylable; diff --git a/src/gui/styles/qstylesheetstyle_p.h b/src/gui/styles/qstylesheetstyle_p.h index 50abef9..fd81437 100644 --- a/src/gui/styles/qstylesheetstyle_p.h +++ b/src/gui/styles/qstylesheetstyle_p.h @@ -147,6 +147,7 @@ protected: private Q_SLOTS: void widgetDestroyed(QObject *); + void styleDestroyed(QObject *); private: int refcount; |