[FIXED] An RLV_LOCK_ADD locked root folder is considered remove-locked when determining whether a folder is RLV_LOCK_REMOVE type locked
-> see FIRE-3485 --HG-- branch : RLVameow-7.2.2
parent
822845e78f
commit
51b95b190b
|
|
@ -307,9 +307,10 @@ enum ERlvExceptionCheck
|
|||
|
||||
enum ERlvLockMask
|
||||
{
|
||||
RLV_LOCK_ADD = 0x01,
|
||||
RLV_LOCK_REMOVE = 0x02,
|
||||
RLV_LOCK_ANY = RLV_LOCK_ADD | RLV_LOCK_REMOVE
|
||||
RLV_LOCK_NONE = 0x00,
|
||||
RLV_LOCK_ADD = 0x01,
|
||||
RLV_LOCK_REMOVE = 0x02,
|
||||
RLV_LOCK_ANY = RLV_LOCK_ADD | RLV_LOCK_REMOVE
|
||||
};
|
||||
|
||||
enum ERlvWearMask
|
||||
|
|
|
|||
|
|
@ -941,7 +941,7 @@ protected:
|
|||
|
||||
// Checked: 2011-03-28 (RLVa-1.3.0g) | Modified: RLVa-1.3.0g
|
||||
RlvFolderLocks::RlvFolderLocks()
|
||||
: m_fLookupDirty(false), m_fLockedRoot(false), m_cntLockAdd(0), m_cntLockRem(0)
|
||||
: m_fLookupDirty(false), m_RootLockType(RLV_LOCK_NONE), m_cntLockAdd(0), m_cntLockRem(0)
|
||||
{
|
||||
LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&RlvFolderLocks::onNeedsLookupRefresh, this));
|
||||
RlvInventory::instance().addSharedRootIDChangedCallback(boost::bind(&RlvFolderLocks::onNeedsLookupRefresh, this));
|
||||
|
|
@ -1193,7 +1193,7 @@ bool RlvFolderLocks::isLockedFolder(LLUUID idFolder, ERlvLockMask eLockTypeMask,
|
|||
idFolderCur = (pParent) ? pParent->getParentUUID() : idFolderRoot;
|
||||
}
|
||||
// If we didn't encounter an explicit deny lock with no exception then the folder is locked if the entire inventory is locked down
|
||||
return (m_fLockedRoot) && (eSourceTypeMask & ST_ROOTFOLDER) && (idsRlvObjRem.empty()) && (idsRlvObjAdd.empty());
|
||||
return (m_RootLockType & eLockTypeMask) && (eSourceTypeMask & ST_ROOTFOLDER) && (idsRlvObjRem.empty()) && (idsRlvObjAdd.empty());
|
||||
}
|
||||
|
||||
// Checked: 2010-11-30 (RLVa-1.3.0b) | Added: RLVa-1.3.0b
|
||||
|
|
@ -1209,7 +1209,7 @@ void RlvFolderLocks::refreshLockedLookups() const
|
|||
//
|
||||
// Refresh locked folders
|
||||
//
|
||||
m_fLockedRoot = false;
|
||||
m_RootLockType = RLV_LOCK_NONE;
|
||||
m_LockedFolderMap.clear();
|
||||
for (folderlock_list_t::const_iterator itFolderLock = m_FolderLocks.begin(); itFolderLock != m_FolderLocks.end(); ++itFolderLock)
|
||||
{
|
||||
|
|
@ -1223,8 +1223,8 @@ void RlvFolderLocks::refreshLockedLookups() const
|
|||
const LLViewerInventoryCategory* pFolder = lockedFolders.at(idxFolder);
|
||||
if (idFolderRoot != pFolder->getUUID())
|
||||
m_LockedFolderMap.insert(std::pair<LLUUID, const folderlock_descr_t*>(pFolder->getUUID(), pLockDescr));
|
||||
else
|
||||
m_fLockedRoot |= (SCOPE_SUBTREE == pLockDescr->eLockScope);
|
||||
else if (SCOPE_SUBTREE == pLockDescr->eLockScope)
|
||||
m_RootLockType |= (U32)pLockDescr->eLockType;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -376,11 +376,11 @@ protected:
|
|||
|
||||
// Cached item look-up variables
|
||||
typedef std::multimap<LLUUID, const folderlock_descr_t*> folderlock_map_t;
|
||||
mutable bool m_fLookupDirty;
|
||||
mutable bool m_fLockedRoot;
|
||||
mutable uuid_vec_t m_LockedAttachmentRem;
|
||||
mutable folderlock_map_t m_LockedFolderMap;
|
||||
mutable uuid_vec_t m_LockedWearableRem;
|
||||
mutable bool m_fLookupDirty;
|
||||
mutable U32 m_RootLockType;
|
||||
mutable uuid_vec_t m_LockedAttachmentRem;
|
||||
mutable folderlock_map_t m_LockedFolderMap;
|
||||
mutable uuid_vec_t m_LockedWearableRem;
|
||||
private:
|
||||
friend class LLSingleton<RlvFolderLocks>;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue