From 5bd00f860213ebfa116d7b85fff447af3b87d814 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Mon, 15 May 2017 16:47:18 +0300
Subject: [PATCH] MAINT-7383 show notifications for Purge item action in all
 inventory panels

---
 indra/newview/llavataractions.cpp             | 29 -----------------
 indra/newview/llavataractions.h               |  3 --
 indra/newview/llinventorypanel.cpp            | 31 ++++++++++++++-----
 indra/newview/llinventorypanel.h              |  2 ++
 indra/newview/llpanelmaininventory.cpp        |  1 -
 .../skins/default/xui/en/menu_inventory.xml   |  3 +-
 6 files changed, 28 insertions(+), 41 deletions(-)

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 0d0861efcc1..219d9da01f3 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -929,17 +929,6 @@ void LLAvatarActions::shareWithAvatars(LLView * panel)
 	LLNotificationsUtil::add("ShareNotification");
 }
 
-
-//static
-void LLAvatarActions::purgeSelectedItems()
-{
-	const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
-	if (inventory_selected_uuids.empty()) return;
-	LLSD args;
-	args["COUNT"] = (S32)inventory_selected_uuids.size();
-	LLNotificationsUtil::add("PurgeSelectedItems", args, LLSD(), &callbackPurgeSelectedItems);
-}
-
 // static
 bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NULL*/)
 {
@@ -1180,24 +1169,6 @@ bool LLAvatarActions::callbackAddFriendWithMessage(const LLSD& notification, con
 	return false;
 }
 
-bool LLAvatarActions::callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option == 0)
-	{
-		const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
-		if (inventory_selected_uuids.empty()) return false;
-
-		std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
-		const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
-		for (; it != it_end; ++it)
-		{
-			remove_inventory_object(*it, NULL);
-		}
-	}
-	return false;
-}
-
 // static
 bool LLAvatarActions::handleKick(const LLSD& notification, const LLSD& response)
 {
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 8ff1ef073df..256d44d820a 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -125,8 +125,6 @@ class LLAvatarActions
 	 */
 	static void shareWithAvatars(LLView * panel);
 
-	static void purgeSelectedItems();
-
 	/**
 	 * Block/unblock the avatar.
 	 */
@@ -245,7 +243,6 @@ class LLAvatarActions
 
 private:
 	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
-	static bool callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response);
 	static bool handleRemove(const LLSD& notification, const LLSD& response);
 	static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id);
 	static bool handleFreezeAvatar(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index a00dcf02abb..4b117941a00 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -43,6 +43,7 @@
 #include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodelbackgroundfetch.h"
+#include "llnotificationsutil.h"
 #include "llpreview.h"
 #include "llsidepanelinventory.h"
 #include "lltrans.h"
@@ -168,7 +169,6 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
 	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
 	mCommitCallbackRegistrar.add("Inventory.Share",  boost::bind(&LLAvatarActions::shareWithAvatars, this));
 	mCommitCallbackRegistrar.add("Inventory.FileUploadLocation", boost::bind(&LLInventoryPanel::fileUploadLocation, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.Purge", boost::bind(&LLInventoryPanel::purgeSelectedItems, this));
 }
 
 LLFolderView * LLInventoryPanel::createFolderRoot(LLUUID root_id )
@@ -1216,17 +1216,29 @@ void LLInventoryPanel::purgeSelectedItems()
 {
     const std::set<LLFolderViewItem*> inventory_selected = mFolderRoot.get()->getSelectionList();
     if (inventory_selected.empty()) return;
+    LLSD args;
+    args["COUNT"] = (S32)inventory_selected.size();
+    LLNotificationsUtil::add("PurgeSelectedItems", args, LLSD(), boost::bind(&LLInventoryPanel::callbackPurgeSelectedItems, this, _1, _2));
+}
 
-    std::set<LLFolderViewItem*>::const_iterator it = inventory_selected.begin();
-    const std::set<LLFolderViewItem*>::const_iterator it_end = inventory_selected.end();
-    for (; it != it_end; ++it)
+void LLInventoryPanel::callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response)
+{
+    S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+    if (option == 0)
     {
-        LLUUID item_id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID();
-        remove_inventory_object(item_id, NULL);
+        const std::set<LLFolderViewItem*> inventory_selected = mFolderRoot.get()->getSelectionList();
+        if (inventory_selected.empty()) return;
+
+        std::set<LLFolderViewItem*>::const_iterator it = inventory_selected.begin();
+        const std::set<LLFolderViewItem*>::const_iterator it_end = inventory_selected.end();
+        for (; it != it_end; ++it)
+        {
+            LLUUID item_id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID();
+            remove_inventory_object(item_id, NULL);
+        }
     }
 }
 
-
 bool LLInventoryPanel::attachObject(const LLSD& userdata)
 {
 	// Copy selected item UUIDs to a vector.
@@ -1464,6 +1476,11 @@ void LLInventoryPanel::updateSelection()
 
 void LLInventoryPanel::doToSelected(const LLSD& userdata)
 {
+	if (("purge" == userdata.asString()))
+	{
+		purgeSelectedItems();
+		return;
+	}
 	LLInventoryAction::doToSelected(mInventory, mFolderRoot.get(), userdata.asString());
 
 	return;
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 7f63ea97ccb..5ee58707b05 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -233,6 +233,8 @@ class LLInventoryPanel : public LLPanel
     // Clean up stuff when the folder root gets deleted
     void clearFolderRoot();
 
+    void callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response);
+
 protected:
 	void openStartFolderOrMyInventory(); // open the first level of inventory
 	void onItemsCompletion();			// called when selected items are complete
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index ff54f830166..3db9500de0a 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -118,7 +118,6 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
 	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));
 	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.Share",  boost::bind(&LLAvatarActions::shareWithAvatars, this));
-	mCommitCallbackRegistrar.add("Inventory.Purge",  boost::bind(&LLAvatarActions::purgeSelectedItems));
 
 	mSavedFolderState = new LLSaveFolderState();
 	mSavedFolderState->setApply(FALSE);
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 84721854574..ec9f9473389 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -518,7 +518,8 @@
      layout="topleft"
      name="Purge Item">
         <menu_item_call.on_click
-         function="Inventory.Purge"/>
+         function="Inventory.DoToSelected"
+         parameter="purge"/>
     </menu_item_call>
     <menu_item_call
      label="Restore Item"
-- 
GitLab