diff --git a/src/mumble/Overlay.cpp b/src/mumble/Overlay.cpp index fa539ec91..ee54cd5bb 100644 --- a/src/mumble/Overlay.cpp +++ b/src/mumble/Overlay.cpp @@ -444,11 +444,21 @@ void Overlay::clearCache() { qhTextures.clear(); qhWidths.clear(); + qsForce.clear(); + qsQueried.clear(); } void Overlay::setTexts(const QList &lines) { + QSet query; + foreach(const TextLine &e, lines) { ClientUser *cp = ClientUser::get(e.uiSession); + if (g.s.bOverlayUserTextures && cp && ! cp->qbaTextureHash.isEmpty()) { + if (cp->qbaTexture.isEmpty() && ! qsQueried.contains(cp->uiSession)) + query.insert(cp->uiSession); + else if (! cp->qbaTexture.isEmpty() && qsQueried.contains(cp->uiSession)) + qsQueried.remove(cp->uiSession); + } if ((! e.qsText.isEmpty()) && (! qhTextures.contains(e.qsText)) && !(g.s.bOverlayUserTextures && cp && cp->iTextureWidth)) { unsigned char *td = new unsigned char[TEXTURE_SIZE]; memset(td, 0, TEXTURE_SIZE); @@ -476,6 +486,15 @@ void Overlay::setTexts(const QList &lines) { } } + if (! query.isEmpty()) { + MumbleProto::RequestBlob mprb; + foreach(unsigned int session, query) { + qsQueried.insert(session); + mprb.add_session_texture(session); + } + g.sh->sendMessage(mprb); + } + if (! sm.sm || ! sm.tryLock()) return; diff --git a/src/mumble/Overlay.h b/src/mumble/Overlay.h index fe3157122..bb4076d22 100644 --- a/src/mumble/Overlay.h +++ b/src/mumble/Overlay.h @@ -113,6 +113,7 @@ class Overlay : public QObject { QHash qhTextures; QHash qhWidths; QSet qsForce; + QSet qsQueried; QLibrary *qlOverlay; QTimer *qtTimer; QFont qfFont;