diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6a8cdf13d9..b3879d4a52 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -167,6 +167,17 @@ Value 1 + RLVaEnableTemporaryAttachments + + Comment + Allows temporary attachments (regardless of origin) to issue RLV commands + Persist + 1 + Type + Boolean + Value + 1 + RLVaExperimentalCommands Comment @@ -244,17 +255,6 @@ Value 1 - WarnFirstRLVGiveToRLV - - Comment - Enables FirstRLVGiveToRLV warning dialog - Persist - 1 - Type - Boolean - Value - 1 - ImporterDebug Comment diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 1eb739e698..2d317562aa 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4027,7 +4027,8 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) case CHAT_TYPE_OWNER: // [RLVa:KB] - Checked: 2010-02-XX (RLVa-1.2.0a) | Modified: RLVa-1.1.0f // TODO-RLVa: [RLVa-1.2.0] consider rewriting this before a RLVa-1.2.0 release - if ( (rlv_handler_t::isEnabled()) && (mesg.length() > 3) && (RLV_CMD_PREFIX == mesg[0]) && (CHAT_TYPE_OWNER == chat.mChatType) ) + if ( (rlv_handler_t::isEnabled()) && (mesg.length() > 3) && (RLV_CMD_PREFIX == mesg[0]) && (CHAT_TYPE_OWNER == chat.mChatType) && + ((!chatter) || (!chatter->isAttachment()) || (!chatter->isTempAttachment()) || (RlvSettings::getEnableTemporaryAttachments())) ) { mesg.erase(0, 1); LLStringUtil::toLower(mesg); diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index a455bd8e06..319441d9c7 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -83,6 +83,7 @@ bool RlvSettings::s_fCompositeFolders = false; bool RlvSettings::s_fCanOOC = true; bool RlvSettings::s_fLegacyNaming = true; bool RlvSettings::s_fNoSetEnv = false; +bool RlvSettings::s_fTempAttach = true; std::list RlvSettings::s_CompatItemCreators; std::list RlvSettings::s_CompatItemNames; @@ -94,6 +95,10 @@ void RlvSettings::initClass() { initCompatibilityMode(LLStringUtil::null); + s_fTempAttach = rlvGetSetting(RLV_SETTING_ENABLETEMPATTACH, true); + if (gSavedSettings.controlExists(RLV_SETTING_ENABLETEMPATTACH)) + gSavedSettings.getControl(RLV_SETTING_ENABLETEMPATTACH)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &s_fTempAttach)); + #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS s_fCompositeFolders = rlvGetSetting(RLV_SETTING_ENABLECOMPOSITES, false); if (gSavedSettings.controlExists(RLV_SETTING_ENABLECOMPOSITES)) diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index fa50475452..96cde804f4 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -94,6 +94,7 @@ public: static bool getEnableIMQuery() { return rlvGetSetting("RLVaEnableIMQuery", true); } static bool getEnableLegacyNaming() { return s_fLegacyNaming; } static bool getEnableSharedWear() { return rlvGetSetting(RLV_SETTING_ENABLESHAREDWEAR, false); } + static bool getEnableTemporaryAttachments() { return s_fTempAttach; } static bool getHideLockedLayers() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDLAYER, false); } static bool getHideLockedAttach() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDATTACH, false); } static bool getHideLockedInventory() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDINVENTORY, false); } @@ -122,6 +123,7 @@ protected: static bool s_fCanOOC; static bool s_fLegacyNaming; static bool s_fNoSetEnv; + static bool s_fTempAttach; static std::list s_CompatItemCreators; static std::list s_CompatItemNames; }; diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 3011a41325..5f681a430c 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -348,6 +348,7 @@ enum ERlvAttachGroupType #define RLV_SETTING_ENABLECOMPOSITES "RLVaEnableCompositeFolders" #define RLV_SETTING_ENABLELEGACYNAMING "RLVaEnableLegacyNaming" #define RLV_SETTING_ENABLESHAREDWEAR "RLVaEnableSharedWear" +#define RLV_SETTING_ENABLETEMPATTACH "RLVaEnableTemporaryAttachments" #define RLV_SETTING_HIDELOCKEDLAYER "RLVaHideLockedLayers" #define RLV_SETTING_HIDELOCKEDATTACH "RLVaHideLockedAttachments" #define RLV_SETTING_HIDELOCKEDINVENTORY "RLVaHideLockedInventory" diff --git a/indra/newview/rlvlocks.h b/indra/newview/rlvlocks.h index 69df3c9283..0d57321068 100644 --- a/indra/newview/rlvlocks.h +++ b/indra/newview/rlvlocks.h @@ -475,15 +475,14 @@ inline bool RlvAttachmentLocks::isLockedAttachment(const LLViewerObject* pAttach RLV_ASSERT( (!pAttachObj) || (pAttachObj == pAttachObj->getRootEdit()) ); // Object is locked if: - // - it's not a temporary attachment // - it's specifically marked as non-detachable (ie @detach=n) // - it's attached to an attachment point that is RLV_LOCK_REMOVE locked (ie @remattach:=n) // - it's part of a locked folder return - (pAttachObj) && (pAttachObj->isAttachment()) && (!pAttachObj->isTempAttachment()) && - ( (m_AttachObjRem.find(pAttachObj->getID()) != m_AttachObjRem.end()) || + (pAttachObj) && (pAttachObj->isAttachment()) && + ( (m_AttachObjRem.find(pAttachObj->getID()) != m_AttachObjRem.end()) || (isLockedAttachmentPoint(RlvAttachPtLookup::getAttachPointIndex(pAttachObj), RLV_LOCK_REMOVE)) || - (RlvFolderLocks::instance().isLockedAttachment(pAttachObj->getAttachmentItemID())) ); + ((!pAttachObj->isTempAttachment()) && (RlvFolderLocks::instance().isLockedAttachment(pAttachObj->getAttachmentItemID()))) ); } // Checked: 2010-02-28 (RLVa-1.2.0a) | Added: RLVa-1.0.5a diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 5bb12beb74..f4bfb8e401 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1623,6 +1623,16 @@ function="ToggleControl" parameter="RestrainedLoveCanOOC" /> + + + +