From 2692e4c3aecf13366017a3cccb4b79cbc057f772 Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Sun, 4 Aug 2024 21:21:04 +0200 Subject: [PATCH 1/5] Make area search menu and pathfinding objects floater visually respect RLV restrictions, also add missing @edit condition to blocking delete and return. --- indra/newview/fsareasearch.cpp | 53 +++++++++++++++++++ indra/newview/fsareasearch.h | 1 + indra/newview/fsareasearchmenu.cpp | 11 ++++ indra/newview/fsareasearchmenu.h | 1 + indra/newview/llfloaterpathfindingobjects.cpp | 26 +++++++++ indra/newview/rlvcommon.cpp | 6 +-- .../default/xui/en/menu_fs_area_search.xml | 42 +++++++++++++++ 7 files changed, 137 insertions(+), 3 deletions(-) diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index aeecbe4734..29e56b129a 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -1626,6 +1626,59 @@ void FSPanelAreaSearchList::updateName(const LLUUID& id, const std::string& name } } +bool FSPanelAreaSearchList::onContextMenuItemEnableRLV(const LLSD& userdata) +{ + if (!RlvActions::isRlvEnabled()) + { + return true; + } + + if (RlvActions::hasBehaviour(RLV_BHVR_INTERACT)) + { + return false; + } + + const std::string& parameter = userdata.asStringRef(); + + std::vector selected = mResultList->getAllSelected(); + + for (const auto item : selected) + { + const LLUUID& object_id = item->getUUID(); + LLViewerObject* objectp = gObjectList.findObject(object_id); + if (!objectp) + { + return false; + } + + if (parameter == "delete") + { + if (!rlvCanDeleteOrReturn(objectp)) + { + return false; + } + } + else if (parameter == "touch") + { + if (!RlvActions::canTouch(objectp)) return false; + } + else if (parameter == "edit") + { + if (!RlvActions::canEdit(objectp)) return false; + } + else if (parameter == "sit") + { + if (!RlvActions::canSit(objectp)) return false; + } + else if (parameter == "teleport") + { + if (!RlvActions::canTeleportToLocal(objectp->getPositionGlobal())) return false; + } + } + + return true; +} + bool FSPanelAreaSearchList::onContextMenuItemEnable(const LLSD& userdata) { const std::string& parameter = userdata.asStringRef(); diff --git a/indra/newview/fsareasearch.h b/indra/newview/fsareasearch.h index 44a67c0f87..8b768a5919 100644 --- a/indra/newview/fsareasearch.h +++ b/indra/newview/fsareasearch.h @@ -305,6 +305,7 @@ private: bool onContextMenuItemClick(const LLSD& userdata); bool onContextMenuItemEnable(const LLSD& userdata); + bool onContextMenuItemEnableRLV(const LLSD& userdata); void onColumnVisibilityChecked(const LLSD& userdata); bool onEnableColumnVisibilityChecked(const LLSD& userdata); diff --git a/indra/newview/fsareasearchmenu.cpp b/indra/newview/fsareasearchmenu.cpp index bbef3c73ed..f47159dd06 100644 --- a/indra/newview/fsareasearchmenu.cpp +++ b/indra/newview/fsareasearchmenu.cpp @@ -41,6 +41,7 @@ LLContextMenu* FSAreaSearchMenu::createMenu() registrar.add("AreaSearch.Action", boost::bind(&FSAreaSearchMenu::onContextMenuItemClick, this, _2)); enable_registrar.add("AreaSearch.Enable", boost::bind(&FSAreaSearchMenu::onContextMenuItemEnable, this, _2)); + enable_registrar.add("AreaSearch.RLV", boost::bind(&FSAreaSearchMenu::onContextMenuItemEnableRLV, this, _2)); return createFromFile("menu_fs_area_search.xml"); } @@ -63,3 +64,13 @@ bool FSAreaSearchMenu::onContextMenuItemEnable(const LLSD& userdata) } return false; } + +bool FSAreaSearchMenu::onContextMenuItemEnableRLV(const LLSD& userdata) +{ + FSAreaSearch* search = LLFloaterReg::findTypedInstance("area_search"); + if (search && search->getPanelList()) + { + return search->getPanelList()->onContextMenuItemEnableRLV(userdata); + } + return false; +} diff --git a/indra/newview/fsareasearchmenu.h b/indra/newview/fsareasearchmenu.h index 2853c015f7..014691e7de 100644 --- a/indra/newview/fsareasearchmenu.h +++ b/indra/newview/fsareasearchmenu.h @@ -37,6 +37,7 @@ public: private: void onContextMenuItemClick(const LLSD& userdata); bool onContextMenuItemEnable(const LLSD& userdata); + bool onContextMenuItemEnableRLV(const LLSD& userdata); }; extern FSAreaSearchMenu gFSAreaSearchMenu; diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index b264df085a..d4d5808e46 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -64,6 +64,9 @@ #include "v3math.h" #include "v4color.h" +#include "rlvactions.h" // Respect RLVa restrictions +#include "rlvcommon.h" // Respect RLVa restrictions + #define DEFAULT_BEACON_WIDTH 6 //--------------------------------------------------------------------------- @@ -819,6 +822,29 @@ void LLFloaterPathfindingObjects::updateStateOnActionControls() int numSelectedItems = mObjectsScrollList->getNumSelected(); bool isEditEnabled = (numSelectedItems > 0); + // Respect RLVa restrictions + if (RlvActions::isRlvEnabled()) + { + if ( + !rlvCanDeleteOrReturn() + || RlvActions::hasBehaviour(RLV_BHVR_FARTOUCH) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHALL) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHWORLD) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHME) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHTHIS) + || RlvActions::hasBehaviour(RLV_BHVR_INTERACT) + ) + { + isEditEnabled = false; + } + + if (RlvActions::hasBehaviour(RLV_BHVR_TPLOCAL)) + { + numSelectedItems = 0; + } + } + // + mShowBeaconCheckBox->setEnabled(isEditEnabled); mTakeButton->setEnabled(isEditEnabled && visible_take_object()); mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 1d93c91a32..3bc91a7aad 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -787,16 +787,16 @@ bool rlvMenuEnableIfNot(const LLSD& sdParam) // Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0 bool rlvCanDeleteOrReturn(const LLViewerObject* pObj) { - // Block if: @rez=n restricted and owned by us or a group *or* @unsit=n restricted and being sat on by us + // Block if: @rez=n or @edit=n restricted and owned by us or a group *or* @unsit=n restricted and being sat on by us return - ( (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permGroupOwner())) ) && + ( (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT) && !gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permGroupOwner())) ) && ( (!gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (!isAgentAvatarValid()) || (!pObj->getRootEdit()->isChild(gAgentAvatarp)) ); } // Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0 bool rlvCanDeleteOrReturn() { - if ( (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) ) + if ( (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) ) { struct RlvCanDeleteOrReturn : public LLSelectedObjectFunctor { diff --git a/indra/newview/skins/default/xui/en/menu_fs_area_search.xml b/indra/newview/skins/default/xui/en/menu_fs_area_search.xml index 2215bfece5..e820312582 100644 --- a/indra/newview/skins/default/xui/en/menu_fs_area_search.xml +++ b/indra/newview/skins/default/xui/en/menu_fs_area_search.xml @@ -12,6 +12,9 @@ + + + + + + + + + + + + @@ -106,6 +142,12 @@ + + From 544a5164801348827286e8b4d399dfbcc8998670 Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Sun, 4 Aug 2024 22:57:37 +0200 Subject: [PATCH 2/5] Apparently, things are never as easy as they at first seem. This reverts commit 2692e4c3aecf13366017a3cccb4b79cbc057f772. --- indra/newview/fsareasearch.cpp | 53 ------------------- indra/newview/fsareasearch.h | 1 - indra/newview/fsareasearchmenu.cpp | 11 ---- indra/newview/fsareasearchmenu.h | 1 - indra/newview/llfloaterpathfindingobjects.cpp | 26 --------- indra/newview/rlvcommon.cpp | 6 +-- .../default/xui/en/menu_fs_area_search.xml | 42 --------------- 7 files changed, 3 insertions(+), 137 deletions(-) diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index 29e56b129a..aeecbe4734 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -1626,59 +1626,6 @@ void FSPanelAreaSearchList::updateName(const LLUUID& id, const std::string& name } } -bool FSPanelAreaSearchList::onContextMenuItemEnableRLV(const LLSD& userdata) -{ - if (!RlvActions::isRlvEnabled()) - { - return true; - } - - if (RlvActions::hasBehaviour(RLV_BHVR_INTERACT)) - { - return false; - } - - const std::string& parameter = userdata.asStringRef(); - - std::vector selected = mResultList->getAllSelected(); - - for (const auto item : selected) - { - const LLUUID& object_id = item->getUUID(); - LLViewerObject* objectp = gObjectList.findObject(object_id); - if (!objectp) - { - return false; - } - - if (parameter == "delete") - { - if (!rlvCanDeleteOrReturn(objectp)) - { - return false; - } - } - else if (parameter == "touch") - { - if (!RlvActions::canTouch(objectp)) return false; - } - else if (parameter == "edit") - { - if (!RlvActions::canEdit(objectp)) return false; - } - else if (parameter == "sit") - { - if (!RlvActions::canSit(objectp)) return false; - } - else if (parameter == "teleport") - { - if (!RlvActions::canTeleportToLocal(objectp->getPositionGlobal())) return false; - } - } - - return true; -} - bool FSPanelAreaSearchList::onContextMenuItemEnable(const LLSD& userdata) { const std::string& parameter = userdata.asStringRef(); diff --git a/indra/newview/fsareasearch.h b/indra/newview/fsareasearch.h index 8b768a5919..44a67c0f87 100644 --- a/indra/newview/fsareasearch.h +++ b/indra/newview/fsareasearch.h @@ -305,7 +305,6 @@ private: bool onContextMenuItemClick(const LLSD& userdata); bool onContextMenuItemEnable(const LLSD& userdata); - bool onContextMenuItemEnableRLV(const LLSD& userdata); void onColumnVisibilityChecked(const LLSD& userdata); bool onEnableColumnVisibilityChecked(const LLSD& userdata); diff --git a/indra/newview/fsareasearchmenu.cpp b/indra/newview/fsareasearchmenu.cpp index f47159dd06..bbef3c73ed 100644 --- a/indra/newview/fsareasearchmenu.cpp +++ b/indra/newview/fsareasearchmenu.cpp @@ -41,7 +41,6 @@ LLContextMenu* FSAreaSearchMenu::createMenu() registrar.add("AreaSearch.Action", boost::bind(&FSAreaSearchMenu::onContextMenuItemClick, this, _2)); enable_registrar.add("AreaSearch.Enable", boost::bind(&FSAreaSearchMenu::onContextMenuItemEnable, this, _2)); - enable_registrar.add("AreaSearch.RLV", boost::bind(&FSAreaSearchMenu::onContextMenuItemEnableRLV, this, _2)); return createFromFile("menu_fs_area_search.xml"); } @@ -64,13 +63,3 @@ bool FSAreaSearchMenu::onContextMenuItemEnable(const LLSD& userdata) } return false; } - -bool FSAreaSearchMenu::onContextMenuItemEnableRLV(const LLSD& userdata) -{ - FSAreaSearch* search = LLFloaterReg::findTypedInstance("area_search"); - if (search && search->getPanelList()) - { - return search->getPanelList()->onContextMenuItemEnableRLV(userdata); - } - return false; -} diff --git a/indra/newview/fsareasearchmenu.h b/indra/newview/fsareasearchmenu.h index 014691e7de..2853c015f7 100644 --- a/indra/newview/fsareasearchmenu.h +++ b/indra/newview/fsareasearchmenu.h @@ -37,7 +37,6 @@ public: private: void onContextMenuItemClick(const LLSD& userdata); bool onContextMenuItemEnable(const LLSD& userdata); - bool onContextMenuItemEnableRLV(const LLSD& userdata); }; extern FSAreaSearchMenu gFSAreaSearchMenu; diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index d4d5808e46..b264df085a 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -64,9 +64,6 @@ #include "v3math.h" #include "v4color.h" -#include "rlvactions.h" // Respect RLVa restrictions -#include "rlvcommon.h" // Respect RLVa restrictions - #define DEFAULT_BEACON_WIDTH 6 //--------------------------------------------------------------------------- @@ -822,29 +819,6 @@ void LLFloaterPathfindingObjects::updateStateOnActionControls() int numSelectedItems = mObjectsScrollList->getNumSelected(); bool isEditEnabled = (numSelectedItems > 0); - // Respect RLVa restrictions - if (RlvActions::isRlvEnabled()) - { - if ( - !rlvCanDeleteOrReturn() - || RlvActions::hasBehaviour(RLV_BHVR_FARTOUCH) - || RlvActions::hasBehaviour(RLV_BHVR_TOUCHALL) - || RlvActions::hasBehaviour(RLV_BHVR_TOUCHWORLD) - || RlvActions::hasBehaviour(RLV_BHVR_TOUCHME) - || RlvActions::hasBehaviour(RLV_BHVR_TOUCHTHIS) - || RlvActions::hasBehaviour(RLV_BHVR_INTERACT) - ) - { - isEditEnabled = false; - } - - if (RlvActions::hasBehaviour(RLV_BHVR_TPLOCAL)) - { - numSelectedItems = 0; - } - } - // - mShowBeaconCheckBox->setEnabled(isEditEnabled); mTakeButton->setEnabled(isEditEnabled && visible_take_object()); mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 3bc91a7aad..1d93c91a32 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -787,16 +787,16 @@ bool rlvMenuEnableIfNot(const LLSD& sdParam) // Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0 bool rlvCanDeleteOrReturn(const LLViewerObject* pObj) { - // Block if: @rez=n or @edit=n restricted and owned by us or a group *or* @unsit=n restricted and being sat on by us + // Block if: @rez=n restricted and owned by us or a group *or* @unsit=n restricted and being sat on by us return - ( (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT) && !gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permGroupOwner())) ) && + ( (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permGroupOwner())) ) && ( (!gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (!isAgentAvatarValid()) || (!pObj->getRootEdit()->isChild(gAgentAvatarp)) ); } // Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0 bool rlvCanDeleteOrReturn() { - if ( (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) ) + if ( (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) ) { struct RlvCanDeleteOrReturn : public LLSelectedObjectFunctor { diff --git a/indra/newview/skins/default/xui/en/menu_fs_area_search.xml b/indra/newview/skins/default/xui/en/menu_fs_area_search.xml index e820312582..2215bfece5 100644 --- a/indra/newview/skins/default/xui/en/menu_fs_area_search.xml +++ b/indra/newview/skins/default/xui/en/menu_fs_area_search.xml @@ -12,9 +12,6 @@ - - - - - - - - - - - - @@ -142,12 +106,6 @@ - - From 61eae62a84e7ad5777e1392b82b08926eb803a66 Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Mon, 5 Aug 2024 12:53:51 +0200 Subject: [PATCH 3/5] Make area search menu and pathfinding objects floater visually respect RLV restrictions, also add missing @edit condition to blocking delete and return. --- indra/newview/fsareasearch.cpp | 78 +++++++++++++++++++ indra/newview/fsareasearch.h | 1 + indra/newview/fsareasearchmenu.cpp | 11 +++ indra/newview/fsareasearchmenu.h | 1 + .../newview/llfloaterpathfindinglinksets.cpp | 26 +++++++ indra/newview/llfloaterpathfindingobjects.cpp | 26 +++++++ indra/newview/rlvcommon.cpp | 6 +- .../default/xui/en/menu_fs_area_search.xml | 33 ++++++++ 8 files changed, 179 insertions(+), 3 deletions(-) diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index aeecbe4734..fe3bf53fdf 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -1659,6 +1659,80 @@ bool FSPanelAreaSearchList::onContextMenuItemEnable(const LLSD& userdata) } } +bool FSPanelAreaSearchList::onContextMenuItemVisibleRLV(const LLSD& userdata) +{ + if (!RlvActions::isRlvEnabled()) + { + return true; + } + + if (RlvActions::hasBehaviour(RLV_BHVR_INTERACT)) + { + return false; + } + + const std::string& parameter = userdata.asStringRef(); + std::vector behavs; + LLStringUtil::getTokens(parameter, behavs, "|"); + + if (std::find(behavs.begin(), behavs.end(), "delete") != behavs.end()) + { + if (!rlvCanDeleteOrReturn()) + { + return false; + } + } + + std::vector selected = mResultList->getAllSelected(); + for (const auto item : selected) + { + const LLUUID& object_id = item->getUUID(); + LLViewerObject* objectp = gObjectList.findObject(object_id); + if (!objectp) + { + return false; + } + + if ( + std::find(behavs.begin(), behavs.end(), "touch") != behavs.end() + && !RlvActions::canTouch(objectp) + ) + { + return false; + } + else if ( + std::find(behavs.begin(), behavs.end(), "edit") != behavs.end() + && !RlvActions::canEdit(objectp) + ) + { + return false; + } + else if ( + std::find(behavs.begin(), behavs.end(), "sit") != behavs.end() + && !RlvActions::canSit(objectp) + ) + { + return false; + } + else if ( + std::find(behavs.begin(), behavs.end(), "buy") != behavs.end() + && !RlvActions::canBuyObject(object_id) + ) + { + return false; + } + else if ( + std::find(behavs.begin(), behavs.end(), "teleport") != behavs.end() + && !RlvActions::canTeleportToLocal(objectp->getPositionGlobal()) + ) + { + return false; + } + } + + return true; +} + bool FSPanelAreaSearchList::onContextMenuItemClick(const LLSD& userdata) { const std::string& action = userdata.asStringRef(); @@ -1942,6 +2016,10 @@ bool FSPanelAreaSearchList::onContextMenuItemClick(const LLSD& userdata) handle_object_delete(); break; case 'r': // return + if (RlvActions::isRlvEnabled() && !rlvCanDeleteOrReturn()) + { + break; + } handle_object_return(); break; default: diff --git a/indra/newview/fsareasearch.h b/indra/newview/fsareasearch.h index 44a67c0f87..1ee82baa5a 100644 --- a/indra/newview/fsareasearch.h +++ b/indra/newview/fsareasearch.h @@ -305,6 +305,7 @@ private: bool onContextMenuItemClick(const LLSD& userdata); bool onContextMenuItemEnable(const LLSD& userdata); + bool onContextMenuItemVisibleRLV(const LLSD& userdata); void onColumnVisibilityChecked(const LLSD& userdata); bool onEnableColumnVisibilityChecked(const LLSD& userdata); diff --git a/indra/newview/fsareasearchmenu.cpp b/indra/newview/fsareasearchmenu.cpp index bbef3c73ed..c5fd1b6eaf 100644 --- a/indra/newview/fsareasearchmenu.cpp +++ b/indra/newview/fsareasearchmenu.cpp @@ -41,6 +41,7 @@ LLContextMenu* FSAreaSearchMenu::createMenu() registrar.add("AreaSearch.Action", boost::bind(&FSAreaSearchMenu::onContextMenuItemClick, this, _2)); enable_registrar.add("AreaSearch.Enable", boost::bind(&FSAreaSearchMenu::onContextMenuItemEnable, this, _2)); + enable_registrar.add("AreaSearch.RLV", boost::bind(&FSAreaSearchMenu::onContextMenuItemVisibleRLV, this, _2)); return createFromFile("menu_fs_area_search.xml"); } @@ -63,3 +64,13 @@ bool FSAreaSearchMenu::onContextMenuItemEnable(const LLSD& userdata) } return false; } + +bool FSAreaSearchMenu::onContextMenuItemVisibleRLV(const LLSD& userdata) +{ + FSAreaSearch* search = LLFloaterReg::findTypedInstance("area_search"); + if (search && search->getPanelList()) + { + return search->getPanelList()->onContextMenuItemVisibleRLV(userdata); + } + return false; +} diff --git a/indra/newview/fsareasearchmenu.h b/indra/newview/fsareasearchmenu.h index 2853c015f7..480b90428e 100644 --- a/indra/newview/fsareasearchmenu.h +++ b/indra/newview/fsareasearchmenu.h @@ -37,6 +37,7 @@ public: private: void onContextMenuItemClick(const LLSD& userdata); bool onContextMenuItemEnable(const LLSD& userdata); + bool onContextMenuItemVisibleRLV(const LLSD& userdata); }; extern FSAreaSearchMenu gFSAreaSearchMenu; diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 66e756720c..2611bd139f 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -54,6 +54,9 @@ #include "v3math.h" #include "v4color.h" +#include "rlvactions.h" // Respect RLVa restrictions +#include "rlvcommon.h" // Respect RLVa restrictions + #define XUI_LINKSET_USE_NONE 0 #define XUI_LINKSET_USE_WALKABLE 1 #define XUI_LINKSET_USE_STATIC_OBSTACLE 2 @@ -556,6 +559,29 @@ void LLFloaterPathfindingLinksets::updateStateOnEditFields() int numSelectedItems = getNumSelectedObjects(); bool isEditEnabled = (numSelectedItems > 0); + // Respect RLVa restrictions + if (RlvActions::isRlvEnabled()) + { + if ( + !rlvCanDeleteOrReturn() + || RlvActions::hasBehaviour(RLV_BHVR_FARTOUCH) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHALL) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHWORLD) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHME) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHTHIS) + || RlvActions::hasBehaviour(RLV_BHVR_INTERACT) + ) + { + isEditEnabled = false; + } + + if (RlvActions::hasBehaviour(RLV_BHVR_TPLOCAL)) + { + numSelectedItems = 0; + } + } + // + mEditLinksetUse->setEnabled(isEditEnabled); mLabelWalkabilityCoefficients->setEnabled(isEditEnabled); diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index b264df085a..d4d5808e46 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -64,6 +64,9 @@ #include "v3math.h" #include "v4color.h" +#include "rlvactions.h" // Respect RLVa restrictions +#include "rlvcommon.h" // Respect RLVa restrictions + #define DEFAULT_BEACON_WIDTH 6 //--------------------------------------------------------------------------- @@ -819,6 +822,29 @@ void LLFloaterPathfindingObjects::updateStateOnActionControls() int numSelectedItems = mObjectsScrollList->getNumSelected(); bool isEditEnabled = (numSelectedItems > 0); + // Respect RLVa restrictions + if (RlvActions::isRlvEnabled()) + { + if ( + !rlvCanDeleteOrReturn() + || RlvActions::hasBehaviour(RLV_BHVR_FARTOUCH) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHALL) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHWORLD) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHME) + || RlvActions::hasBehaviour(RLV_BHVR_TOUCHTHIS) + || RlvActions::hasBehaviour(RLV_BHVR_INTERACT) + ) + { + isEditEnabled = false; + } + + if (RlvActions::hasBehaviour(RLV_BHVR_TPLOCAL)) + { + numSelectedItems = 0; + } + } + // + mShowBeaconCheckBox->setEnabled(isEditEnabled); mTakeButton->setEnabled(isEditEnabled && visible_take_object()); mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 1d93c91a32..0296fb2e4c 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -787,16 +787,16 @@ bool rlvMenuEnableIfNot(const LLSD& sdParam) // Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0 bool rlvCanDeleteOrReturn(const LLViewerObject* pObj) { - // Block if: @rez=n restricted and owned by us or a group *or* @unsit=n restricted and being sat on by us + // Block if: @rez=n or @edit=n restricted and owned/editable by us or a group *or* @unsit=n restricted and being sat on by us return - ( (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permGroupOwner())) ) && + ( (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT) && !gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permModify()) && (!pObj->permGroupOwner())) ) && ( (!gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (!isAgentAvatarValid()) || (!pObj->getRootEdit()->isChild(gAgentAvatarp)) ); } // Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0 bool rlvCanDeleteOrReturn() { - if ( (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) ) + if ( (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) ) { struct RlvCanDeleteOrReturn : public LLSelectedObjectFunctor { diff --git a/indra/newview/skins/default/xui/en/menu_fs_area_search.xml b/indra/newview/skins/default/xui/en/menu_fs_area_search.xml index 2215bfece5..fba0cd2a29 100644 --- a/indra/newview/skins/default/xui/en/menu_fs_area_search.xml +++ b/indra/newview/skins/default/xui/en/menu_fs_area_search.xml @@ -12,6 +12,9 @@ + + + + + + + + + + @@ -106,6 +136,9 @@ + From 2becb70686e9363c28bb465d897cc3b1b7a235e3 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Mon, 5 Aug 2024 22:14:17 +1000 Subject: [PATCH 4/5] Fixed unwanted implicit cast of U32 to U16 causing a crash --- indra/newview/llvosurfacepatch.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index 12de4ca76b..0bb401449b 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -987,7 +987,7 @@ LLTerrainPartition::LLTerrainPartition(LLViewerRegion* regionp) } // Do not add vertices; honor strict vertex count specified by strider_vertex_count -void gen_terrain_tangents(U16 strider_vertex_count, +void gen_terrain_tangents(U32 strider_vertex_count, U32 strider_index_count, LLStrider &verticesp, LLStrider &normalsp, @@ -1003,7 +1003,7 @@ void gen_terrain_tangents(U16 strider_vertex_count, std::vector texcoords(strider_vertex_count); std::vector indices(strider_index_count); - for (U16 v = 0; v < strider_vertex_count; ++v) + for (U32 v = 0; v < strider_vertex_count; ++v) { F32 *vert = verticesp[v].mV; vertices[v] = LLVector4a(vert[0], vert[1], vert[2], 1.f); @@ -1019,7 +1019,7 @@ void gen_terrain_tangents(U16 strider_vertex_count, LLCalculateTangentArray(strider_vertex_count, vertices, normals, texcoords.data(), strider_index_count / 3, indices.data(), tangents); - for (U16 v = 0; v < strider_vertex_count; ++v) + for (U32 v = 0; v < strider_vertex_count; ++v) { tangentsp[v] = tangents[v]; } From b65be38ae0b2cd03d0f8b1591998e671fe212557 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Mon, 5 Aug 2024 23:14:41 +1000 Subject: [PATCH 5/5] Added missing FS tags --- indra/newview/llvosurfacepatch.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index 0bb401449b..999a027d56 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -987,7 +987,7 @@ LLTerrainPartition::LLTerrainPartition(LLViewerRegion* regionp) } // Do not add vertices; honor strict vertex count specified by strider_vertex_count -void gen_terrain_tangents(U32 strider_vertex_count, +void gen_terrain_tangents(U32 strider_vertex_count, // [FIRE-34363] Fix implicit cast from U32->U16 that can cause a crash U32 strider_index_count, LLStrider &verticesp, LLStrider &normalsp, @@ -1003,7 +1003,7 @@ void gen_terrain_tangents(U32 strider_vertex_count, std::vector texcoords(strider_vertex_count); std::vector indices(strider_index_count); - for (U32 v = 0; v < strider_vertex_count; ++v) + for (U32 v = 0; v < strider_vertex_count; ++v) // [FIRE-34363] Fix implicit cast from U32->U16 that can cause a crash { F32 *vert = verticesp[v].mV; vertices[v] = LLVector4a(vert[0], vert[1], vert[2], 1.f); @@ -1019,7 +1019,7 @@ void gen_terrain_tangents(U32 strider_vertex_count, LLCalculateTangentArray(strider_vertex_count, vertices, normals, texcoords.data(), strider_index_count / 3, indices.data(), tangents); - for (U32 v = 0; v < strider_vertex_count; ++v) + for (U32 v = 0; v < strider_vertex_count; ++v) // [FIRE-34363] Fix implicit cast from U32->U16 that can cause a crash { tangentsp[v] = tangents[v]; }