From 6b0b1c4df7c856532b0b4603e14ffbae575effa4 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Fri, 27 May 2011 14:31:10 +0200 Subject: [PATCH] - fixed : RlvUIEnabler behaviour toggle handlers are called on every RLV_TYPE_ADD --HG-- branch : RLVa --- indra/newview/rlvhandler.cpp | 2 ++ indra/newview/rlvhandler.h | 6 ++++-- indra/newview/rlvui.cpp | 16 +++++----------- indra/newview/rlvui.h | 2 +- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 39db4d36cd..4d4c7e2aaf 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -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 diff --git a/indra/newview/rlvhandler.h b/indra/newview/rlvhandler.h index 6e8f6fec70..aea8c13a0f 100644 --- a/indra/newview/rlvhandler.h +++ b/indra/newview/rlvhandler.h @@ -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 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 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 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 m_CommandHandlers; diff --git a/indra/newview/rlvui.cpp b/indra/newview/rlvui.cpp index 8a8c29d220..fd2fcc7e9c 100644 --- a/indra/newview/rlvui.cpp +++ b/indra/newview/rlvui.cpp @@ -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(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); } } diff --git a/indra/newview/rlvui.h b/indra/newview/rlvui.h index dd583e1769..5c63972088 100644 --- a/indra/newview/rlvui.h +++ b/indra/newview/rlvui.h @@ -39,7 +39,7 @@ protected: public: typedef boost::function 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