diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2012-03-19 12:29:32 +0100 |
---|---|---|
committer | Kent Hansen <kent.hansen@nokia.com> | 2012-03-19 12:37:03 +0100 |
commit | 4821058f10118be55a541ad39e25ec9165cca3b3 (patch) | |
tree | 167973e3c68fc442b0e37d6f628f3fdbe759f15a /src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp | |
parent | 83f11e33745180e9370d484cbcedd0bac020c9dd (diff) | |
parent | 26d5f2e833f0e3686aaa27e695bbfab5fbd808ad (diff) |
Merge master into api_changes
Conflicts:
src/qml/debugger/qqmlenginedebugservice.cpp
src/qml/qml/v8/qv8qobjectwrapper.cpp
src/quick/util/qquickimageprovider.cpp
tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
Change-Id: Ie78ba2fabd32f4812bcae9dbdd66ed289dc11dcb
Diffstat (limited to 'src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp')
-rw-r--r-- | src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp index 76fb9036f4..cd5aaaedd7 100644 --- a/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp +++ b/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp @@ -234,14 +234,25 @@ void QSGSharedDistanceFieldGlyphCache::releaseGlyphs(const QSet<glyph_t> &glyphs void QSGSharedDistanceFieldGlyphCache::registerOwnerElement(QQuickItem *ownerElement) { - bool ok = connect(this, SIGNAL(glyphsPending()), ownerElement, SLOT(triggerPreprocess())); - Q_ASSERT_X(ok, Q_FUNC_INFO, "QML element that owns a glyph node must have triggerPreprocess() slot"); - Q_UNUSED(ok); + Owner &owner = m_registeredOwners[ownerElement]; + if (owner.ref == 0) { + owner.item = ownerElement; + + bool ok = connect(this, SIGNAL(glyphsPending()), ownerElement, SLOT(triggerPreprocess())); + Q_ASSERT_X(ok, Q_FUNC_INFO, "QML element that owns a glyph node must have triggerPreprocess() slot"); + Q_UNUSED(ok); + } + ++owner.ref; } void QSGSharedDistanceFieldGlyphCache::unregisterOwnerElement(QQuickItem *ownerElement) { - disconnect(this, SIGNAL(glyphsPending()), ownerElement, SLOT(triggerPreprocess())); + QHash<QQuickItem *, Owner>::iterator it = m_registeredOwners.find(ownerElement); + if (it != m_registeredOwners.end() && --it->ref <= 0) { + if (it->item) + disconnect(this, SIGNAL(glyphsPending()), ownerElement, SLOT(triggerPreprocess())); + m_registeredOwners.erase(it); + } } #if defined(QSGSHAREDDISTANCEFIELDGLYPHCACHE_DEBUG_) |