diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2017-06-15 16:45:57 +0300 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2017-06-15 16:45:57 +0300 | 
| commit | 341ecb2324d7895977a29e11afa9657a27da5912 (patch) | |
| tree | 7c2adb614b5f970cb4c8b7ffa61baf67eacd2910 | |
| parent | a693fd391a5a1756e78a9ec3dc4002069149a4f4 (diff) | |
MAINT-7483 Fixed inability to drag a folder into object contents
| -rw-r--r-- | indra/newview/llinventoryobserver.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/lltooldraganddrop.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/lltooldraganddrop.h | 2 | 
3 files changed, 16 insertions, 4 deletions
| diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 4427f32de9..26d7a7a28a 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -350,6 +350,11 @@ void LLInventoryFetchDescendentsObserver::startFetch()  		if (!cat) continue;  		if (!isCategoryComplete(cat))  		{ +			// CHECK IT: isCategoryComplete() checks both version and descendant count but +			// fetch() only works for Unknown version and doesn't care about descentants, +			// as result fetch won't start and folder will potentially get stuck as +			// incomplete in observer. +			// Likely either both should use only version or both should check descendants.  			cat->fetch();		//blindly fetch it without seeing if anything else is fetching it.  			mIncomplete.push_back(*it);	//Add to list of things being downloaded for this observer.  		} diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 49436ee406..bd68d8c999 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1450,13 +1450,20 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,  // accessor that looks at permissions, copyability, and names of  // inventory items to determine if a drop would be ok. -EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LLInventoryItem* item) +EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LLInventoryItem* item, EDragAndDropType type)  {  	// check the basics  	if (!item || !obj) return ACCEPT_NO;  	// HACK: downcast  	LLViewerInventoryItem* vitem = (LLViewerInventoryItem*)item; -	if (!vitem->isFinished()) return ACCEPT_NO; +	if (!vitem->isFinished() && (type != DAD_CATEGORY)) +	{ +		// Note: for DAD_CATEGORY we assume that folder version check passed and folder  +		// is complete, meaning that items inside are up to date.  +		// (isFinished() == false) at the moment shows that item was loaded from cache. +		// Library or agent inventory only. +		return ACCEPT_NO; +	}  	if (vitem->getIsLinkType()) return ACCEPT_NO; // No giving away links  	// deny attempts to drop from an object onto itself. This is to @@ -2296,7 +2303,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory(  				(*item_iter) = item;  			}  			*/ -			rv = willObjectAcceptInventory(root_object, item); +			rv = willObjectAcceptInventory(root_object, item, DAD_CATEGORY);  			if (rv < ACCEPT_YES_COPY_SINGLE)  			{  				LL_DEBUGS() << "Object will not accept " << item->getUUID() << LL_ENDL; diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 766046785b..2d99de2244 100644 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -224,7 +224,7 @@ protected:  	// accessor that looks at permissions, copyability, and names of  	// inventory items to determine if a drop would be ok. -	static EAcceptance willObjectAcceptInventory(LLViewerObject* obj, LLInventoryItem* item); +	static EAcceptance willObjectAcceptInventory(LLViewerObject* obj, LLInventoryItem* item, EDragAndDropType type = DAD_NONE);  public:  	// helper functions | 
