diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index c9e5394bc..deb25c74c 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -268,7 +268,7 @@ void LLInventoryObject::updateServer(BOOL) const llwarns << "LLInventoryObject::updateServer() called. Doesn't do anything." << llendl; } -inline +// inline void LLInventoryObject::correctInventoryName(std::string& name) { LLStringUtil::replaceNonstandardASCII(name, ' '); diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h index a88894da9..b3c141cfd 100644 --- a/indra/llinventory/llinventory.h +++ b/indra/llinventory/llinventory.h @@ -84,9 +84,13 @@ public: void setParent(const LLUUID& new_parent); void setType(LLAssetType::EType type); -private: +// [RLVa:KB] - Checked: 2014-01-07 (RLVa-1.4.10) // in place correction for inventory name string - void correctInventoryName(std::string& name); + static void correctInventoryName(std::string& name); +// [/RLVa:KB] +private: +// // in place correction for inventory name string +// void correctInventoryName(std::string& name); //-------------------------------------------------------------------- // File Support diff --git a/indra/newview/app_settings/settings_rlv.xml b/indra/newview/app_settings/settings_rlv.xml index 09b3d15fd..c0bd30a1a 100644 --- a/indra/newview/app_settings/settings_rlv.xml +++ b/indra/newview/app_settings/settings_rlv.xml @@ -11,7 +11,7 @@ Type Boolean Value - 1 + 1 RestrainedLoveDebug @@ -22,7 +22,7 @@ Type Boolean Value - 0 + 0 RestrainedLoveCanOOC @@ -33,7 +33,7 @@ Type Boolean Value - 1 + 1 RestrainedLoveForbidGiveToRLV @@ -44,7 +44,7 @@ Type Boolean Value - 0 + 0 RestrainedLoveNoSetEnv @@ -55,7 +55,7 @@ Type Boolean Value - 0 + 0 RestrainedLoveReplaceWhenFolderBeginsWith @@ -77,7 +77,7 @@ Type Boolean Value - 1 + 1 RestrainedLoveStackWhenFolderBeginsWith @@ -99,7 +99,7 @@ Type Boolean Value - 0 + 0 RLVaEnableCompositeFolders @@ -110,7 +110,7 @@ Type Boolean Value - 0 + 0 RLVaEnableLegacyNaming @@ -121,7 +121,7 @@ Type Boolean Value - 1 + 1 RLVaEnableSharedWear @@ -132,7 +132,7 @@ Type Boolean Value - 1 + 1 RLVaHideLockedLayers @@ -143,7 +143,7 @@ Type Boolean Value - 0 + 0 RLVaHideLockedAttachments @@ -154,7 +154,7 @@ Type Boolean Value - 0 + 0 RLVaSharedInvAutoRename @@ -165,7 +165,7 @@ Type Boolean Value - 1 + 1 RLVaShowAssertionFailures @@ -176,7 +176,7 @@ Type Boolean Value - 1 + 1 RLVaShowNameTags @@ -187,7 +187,7 @@ Type Boolean Value - 0 + 0 RLVaTopLevelMenu @@ -198,7 +198,7 @@ Type Boolean Value - 0 + 0 RLVaWearReplaceUnlocked @@ -209,7 +209,7 @@ Type Boolean Value - 0 + 0 ForceInitialCOFDelay diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index d08bd8a36..f1066076a 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2191,8 +2191,8 @@ void LLAgentCamera::changeCameraToMouselook(BOOL animate) //gViewerWindow->stopGrab(); LLSelectMgr::getInstance()->deselectAll(); - gViewerWindow->hideCursor(); - gViewerWindow->moveCursorToCenter(); +// gViewerWindow->hideCursor(); +// gViewerWindow->moveCursorToCenter(); if (mCameraMode != CAMERA_MODE_MOUSELOOK) { diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 9bb230124..9b0132be7 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -52,7 +52,7 @@ #include "llfloatercustomize.h" -// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a) +// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1) #include "rlvhandler.h" #include "rlvinventory.h" #include "llattachmentsmgr.h" @@ -65,7 +65,7 @@ LLAgentWearables gAgentWearables; BOOL LLAgentWearables::mInitialWearablesUpdateReceived = FALSE; -// [SL:KB] - Patch: Appearance-InitialWearablesLoadedCallback | Checked: 2010-08-14 (Catznip-3.0.0a) | Added: Catznip-2.1.1d +// [SL:KB] - Patch: Appearance-InitialWearablesLoadedCallback | Checked: 2010-08-14 (Catznip-2.1) bool LLAgentWearables::mInitialWearablesLoaded = false; // [/SL:KB] @@ -829,7 +829,7 @@ const LLUUID LLAgentWearables::getWearableItemID(LLWearableType::EType type, U32 return LLUUID(); } -// [RLVa:KB] - Checked: 2011-03-31 (RLVa-1.3.0f) | Added: RLVa-1.3.0f +// [RLVa:KB] - Checked: 2011-03-31 (RLVa-1.3.0) void LLAgentWearables::getWearableItemIDs(uuid_vec_t& idItems) const { for (wearableentry_map_t::const_iterator itWearableType = mWearableDatas.begin(); @@ -844,8 +844,8 @@ void LLAgentWearables::getWearableItemIDs(LLWearableType::EType eType, uuid_vec_ wearableentry_map_t::const_iterator itWearableType = mWearableDatas.find(eType); if (mWearableDatas.end() != itWearableType) { - for (wearableentry_vec_t::const_iterator itWearable = itWearableType->second.begin(), endWearable = itWearableType->second.end(); - itWearable != endWearable; ++itWearable) + for (wearableentry_vec_t::const_iterator itWearable = itWearableType->second.begin(); + itWearable != itWearableType->second.end(); ++itWearable) { LLViewerWearable* wearable = dynamic_cast(*itWearable); if(wearable) @@ -1402,7 +1402,7 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it // Start rendering & update the server mWearablesLoaded = TRUE; checkWearablesLoaded(); -// [SL:KB] - Patch: Appearance-InitialWearablesLoadedCallback | Checked: 2010-09-22 (Catznip-3.0.0a) | Modified: Catznip-2.2.0a +// [SL:KB] - Patch: Appearance-InitialWearablesLoadedCallback | Checked: 2010-09-22 (Catznip-2.2) if (!mInitialWearablesLoaded) { mInitialWearablesLoaded = true; @@ -1830,7 +1830,7 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner()); msg->addU8Fast(_PREHASH_AttachmentPt, replace? 0 : ATTACHMENT_ADD); // Wear at the previous or default attachment point -// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1b) | Added: RLVa-1.3.1b +// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1) if ( (rlv_handler_t::isEnabled()) && (sInitialAttachmentsRequested) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) ) { RlvAttachmentLockWatchdog::instance().onWearAttachment(item, RLV_WEAR_ADD); @@ -1847,7 +1847,7 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra } } -// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1b) | Added: RLVa-1.3.1b +// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1) sInitialAttachmentsRequested = true; // [/RLVa:KB] } @@ -2076,7 +2076,7 @@ boost::signals2::connection LLAgentWearables::addLoadedCallback(loaded_callback_ return mLoadedSignal.connect(cb); } -// [SL:KB] - Patch: Appearance-InitialWearablesLoadedCallback | Checked: 2010-08-14 (Catznip-3.0.0a) | Added: Catznip-2.1.1d +// [SL:KB] - Patch: Appearance-InitialWearablesLoadedCallback | Checked: 2010-08-14 (Catznip-2.1) boost::signals2::connection LLAgentWearables::addInitialWearablesLoadedCallback(loaded_callback_t cb) { return mInitialWearablesLoadedSignal.connect(cb); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 48abaaf29..643fe5f0e 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3014,10 +3014,10 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id) LLInventoryModel::EXCLUDE_TRASH); for (S32 i=0; igetIsLinkType() && item->getLinkedUUID() == item_id) { -// [RLVa:KB] - Checked: 2013-02-12 (RLVa-1.4.8) #if LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG // NOTE-RLVa: debug-only, can be removed down the line if (rlv_handler_t::isEnabled()) @@ -3025,10 +3025,14 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id) RLV_ASSERT(rlvPredCanRemoveItem(item)); } #endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG -// [/RLVa:KB] - gInventory.purgeObject(item->getUUID()); } +// [/RLVa:KB] +// const LLInventoryItem* item = item_array.get(i).get(); +// if (item->getIsLinkType() && item->getLinkedUUID() == item_id) +// { +// gInventory.purgeObject(item->getUUID()); +// } } } diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index d47f5fb43..663a40f03 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -62,8 +62,9 @@ #include "hippogridmanager.h" -// [RLVa:KB] -#include "rlvhandler.h" +// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.4.0) +#include "rlvactions.h" +#include "rlvhelper.h" // [/RLVa:KB] #if LL_WINDOWS @@ -168,15 +169,7 @@ LLFloaterAbout::LLFloaterAbout() // Position LLViewerRegion* region = gAgent.getRegion(); -// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-04 (RLVa-1.0.0a) - if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) - { - support.append(RlvStrings::getString(RLV_STRING_HIDDEN)); - support.append("\n\n"); - } - else if (region) -// [/RLVa:KB] -// if (region) + if (region) { LLStyleSP server_link_style(new LLStyle); server_link_style->setVisible(true); @@ -184,6 +177,9 @@ LLFloaterAbout::LLFloaterAbout() server_link_style->setLinkHREF(region->getCapability("ServerReleaseNotes")); server_link_style->setColor(gSavedSettings.getColor4("HTMLLinkColor")); +// [RLVa:KB] - Checked: 2014-02-24 (RLVa-1.4.10) + if (RlvActions::canShowLocation()) + { const LLVector3d &pos = gAgent.getPositionGlobal(); LLUIString pos_text = getString("you_are_at"); pos_text.setArg("[POSITION]", @@ -204,6 +200,10 @@ LLFloaterAbout::LLFloaterAbout() support.append(buffer); support.append(")"); } + } + else + support.append(RlvStrings::getString(RLV_STRING_HIDDEN_REGION)); +// [/RLVa:KN] support.append("\n"); support.append(gLastVersionChannel); @@ -265,6 +265,9 @@ LLFloaterAbout::LLFloaterAbout() getWindow()->setCursor(UI_CURSOR_ARROW); #endif +// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.2.0) + support.append("RLV Version: " + (RlvActions::isRlvEnabled()) ? RlvStrings::getVersionAbout() : "(disabled)"); +// [/RLVa:KB] support.append("OpenGL Version: "); support.append( (const char*) glGetString(GL_VERSION) ); support.append("\n\n"); diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp index 23f297b95..07629eefc 100644 --- a/indra/newview/lltoolgun.cpp +++ b/indra/newview/lltoolgun.cpp @@ -60,10 +60,17 @@ LLToolGun::LLToolGun( LLToolComposite* composite ) void LLToolGun::handleSelect() { - gViewerWindow->hideCursor(); - gViewerWindow->moveCursorToCenter(); - gViewerWindow->getWindow()->setMouseClipping(TRUE); - mIsSelected = TRUE; +// [RLVa:KB] - Checked: 2014-02-24 (RLVa-1.4.10) + if (gFocusMgr.getAppHasFocus()) + { +// [/RLVa:KB] + gViewerWindow->hideCursor(); + gViewerWindow->moveCursorToCenter(); + gViewerWindow->getWindow()->setMouseClipping(TRUE); + mIsSelected = TRUE; +// [RLVa:KB] - Checked: 2014-02-24 (RLVa-1.4.10) + } +// [/RLVa:KB] } void LLToolGun::handleDeselect() diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 7a3893e31..a2adc49a9 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1494,7 +1494,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& bool busy = gAgent.getBusy(); -// [RLVa:KB] - Checked: 2010-09-23 (RLVa-1.2.1e) | Added: RLVa-1.2.1e +// [RLVa:KB] - Checked: 2010-09-23 (RLVa-1.2.1) bool fRlvNotifyAccepted = false; // [/RLVa:KB] switch(button) @@ -1505,25 +1505,23 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& // group_notice_inventory is 1 greater than the offer integer value. // [RLVa:KB] - Checked: 2010-09-23 (RLVa-1.2.1e) | Modified: RLVa-1.2.1e - // Only change the inventory offer's destination folder to the shared root if: + // Only treat the offer as 'Give to #RLV' if: // - the user has enabled the feature // - the inventory offer came from a script (and specifies a folder) // - the name starts with the prefix - mDesc format: '[OBJECTNAME]' ( http://slurl.com/... ) - if ( (rlv_handler_t::isEnabled()) && - (IM_TASK_INVENTORY_OFFERED == mIM) && (LLAssetType::AT_CATEGORY == mType) && (mDesc.find(RLV_PUTINV_PREFIX) == 1) ) + if ( (rlv_handler_t::isEnabled()) && (IM_TASK_INVENTORY_OFFERED == mIM) && (LLAssetType::AT_CATEGORY == mType) && (mDesc.find(RLV_PUTINV_PREFIX) == 1) ) { fRlvNotifyAccepted = true; if (!RlvSettings::getForbidGiveToRLV()) { - const LLViewerInventoryCategory* pRlvRoot = RlvInventory::instance().getSharedRoot(); - if (pRlvRoot) - { - fRlvNotifyAccepted = false; // "accepted_in_rlv" is sent from RlvGiveToRLVTaskOffer *after* we have the folder - mFolderID = pRlvRoot->getUUID(); + const LLUUID& idRlvRoot = RlvInventory::instance().getSharedRootID(); + if (idRlvRoot.notNull()) + mFolderID = idRlvRoot; - RlvGiveToRLVTaskOffer* pOfferObserver = new RlvGiveToRLVTaskOffer(mTransactionID); - gInventory.addObserver(pOfferObserver); - } + fRlvNotifyAccepted = false; // "accepted_in_rlv" is sent from RlvGiveToRLVTaskOffer *after* we have the folder + + RlvGiveToRLVTaskOffer* pOfferObserver = new RlvGiveToRLVTaskOffer(mTransactionID); + gInventory.addObserver(pOfferObserver); } } // [/RLVa:KB] @@ -1536,7 +1534,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& // send the message msg->sendReliable(mHost); -// [RLVa:KB] - Checked: 2010-09-23 (RLVa-1.2.1e) | Added: RLVa-1.2.1e +// [RLVa:KB] - Checked: 2010-09-23 (RLVa-1.2.1) if (fRlvNotifyAccepted) { std::string::size_type idxToken = mDesc.find("' ( http://"); @@ -1563,9 +1561,8 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& // This is an offer from an agent. In this case, the back // end has already copied the items into your inventory, // so we can fetch it out of our inventory. -// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.2.0e) | Modified: RLVa-1.2.0e - if ( (rlv_handler_t::isEnabled()) && (!RlvSettings::getForbidGiveToRLV()) && (LLAssetType::AT_CATEGORY == mType) && - (RlvInventory::instance().getSharedRoot()) && (mDesc.find(RLV_PUTINV_PREFIX) == 0) ) +// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.2.0) + if ( (rlv_handler_t::isEnabled()) && (!RlvSettings::getForbidGiveToRLV()) && (LLAssetType::AT_CATEGORY == mType) && (mDesc.find(RLV_PUTINV_PREFIX) == 0) ) { RlvGiveToRLVAgentOffer* pOfferObserver = new RlvGiveToRLVAgentOffer(mObjectID); pOfferObserver->startFetch(); @@ -4006,10 +4003,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) // Filtering "rules": // avatar => filter all avie text (unless it's this avie or they're an exemption) - // objects => filter everything except attachments this avie owns (never filter llOwnerSay chat) + // objects => filter everything except attachments this avie owns (never filter llOwnerSay or llRegionSayTo chat) if ( ( (CHAT_SOURCE_AGENT == chat.mSourceType) && (from_id != gAgent.getID()) ) || ( (CHAT_SOURCE_OBJECT == chat.mSourceType) && ((!is_owned_by_me) || (!is_attachment)) && - (CHAT_TYPE_OWNER != chat.mChatType) ) ) + (CHAT_TYPE_OWNER != chat.mChatType) && (CHAT_TYPE_DIRECT != chat.mChatType) ) ) { bool fIsEmote = RlvUtil::isEmote(mesg); if ((!fIsEmote) && diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 79d6ad670..560f150c8 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -660,7 +660,17 @@ void LLPipeline::resizeScreenTexture() GLuint resX = gViewerWindow->getWorldViewWidthRaw(); GLuint resY = gViewerWindow->getWorldViewHeightRaw(); - if ((resX != mScreen.getWidth()) || (resY != mScreen.getHeight())) +// [RLVa:KB] - Checked: 2014-02-23 (RLVa-1.4.10) + U32 resMod = gSavedSettings.getU32("RenderResolutionDivisor"), resAdjustedX = resX, resAdjustedY = resY; + if ( (resMod > 1) && (resMod < resX) && (resMod < resY) ) + { + resAdjustedX /= resMod; + resAdjustedY /= resMod; + } + + if ( (resAdjustedX != mScreen.getWidth()) || (resAdjustedY != mScreen.getHeight()) ) +// [/RLVa:KB] +// if ((resX != mScreen.getWidth()) || (resY != mScreen.getHeight())) { releaseScreenBuffers(); if (!allocateScreenBuffer(resX,resY)) diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index 284813638..2ea2646cb 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -91,6 +91,12 @@ bool RlvActions::canStand() return (!gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || ((isAgentAvatarValid()) && (!gAgentAvatarp->isSitting())); } +// Checked: 2014-02-24 (RLVa-1.4.10) +bool RlvActions::canShowLocation() +{ + return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC); +} + // Checked: 2013-05-10 (RLVa-1.4.9) bool RlvActions::hasBehaviour(ERlvBehaviour eBhvr) { diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h index 9b77ed4b6..58d90780a 100644 --- a/indra/newview/rlvactions.h +++ b/indra/newview/rlvactions.h @@ -79,6 +79,11 @@ public: */ static bool canStand(); + /* + * Returns true if the user can see their in-world location + */ + static bool canShowLocation(); + // ================ // Helper functions // ================ diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index bd4326680..e736193ef 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -392,7 +392,9 @@ void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy) if (LLAvatarNameCache::get(idAgents[idxAgent], &avName)) { const std::string& strDisplayName = avName.mDisplayName; + bool fFilterDisplay = (strDisplayName.length() > 2); const std::string& strLegacyName = avName.getLegacyName(); + fFilterLegacy &= (strLegacyName.length() > 2); const std::string& strAnonym = RlvStrings::getAnonym(avName); // If the display name is a subset of the legacy name we need to filter that first, otherwise it's the other way around @@ -400,11 +402,13 @@ void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy) { if (fFilterLegacy) boost::ireplace_all(strUTF8Text, strLegacyName, strAnonym); - boost::ireplace_all(strUTF8Text, strDisplayName, strAnonym); + if (fFilterDisplay) + boost::ireplace_all(strUTF8Text, strDisplayName, strAnonym); } else { - boost::ireplace_all(strUTF8Text, strDisplayName, strAnonym); + if (fFilterDisplay) + boost::ireplace_all(strUTF8Text, strDisplayName, strAnonym); if (fFilterLegacy) boost::ireplace_all(strUTF8Text, strLegacyName, strAnonym); } @@ -682,7 +686,7 @@ bool rlvPredCanNotWearItem(const LLViewerInventoryItem* pItem, ERlvWearMask eWea } // Checked: 2010-03-22 (RLVa-1.2.0c) | Added: RLVa-1.2.0a -bool rlvPredCanRemoveItem(const LLInventoryItem* pItem) +bool rlvPredCanRemoveItem(const LLViewerInventoryItem* pItem) { if ( (pItem) && (RlvForceWear::isWearableItem(pItem)) ) { @@ -705,7 +709,7 @@ bool rlvPredCanRemoveItem(const LLInventoryItem* pItem) } // Checked: 2010-03-22 (RLVa-1.2.0c) | Added: RLVa-1.2.0a -bool rlvPredCanNotRemoveItem(const LLInventoryItem* pItem) +bool rlvPredCanNotRemoveItem(const LLViewerInventoryItem* pItem) { return !rlvPredCanRemoveItem(pItem); } diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index 2af64c274..a4411f146 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -243,8 +243,8 @@ protected: bool rlvPredCanWearItem(const LLViewerInventoryItem* pItem, ERlvWearMask eWearMask); bool rlvPredCanNotWearItem(const LLViewerInventoryItem* pItem, ERlvWearMask eWearMask); -bool rlvPredCanRemoveItem(const LLInventoryItem* pItem); -bool rlvPredCanNotRemoveItem(const LLInventoryItem* pItem); +bool rlvPredCanRemoveItem(const LLViewerInventoryItem* pItem); +bool rlvPredCanNotRemoveItem(const LLViewerInventoryItem* pItem); struct RlvPredCanWearItem { @@ -262,6 +262,18 @@ protected: ERlvWearMask m_eWearMask; }; +struct RlvPredCanRemoveItem +{ + RlvPredCanRemoveItem() {} + bool operator()(const LLViewerInventoryItem* pItem) { return rlvPredCanRemoveItem(pItem); } +}; + +struct RlvPredCanNotRemoveItem +{ + RlvPredCanNotRemoveItem() {} + bool operator()(const LLViewerInventoryItem* pItem) { return rlvPredCanNotRemoveItem(pItem); } +}; + struct RlvPredIsEqualOrLinkedItem { RlvPredIsEqualOrLinkedItem(const LLViewerInventoryItem* pItem) : m_pItem(pItem) {} diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 72c504ff8..3aa90e168 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -57,14 +57,14 @@ // Version of the specifcation we support const S32 RLV_VERSION_MAJOR = 2; -const S32 RLV_VERSION_MINOR = 7; +const S32 RLV_VERSION_MINOR = 8; const S32 RLV_VERSION_PATCH = 0; const S32 RLV_VERSION_BUILD = 0; // Implementation version const S32 RLVa_VERSION_MAJOR = 1; const S32 RLVa_VERSION_MINOR = 4; -const S32 RLVa_VERSION_PATCH = 9; +const S32 RLVa_VERSION_PATCH = 10; const S32 RLVa_VERSION_BUILD = 0; // Uncomment before a final release @@ -101,6 +101,8 @@ const S32 RLVa_VERSION_BUILD = 0; #define RLV_ROOT_FOLDER "#RLV" #define RLV_CMD_PREFIX '@' #define RLV_PUTINV_PREFIX "#RLV/~" +#define RLV_PUTINV_SEPARATOR "/" +#define RLV_PUTINV_MAXDEPTH 4 #define RLV_SETROT_OFFSET F_PI_BY_TWO // @setrot is off by 90° with the rest of SL #define RLV_STRINGS_FILE "rlva_strings.xml" diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 9c5b0c332..143ff6903 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -67,6 +67,34 @@ static bool rlvParseNotifyOption(const std::string& strOption, S32& nChannel, st return (itTok == tokens.end()); } +// Checked: 2014-02-26 (RLVa-1.4.10) +static bool rlvParseGetStatusOption(const std::string& strOption, std::string& strFilter, std::string& strSeparator) +{ + // @getstatus:[