Make area search menu and pathfinding objects floater visually respect RLV restrictions, also add missing @edit condition to blocking delete and return.

master
Zi Ree 2024-08-04 21:21:04 +02:00
parent bc1b842e1b
commit 2692e4c3ae
7 changed files with 137 additions and 3 deletions

View File

@ -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<LLScrollListItem*> 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();

View File

@ -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);

View File

@ -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<FSAreaSearch>("area_search");
if (search && search->getPanelList())
{
return search->getPanelList()->onContextMenuItemEnableRLV(userdata);
}
return false;
}

View File

@ -37,6 +37,7 @@ public:
private:
void onContextMenuItemClick(const LLSD& userdata);
bool onContextMenuItemEnable(const LLSD& userdata);
bool onContextMenuItemEnableRLV(const LLSD& userdata);
};
extern FSAreaSearchMenu gFSAreaSearchMenu;

View File

@ -64,6 +64,9 @@
#include "v3math.h"
#include "v4color.h"
#include "rlvactions.h" // <FS:Zi> Respect RLVa restrictions
#include "rlvcommon.h" // <FS:Zi> Respect RLVa restrictions
#define DEFAULT_BEACON_WIDTH 6
//---------------------------------------------------------------------------
@ -819,6 +822,29 @@ void LLFloaterPathfindingObjects::updateStateOnActionControls()
int numSelectedItems = mObjectsScrollList->getNumSelected();
bool isEditEnabled = (numSelectedItems > 0);
// <FS:Zi> 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;
}
}
// </FS:Zi>
mShowBeaconCheckBox->setEnabled(isEditEnabled);
mTakeButton->setEnabled(isEditEnabled && visible_take_object());
mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy());

View File

@ -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
{

View File

@ -12,6 +12,9 @@
<menu_item_call.on_enable
function="AreaSearch.Enable"
parameter="script"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="edit"/>
</menu_item_call>
<menu_item_call
label="Touch"
@ -20,6 +23,9 @@
<menu_item_call.on_click
function="AreaSearch.Action"
parameter="touch"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="touch"/>
</menu_item_call>
<menu_item_call
label="Sit"
@ -28,6 +34,12 @@
<menu_item_call.on_click
function="AreaSearch.Action"
parameter="u_sit_on_object"/>
<menu_item_call.on_enable
function="AreaSearch.Enable"
parameter="one"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="sit"/>
</menu_item_call>
<menu_item_call
label="Teleport to"
@ -39,6 +51,9 @@
<menu_item_call.on_enable
function="AreaSearch.Enable"
parameter="one"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="teleport"/>
</menu_item_call>
<menu_item_call
label="Zoom"
@ -61,6 +76,9 @@
<menu_item_call.on_click
function="AreaSearch.Action"
parameter="inspect"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="edit"/>
</menu_item_call>
<menu_item_call
label="Edit"
@ -69,6 +87,9 @@
<menu_item_call.on_click
function="AreaSearch.Action"
parameter="edit"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="edit"/>
</menu_item_call>
<menu_item_call
label="Return"
@ -77,6 +98,12 @@
<menu_item_call.on_click
function="AreaSearch.Action"
parameter="return"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="delete"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="touch"/>
</menu_item_call>
<menu_item_call
label="Delete"
@ -85,6 +112,12 @@
<menu_item_call.on_click
function="AreaSearch.Action"
parameter="delete"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="delete"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="touch"/>
</menu_item_call>
<menu_item_call
label="Blacklist"
@ -93,6 +126,9 @@
<menu_item_call.on_click
function="AreaSearch.Action"
parameter="l_blacklist"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="delete"/>
</menu_item_call>
<!-- <menu_item_separator
layout="topleft"/> -->
@ -106,6 +142,12 @@
<menu_item_call.on_enable
function="AreaSearch.Enable"
parameter="one"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="edit"/>
<menu_item_call.on_enable
function="AreaSearch.RLV"
parameter="touch"/>
</menu_item_call>
<menu_item_separator
layout="topleft"/>