- fixed : RlvUIEnabler behaviour toggle handlers are called on every RLV_TYPE_ADD

--HG--
branch : RLVa
meow-7.2.2
Kitty Barnett 2011-05-27 14:31:10 +02:00
parent 7d228559f1
commit 6b0b1c4df7
4 changed files with 12 additions and 14 deletions

View File

@ -1328,6 +1328,8 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd)
}
m_OnBehaviour(eBhvr, eType);
if ( ((RLV_TYPE_ADD == eType) && (1 == m_Behaviours[eBhvr])) || ((RLV_TYPE_REMOVE == eType) && (0 == m_Behaviours[eBhvr])) )
m_OnBehaviourToggle(eBhvr, eType);
// Show an - optional - notification on every global behaviour change
#ifdef RLV_EXTENSION_NOTIFY_BEHAVIOUR

View File

@ -132,10 +132,11 @@ protected:
public:
// The behaviour signal is triggered whenever a command is successfully processed and resulted in adding or removing a behaviour
typedef boost::signals2::signal<void (ERlvBehaviour, ERlvParamType)> rlv_behaviour_signal_t;
boost::signals2::connection setBehaviourCallback(const rlv_behaviour_signal_t::slot_type& cb ) { return m_OnBehaviour.connect(cb); }
boost::signals2::connection setBehaviourCallback(const rlv_behaviour_signal_t::slot_type& cb ) { return m_OnBehaviour.connect(cb); }
boost::signals2::connection setBehaviourToggleCallback(const rlv_behaviour_signal_t::slot_type& cb ) { return m_OnBehaviourToggle.connect(cb); }
// The command signal is triggered whenever a command is processed
typedef boost::signals2::signal<void (const RlvCommand&, ERlvCmdRet, bool)> rlv_command_signal_t;
boost::signals2::connection setCommandCallback(const rlv_command_signal_t::slot_type& cb ) { return m_OnCommand.connect(cb); }
boost::signals2::connection setCommandCallback(const rlv_command_signal_t::slot_type& cb ) { return m_OnCommand.connect(cb); }
void addCommandHandler(RlvCommandHandler* pHandler);
void removeCommandHandler(RlvCommandHandler* pHandler);
@ -208,6 +209,7 @@ protected:
std::stack<LLUUID> m_CurObjectStack; // Convenience (see @tpto)
rlv_behaviour_signal_t m_OnBehaviour;
rlv_behaviour_signal_t m_OnBehaviourToggle;
rlv_command_signal_t m_OnCommand;
mutable std::list<RlvCommandHandler*> m_CommandHandlers;

View File

@ -51,7 +51,7 @@
RlvUIEnabler::RlvUIEnabler()
{
// Connect us to the behaviour toggle signal
gRlvHandler.setBehaviourCallback(boost::bind(&RlvUIEnabler::onBehaviour, this, _1, _2));
gRlvHandler.setBehaviourToggleCallback(boost::bind(&RlvUIEnabler::onBehaviourToggle, this, _1, _2));
// onRefreshHoverText()
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWLOC, boost::bind(&RlvUIEnabler::onRefreshHoverText, this)));
@ -90,19 +90,13 @@ RlvUIEnabler::RlvUIEnabler()
}
// Checked: 2010-02-28 (RLVa-1.2.0b) | Added: RLVa-1.2.0a
void RlvUIEnabler::onBehaviour(ERlvBehaviour eBhvr, ERlvParamType eType)
void RlvUIEnabler::onBehaviourToggle(ERlvBehaviour eBhvr, ERlvParamType eType)
{
bool fQuitting = LLApp::isQuitting();
// We're only interested in behaviour toggles (ie on->off or off->on)
if ( ((RLV_TYPE_ADD == eType) && (1 == gRlvHandler.hasBehaviour(eBhvr))) ||
((RLV_TYPE_REMOVE == eType) && (0 == gRlvHandler.hasBehaviour(eBhvr))) )
for (behaviour_handler_map_t::const_iterator itHandler = m_Handlers.lower_bound(eBhvr), endHandler = m_Handlers.upper_bound(eBhvr);
itHandler != endHandler; ++itHandler)
{
for (behaviour_handler_map_t::const_iterator itHandler = m_Handlers.lower_bound(eBhvr), endHandler = m_Handlers.upper_bound(eBhvr);
itHandler != endHandler; ++itHandler)
{
itHandler->second(fQuitting);
}
itHandler->second(fQuitting);
}
}

View File

@ -39,7 +39,7 @@ protected:
public:
typedef boost::function<void(bool)> behaviour_handler_t;
void addBehaviourToggleCallback(ERlvBehaviour eBhvr, behaviour_handler_t cb);
void onBehaviour(ERlvBehaviour eBhvr, ERlvParamType eType); // RlvHandler::rlv_behaviour_signal_t
void onBehaviourToggle(ERlvBehaviour eBhvr, ERlvParamType eType); // RlvHandler::rlv_behaviour_signal_t
/*
* Behaviour handlers