Properly disconnect RlvBehaviorCallbacks in contacts and quickprefs floater

Ansariel 2014-07-24 11:33:04 +02:00
parent 69c9b91859
commit 204393bd99
4 changed files with 17 additions and 4 deletions

View File

@ -91,7 +91,8 @@ FSFloaterContacts::FSFloaterContacts(const LLSD& seed)
mGroupList(NULL),
mAllowRightsChange(TRUE),
mNumRightsChanged(0),
mSortByUserName(LLCachedControl<bool>(gSavedSettings,"FSSortContactsByUserName", FALSE))
mSortByUserName(LLCachedControl<bool>(gSavedSettings,"FSSortContactsByUserName", FALSE)),
mRlvBehaviorCallbackConnection()
{
mObserver = new LLLocalFriendsObserver(this);
LLAvatarTracker::instance().addObserver(mObserver);
@ -105,6 +106,11 @@ FSFloaterContacts::~FSFloaterContacts()
LLVoiceClient::getInstance()->removeObserver(mObserver);
LLAvatarTracker::instance().removeObserver(mObserver);
delete mObserver;
if (mRlvBehaviorCallbackConnection.connected())
{
mRlvBehaviorCallbackConnection.disconnect();
}
}
BOOL FSFloaterContacts::postBuild()
@ -165,7 +171,7 @@ BOOL FSFloaterContacts::postBuild()
mGroupsTab->childSetAction("invite_btn", boost::bind(&FSFloaterContacts::onGroupInviteButtonClicked, this));
mGroupsTab->setDefaultBtn("chat_btn");
gRlvHandler.setBehaviourCallback(boost::bind(&FSFloaterContacts::updateRlvRestrictions, this, _1));
mRlvBehaviorCallbackConnection = gRlvHandler.setBehaviourCallback(boost::bind(&FSFloaterContacts::updateRlvRestrictions, this, _1));
return TRUE;
}

View File

@ -146,6 +146,7 @@ private:
void childShowTab(const std::string& id, const std::string& tabname);
void updateRlvRestrictions(ERlvBehaviour behavior);
boost::signals2::connection mRlvBehaviorCallbackConnection;
};

View File

@ -95,7 +95,8 @@ FloaterQuickPrefs::QuickPrefsXMLEntry::QuickPrefsXMLEntry()
// </FS:Zi>
FloaterQuickPrefs::FloaterQuickPrefs(const LLSD& key)
: LLTransientDockableFloater(NULL, true, key)
: LLTransientDockableFloater(NULL, true, key),
mRlvBehaviorCallbackConnection()
{
// For Phototools
mCommitCallbackRegistrar.add("Quickprefs.ShaderChanged", boost::bind(&handleSetShaderChanged, LLSD()));
@ -103,6 +104,10 @@ FloaterQuickPrefs::FloaterQuickPrefs(const LLSD& key)
FloaterQuickPrefs::~FloaterQuickPrefs()
{
if (mRlvBehaviorCallbackConnection.connected())
{
mRlvBehaviorCallbackConnection.disconnect();
}
}
void FloaterQuickPrefs::onOpen(const LLSD& key)
@ -202,7 +207,7 @@ void FloaterQuickPrefs::initCallbacks()
gSavedSettings.getControl("QuickPrefsEditMode")->getSignal()->connect(boost::bind(&FloaterQuickPrefs::onEditModeChanged, this)); // <FS:Zi> Dynamic Quickprefs
}
gRlvHandler.setBehaviourCallback(boost::bind(&FloaterQuickPrefs::updateRlvRestrictions, this, _1, _2));
mRlvBehaviorCallbackConnection = gRlvHandler.setBehaviourCallback(boost::bind(&FloaterQuickPrefs::updateRlvRestrictions, this, _1, _2));
}
void FloaterQuickPrefs::loadPresets()

View File

@ -91,6 +91,7 @@ private:
void onClickDayCycleNext();
void onClickResetToRegionDefault();
boost::signals2::connection mRlvBehaviorCallbackConnection;
void updateRlvRestrictions(ERlvBehaviour behavior, ERlvParamType type);
void enableWindlightButtons(BOOL enable);