MAINT-8618 Viewer attempting to edit action when it has no permission

master
andreykproductengine 2018-07-02 20:09:36 +03:00
parent 41c0a95365
commit 5346e7909f
1 changed files with 25 additions and 14 deletions

View File

@ -1210,23 +1210,34 @@ void LLPanelPermissions::setAllSaleInfo()
LLSaleInfo new_sale_info(sale_type, price);
LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(new_sale_info);
struct f : public LLSelectedObjectFunctor
// Note: won't work right if a root and non-root are both single-selected (here and other places).
BOOL is_perm_modify = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode()
&& LLSelectMgr::getInstance()->selectGetRootsModify())
|| LLSelectMgr::getInstance()->selectGetModify();
BOOL is_nonpermanent_enforced = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode()
&& LLSelectMgr::getInstance()->selectGetRootsNonPermanentEnforced())
|| LLSelectMgr::getInstance()->selectGetNonPermanentEnforced();
if (is_perm_modify && is_nonpermanent_enforced)
{
virtual bool apply(LLViewerObject* object)
struct f : public LLSelectedObjectFunctor
{
return object->getClickAction() == CLICK_ACTION_BUY
|| object->getClickAction() == CLICK_ACTION_TOUCH;
virtual bool apply(LLViewerObject* object)
{
return object->getClickAction() == CLICK_ACTION_BUY
|| object->getClickAction() == CLICK_ACTION_TOUCH;
}
} check_actions;
// Selection should only contain objects that are of target
// action already or of action we are aiming to remove.
bool default_actions = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&check_actions);
if (default_actions && old_sale_info.isForSale() != new_sale_info.isForSale())
{
U8 new_click_action = new_sale_info.isForSale() ? CLICK_ACTION_BUY : CLICK_ACTION_TOUCH;
LLSelectMgr::getInstance()->selectionSetClickAction(new_click_action);
}
} check_actions;
// Selection should only contain objects that are of target
// action already or of action we are aiming to remove.
bool default_actions = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&check_actions);
if (default_actions && old_sale_info.isForSale() != new_sale_info.isForSale())
{
U8 new_click_action = new_sale_info.isForSale() ? CLICK_ACTION_BUY : CLICK_ACTION_TOUCH;
LLSelectMgr::getInstance()->selectionSetClickAction(new_click_action);
}
}