diff options
Diffstat (limited to 'indra/newview/llpanelpermissions.cpp')
-rwxr-xr-x | indra/newview/llpanelpermissions.cpp | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 263c73dc0e..0088163fee 100755 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -1080,28 +1080,30 @@ void LLPanelPermissions::setAllSaleInfo() LLSaleInfo new_sale_info(sale_type, price); LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(new_sale_info); - - U8 old_click_action = 0; - LLSelectMgr::getInstance()->selectionGetClickAction(&old_click_action); - if (old_sale_info.isForSale() - && !new_sale_info.isForSale() - && old_click_action == CLICK_ACTION_BUY) - { - // If turned off for-sale, make sure click-action buy is turned - // off as well - LLSelectMgr::getInstance()-> - selectionSetClickAction(CLICK_ACTION_TOUCH); - } - else if (new_sale_info.isForSale() - && !old_sale_info.isForSale() - && old_click_action == CLICK_ACTION_TOUCH) - { - // If just turning on for-sale, preemptively turn on one-click buy - // unless user have a different click action set - LLSelectMgr::getInstance()-> - selectionSetClickAction(CLICK_ACTION_BUY); - } + bool selection_set_for_sale = new_sale_info.isForSale(); + bool selection_was_for_sale = old_sale_info.isForSale(); + if (selection_was_for_sale != selection_set_for_sale) + { + // sale state changed, switch click-actions + // but don't touch user changed actions + U8 old_action = selection_set_for_sale ? CLICK_ACTION_TOUCH : CLICK_ACTION_BUY; + U8 new_action = selection_set_for_sale ? CLICK_ACTION_BUY : CLICK_ACTION_TOUCH; + struct f : public LLSelectedObjectFunctor + { + U8 mActionOld, mActionNew; + f(const U8& t_old, const U8& t_new) : mActionOld(t_old), mActionNew(t_new) {} + virtual bool apply(LLViewerObject* object) + { + if (object->getClickAction() == mActionOld) + { + object->setClickAction(mActionNew); + } + return true; + } + } func(old_action, new_action); + LLSelectMgr::getInstance()->getSelection()->applyToObjects(&func); + } } struct LLSelectionPayable : public LLSelectedObjectFunctor |