diff options
| -rwxr-xr-x | indra/newview/llpanelobjectinventory.cpp | 8 | ||||
| -rwxr-xr-x | indra/newview/llpreview.cpp | 20 | ||||
| -rwxr-xr-x | indra/newview/llpreview.h | 6 | ||||
| -rwxr-xr-x | indra/newview/llpreviewnotecard.cpp | 7 | 
4 files changed, 32 insertions, 9 deletions
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 5fd575ee8b..8b927a0c6b 100755 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -1167,7 +1167,13 @@ void LLTaskNotecardBridge::openItem()  	{  		return;  	} -	if(object->permModify() || gAgent.isGodlike()) + +	// Note: even if we are not allowed to modify copyable notecard, we should be able to view it +	LLInventoryItem *item = dynamic_cast<LLInventoryItem*>(object->getInventoryObject(mUUID)); +	BOOL item_copy = item && gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE); +	if( item_copy +		|| object->permModify() +		|| gAgent.isGodlike())  	{  		LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(mUUID), TAKE_FOCUS_YES);  		if (preview) diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index bf2652cb49..fb21b980dc 100755 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -49,6 +49,7 @@  #include "llviewerinventory.h"  #include "llviewerwindow.h"  #include "lltrans.h" +#include "roles_constants.h"  // Constants @@ -230,8 +231,23 @@ void LLPreview::refreshFromItem()  	}  	getChild<LLUICtrl>("desc")->setValue(item->getDescription()); -	BOOL can_agent_manipulate = item->getPermissions().allowModifyBy(gAgent.getID()); -	getChildView("desc")->setEnabled(can_agent_manipulate); +	getChildView("desc")->setEnabled(canModify(mObjectUUID, item)); +} + +// static +BOOL LLPreview::canModify(const LLUUID taskUUID, const LLInventoryItem* item) +{ +	if (taskUUID.notNull()) +	{ +		LLViewerObject* object = gObjectList.findObject(taskUUID); +		if(object && !object->permModify()) +		{ +			// No permission to edit in-world inventory +			return FALSE; +		} +	} + +	return item && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE);  }  // static  diff --git a/indra/newview/llpreview.h b/indra/newview/llpreview.h index 759430c3a5..49c114720b 100755 --- a/indra/newview/llpreview.h +++ b/indra/newview/llpreview.h @@ -105,7 +105,11 @@ public:  	// llview  	/*virtual*/ void draw();  	void refreshFromItem(); -	 + +	// We can't modify Item or description in preview if either in-world Object +	// or Item  itself is unmodifiable +	static BOOL canModify(const LLUUID taskUUID, const LLInventoryItem* item); +  protected:  	virtual void onCommit(); diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index 1308d1e9a7..9f88b0db5f 100755 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -218,7 +218,7 @@ void LLPreviewNotecard::loadAsset()  		LLPermissions perm(item->getPermissions());  		BOOL is_owner = gAgent.allowOperation(PERM_OWNER, perm, GP_OBJECT_MANIPULATE);  		BOOL allow_copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE); -		BOOL allow_modify = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE); +		BOOL allow_modify = canModify(mObjectUUID, item);  		if (allow_copy || gAgent.isGodlike())  		{ @@ -338,10 +338,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,  			}  			previewEditor->makePristine(); - -			const LLInventoryItem* item = preview->getItem(); -			BOOL modifiable = item && gAgent.allowOperation(PERM_MODIFY, -								item->getPermissions(), GP_OBJECT_MANIPULATE); +			BOOL modifiable = preview->canModify(preview->mObjectID, preview->getItem());  			preview->setEnabled(modifiable);  			preview->mAssetStatus = PREVIEW_ASSET_LOADED;  		}  | 
