From 22ea223ddd2f2f9ed05a447dda2c4169a77d191e Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Thu, 26 Feb 2015 12:12:08 +0200 Subject: MAINT-4904 FIXED Show confirmation pop-up before unlinking an object. --- indra/newview/app_settings/settings.xml | 11 ++++++++ indra/newview/llselectmgr.cpp | 31 ++++++++++++++++++++++ indra/newview/llselectmgr.h | 2 ++ .../newview/skins/default/xui/en/notifications.xml | 16 ++++++++++- 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index e20cc77ed3..e3ab45c53e 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3444,6 +3444,17 @@ Value 0 + MinObjectsForUnlinkConfirm + + Comment + Minimum amount of objects in linkset for showing confirmation dialog + Persist + 1 + Type + S32 + Value + 6 + EffectScriptChatParticles Comment diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index b13c30b6d4..2fb26a3a4d 100755 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -622,10 +622,41 @@ bool LLSelectMgr::linkObjects() bool LLSelectMgr::unlinkObjects() { + LLViewerObject *object = mSelectedObjects->getFirstRootObject(); + if (!object) return false; + + S32 min_objects_for_confirm = gSavedSettings.getS32("MinObjectsForUnlinkConfirm"); + for (LLObjectSelection::root_iterator iter = getSelection()->root_begin(); iter != getSelection()->root_end(); iter++) + { + object = (*iter)->getObject(); + if(object) + { + S32 objects_in_linkset = object->numChildren() + 1; + if(objects_in_linkset >= min_objects_for_confirm) + { + LLNotificationsUtil::add("ConfirmUnlink", LLSD(), LLSD(), boost::bind(&LLSelectMgr::confirmUnlinkObjects, this, _1, _2)); + return true; + } + } + } + LLSelectMgr::getInstance()->sendDelink(); return true; } +void LLSelectMgr::confirmUnlinkObjects(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + // if Cancel pressed + if (option == 1) + { + return; + } + + LLSelectMgr::getInstance()->sendDelink(); + return; +} + // in order to link, all objects must have the same owner, and the // agent must have the ability to modify all of the objects. However, // we're not answering that question with this method. The question diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 23c41e4cc1..316e72b11c 100755 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -506,6 +506,8 @@ public: bool unlinkObjects(); + void confirmUnlinkObjects(const LLSD& notification, const LLSD& response); + bool enableLinkObjects(); bool enableUnlinkObjects(); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 4602a41d52..df4bf6700b 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5365,7 +5365,21 @@ You cannot undo this action. notext="Cancel" yestext="OK"/> - + + + + This is a large linkset. If you unlink it, you may not be able to link it again. You may wish to take a copy of the linkset into your inventory as a precaution. + confirm + + +