From ded008a8e1b205fead6ad0efacf1386d65e47b2a Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 27 Jan 2017 17:43:27 +0200
Subject: [PATCH] MAINT-86 Fixed object-contents aren't updated after wearing
 from ground

---
 indra/newview/llpanelobjectinventory.cpp | 12 ++++++++++++
 indra/newview/llpanelobjectinventory.h   |  1 +
 indra/newview/llselectmgr.cpp            |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index c4211d55080..addb0fbe4d0 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1849,6 +1849,7 @@ void LLPanelObjectInventory::refresh()
 			if(mTaskUUID != object->mID)
 			{
 				mTaskUUID = object->mID;
+				mAttachmentUUID = object->getAttachmentItemID();
 				make_request = TRUE;
 
 				// This is a new object so pre-emptively clear the contents
@@ -1858,6 +1859,16 @@ void LLPanelObjectInventory::refresh()
 				// Register for updates from this object,
 				registerVOInventoryListener(object,NULL);
 			}
+			else if (mAttachmentUUID != object->getAttachmentItemID())
+			{
+				mAttachmentUUID = object->getAttachmentItemID();
+				if (mAttachmentUUID.notNull())
+				{
+					// Server unsubsribes viewer (deselects object) from property
+					// updates after "ObjectAttach" so we need to resubscribe
+					LLSelectMgr::getInstance()->sendSelect();
+				}
+			}
 
 			// Based on the node information, we may need to dirty the
 			// object inventory and get it again.
@@ -1888,6 +1899,7 @@ void LLPanelObjectInventory::refresh()
 void LLPanelObjectInventory::clearInventoryTask()
 {
 	mTaskUUID = LLUUID::null;
+	mAttachmentUUID = LLUUID::null;
 	removeVOInventoryListener();
 	clearContents();
 }
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
index 3de49242acc..d700c8f4cfb 100644
--- a/indra/newview/llpanelobjectinventory.h
+++ b/indra/newview/llpanelobjectinventory.h
@@ -105,6 +105,7 @@ class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener
 	LLFolderView* mFolders;
 	
 	LLUUID mTaskUUID;
+	LLUUID mAttachmentUUID;
 	BOOL mHaveInventory;
 	BOOL mIsInventoryEmpty;
 	BOOL mInventoryNeedsUpdate;
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index e4641d87212..ee7c22800aa 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -4416,6 +4416,9 @@ void LLSelectMgr::sendAttach(U8 attachment_point, bool replace)
 			SEND_ONLY_ROOTS );
 		if (!build_mode)
 		{
+			// After "ObjectAttach" server will unsubscribe us from properties updates
+			// so either deselect objects or resend selection after attach packet reaches server
+			// In case of build_mode LLPanelObjectInventory::refresh() will deal with selection
 			deselectAll();
 		}
 	}
-- 
GitLab