Work on major bug EXT-5562 (Misleading Active Voice Indicators in Group Chat Window, when Speakers are in Spatial Chat Only)

-- added more log information
-- session uuid can now be set only from SpeakingIndicatorManager to ensure target session is the same indicator was registered with.
-- comments cleanup

--HG--
branch : product-engine
master
Mike Antipov 2010-02-24 11:13:52 +02:00
parent 022c433d53
commit 2fc5956d9d
3 changed files with 13 additions and 5 deletions

View File

@ -303,7 +303,7 @@ void LLOutputMonitorCtrl::switchIndicator(bool switch_on)
}
// otherwise remember necessary state and mark itself as dirty.
// State will be applied i next draw when parents chain became visible.
// State will be applied in next draw when parents chain becomes visible.
else
{
LL_DEBUGS("SpeakingIndicator") << "Indicator is not in visible chain, parent won't be notified: " << mSpeakerId << LL_ENDL;

View File

@ -147,7 +147,7 @@ void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_i
{
// do not exclude agent's indicators. They should be processed in the same way as others. See EXT-3889.
LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL;
LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << "|"<< speaking_indicator << ", session: " << session_id << LL_ENDL;
ensureInstanceDoesNotExist(speaking_indicator);
@ -249,6 +249,7 @@ void SpeakingIndicatorManager::switchSpeakerIndicators(const speaker_ids_t& spea
if (switch_current_on && indicator->getTargetSessionID().notNull())
{
switch_current_on = indicator->getTargetSessionID() == session_id;
LL_DEBUGS("SpeakingIndicator") << "Session: " << session_id << ", target: " << indicator->getTargetSessionID() << ", the same? = " << switch_current_on << LL_ENDL;
}
indicator->switchIndicator(switch_current_on);
@ -300,7 +301,7 @@ void SpeakingIndicatorManager::ensureInstanceDoesNotExist(LLSpeakingIndicator* c
/************************************************************************/
void LLSpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator,
const LLUUID& session_id/* = LLUUID::null*/)
const LLUUID& session_id)
{
SpeakingIndicatorManager::instance().registerSpeakingIndicator(speaker_id, speaking_indicator, session_id);
}

View File

@ -35,15 +35,22 @@
#ifndef LL_LLSPEAKINGINDICATORMANAGER_H
#define LL_LLSPEAKINGINDICATORMANAGER_H
class SpeakingIndicatorManager;
class LLSpeakingIndicator
{
public:
virtual ~LLSpeakingIndicator(){}
virtual void switchIndicator(bool switch_on) = 0;
private:
friend class SpeakingIndicatorManager;
// Accessors for target voice session UUID.
// They are intended to be used only from SpeakingIndicatorManager to ensure target session is
// the same indicator was registered with.
void setTargetSessionID(const LLUUID& session_id) { mTargetSessionID = session_id; }
const LLUUID& getTargetSessionID() { return mTargetSessionID; }
private:
/**
* session UUID for which indicator should be shown only.
* If it is set, registered indicator will be shown only in voice channel
@ -68,7 +75,7 @@ namespace LLSpeakingIndicatorManager
* which has the same session id (EXT-5562).
*/
void registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator,
const LLUUID& session_id = LLUUID::null);
const LLUUID& session_id);
/**
* Removes passed speaking indicator from observing.