diff options
| -rw-r--r-- | indra/llcommon/llassettype.cpp | 26 | ||||
| -rw-r--r-- | indra/llinventory/llinventorytype.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llagentwearables.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 98 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.h | 2 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewermessage.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_inventory.xml | 8 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_main_inventory.xml | 4 | 
9 files changed, 90 insertions, 64 deletions
| diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp index 1c664e093b..2cd29448ae 100644 --- a/indra/llcommon/llassettype.cpp +++ b/indra/llcommon/llassettype.cpp @@ -77,23 +77,23 @@ LLAssetDictionary::LLAssetDictionary()  {  	//       												   DESCRIPTION			TYPE NAME	HUMAN NAME			CAN LINK?   CAN FETCH?  CAN KNOW?	  	//      												  |--------------------|-----------|-------------------|-----------|-----------|---------| -	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			false,		false,		true)); -	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			false,		true,		true)); -	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		false,		false,		false)); -	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			false,		true,		true)); -	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	false,		false,		false)); +	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			true,		false,		true)); +	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			true,		true,		true)); +	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		true,		false,		false)); +	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			true,		true,		true)); +	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	true,		false,		false));  	addEntry(LLAssetType::AT_CLOTHING, 			new AssetEntry("CLOTHING",			"clothing",	"clothing",			true,		true,		true));  	addEntry(LLAssetType::AT_OBJECT, 			new AssetEntry("OBJECT",			"object",	"object",			true,		false,		false)); -	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		false,		false,		true)); +	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		true,		false,		true));  	addEntry(LLAssetType::AT_CATEGORY, 			new AssetEntry("CATEGORY",			"category",	"folder",			true,		false,		false)); -	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		false,		false,		false)); -	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		false,		false,		false)); -	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		false,		false,		false)); +	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		true,		false,		false)); +	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		true,		false,		false)); +	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		true,		false,		false));  	addEntry(LLAssetType::AT_BODYPART, 			new AssetEntry("BODYPART",			"bodypart",	"body part",		true,		true,		true)); -	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			false,		false,		false)); -	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		false,		false,		false)); -	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		false,		false,		false)); -	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		false,		true,		true)); +	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			true,		false,		false)); +	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		true,		false,		false)); +	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		true,		false,		false)); +	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		true,		true,		true));  	addEntry(LLAssetType::AT_GESTURE, 			new AssetEntry("GESTURE",			"gesture",	"gesture",			true,		true,		true));  	addEntry(LLAssetType::AT_SIMSTATE, 			new AssetEntry("SIMSTATE",			"simstate",	"simstate",			false,		false,		false)); diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp index 4ef5df0b28..c050f20a9d 100644 --- a/indra/llinventory/llinventorytype.cpp +++ b/indra/llinventory/llinventorytype.cpp @@ -181,6 +181,10 @@ bool LLInventoryType::cannotRestrictPermissions(LLInventoryType::EType type)  bool inventory_and_asset_types_match(LLInventoryType::EType inventory_type,  									 LLAssetType::EType asset_type)  { +	// Links can be of any inventory type. +	if (LLAssetType::lookupIsLinkType(asset_type)) +		return true; +  	const InventoryEntry *entry = LLInventoryDictionary::getInstance()->lookup(inventory_type);  	if (!entry) return false; diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 8a880e5ace..b5fde0baca 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1974,7 +1974,11 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra  		msg->nextBlockFast(_PREHASH_ObjectData );  		msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());  		msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner()); +#if ENABLE_MULTIATTACHMENTS +		msg->addU8Fast(_PREHASH_AttachmentPt, 0 | ATTACHMENT_ADD ); +#else  		msg->addU8Fast(_PREHASH_AttachmentPt, 0 );	// Wear at the previous or default attachment point +#endif  		pack_permissions_slam(msg, item->getFlags(), item->getPermissions());  		msg->addStringFast(_PREHASH_Name, item->getName());  		msg->addStringFast(_PREHASH_Description, item->getDescription()); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b4a1bf2758..9275ddc4e3 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -211,10 +211,14 @@ BOOL LLInvFVBridge::isItemRemovable() const  		return FALSE;  	} -	// Disable delete from COF folder; have users explicitly choose "detach/take off". +	// Disable delete from COF folder; have users explicitly choose "detach/take off", +	// unless the item is not worn but in the COF (i.e. is bugged).  	if (LLAppearanceMgr::instance().getIsProtectedCOFItem(mUUID))  	{ -		return FALSE; +		if (get_is_item_worn(mUUID)) +		{ +			return FALSE; +		}  	}  	const LLInventoryObject *obj = model->getItem(mUUID); @@ -494,7 +498,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const  			}  		}  		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i)); -		if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType())) +		if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType()))  		{  			return FALSE;  		} @@ -641,13 +645,10 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,  		disabled_items.push_back(std::string("Paste"));  	} -	if (gAgent.isGodlike()) +	items.push_back(std::string("Paste As Link")); +	if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0)  	{ -		items.push_back(std::string("Paste As Link")); -		if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0) -		{ -			disabled_items.push_back(std::string("Paste As Link")); -		} +		disabled_items.push_back(std::string("Paste As Link"));  	}  	items.push_back(std::string("Paste Separator")); @@ -677,7 +678,8 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		{  			disabled_items.push_back(std::string("Share"));  		} -		items.push_back(std::string("Open")); +		 +		addOpenRightClickMenuOption(items);  		items.push_back(std::string("Properties"));  		getClipboardEntries(true, items, disabled_items, flags); @@ -712,7 +714,7 @@ void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items,  	const LLInventoryObject *obj = getInventoryObject();  	// Don't allow delete as a direct option from COF folder. -	if (obj && obj->getIsLinkType() && isCOFFolder()) +	if (obj && obj->getIsLinkType() && isCOFFolder() && get_is_item_worn(mUUID))  	{  		return;  	} @@ -733,6 +735,17 @@ void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items,  	}  } +void LLInvFVBridge::addOpenRightClickMenuOption(menuentry_vec_t &items) +{ +	const LLInventoryObject *obj = getInventoryObject(); +	const BOOL is_link = (obj && obj->getIsLinkType()); + +	if (is_link) +		items.push_back(std::string("Open Original")); +	else +		items.push_back(std::string("Open")); +} +  // *TODO: remove this  BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const  { @@ -1099,7 +1112,7 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)  		gotoItem();  	} -	if ("open" == action) +	if ("open" == action || "open_original" == action)  	{  		openItem();  		return; @@ -1445,17 +1458,11 @@ BOOL LLItemBridge::isItemCopyable() const  			return FALSE;  		} -		if (gAgent.isGodlike()) -		{ -			// All items can be copied in god mode since you can -			// at least paste-as-link the item, though you  -			// still may not be able paste the item. -			return TRUE; -		} -		else -		{ -			return (item->getPermissions().allowCopyBy(gAgent.getID())); -		} +		// All items can be copied in god mode since you can +		// at least paste-as-link the item, though you  +		// still may not be able paste the item. +		return TRUE; +		// return (item->getPermissions().allowCopyBy(gAgent.getID()));  	}  	return FALSE;  } @@ -1596,7 +1603,8 @@ BOOL LLFolderBridge::isUpToDate() const  BOOL LLFolderBridge::isItemCopyable() const  { -	return FALSE; +	// Can copy folders to paste-as-link, but not for straight paste. +	return TRUE;  }  BOOL LLFolderBridge::copyToClipboard() const @@ -2500,7 +2508,6 @@ void LLFolderBridge::pasteLinkFromClipboard()  			 ++iter)  		{  			const LLUUID &object_id = (*iter); -#if SUPPORT_ENSEMBLES  			if (LLInventoryCategory *cat = model->getCategory(object_id))  			{  				link_inventory_item( @@ -2511,19 +2518,17 @@ void LLFolderBridge::pasteLinkFromClipboard()  					LLAssetType::AT_LINK_FOLDER,  					LLPointer<LLInventoryCallback>(NULL));  			} -			else -#endif -				if (LLInventoryItem *item = model->getItem(object_id)) -				{ -					link_inventory_item( -						gAgent.getID(), -						item->getLinkedUUID(), -						parent_id, -						item->getName(), +			else if (LLInventoryItem *item = model->getItem(object_id)) +			{ +				link_inventory_item( +					gAgent.getID(), +					item->getLinkedUUID(), +					parent_id, +					item->getName(),  						item->getDescription(), -						LLAssetType::AT_LINK, -						LLPointer<LLInventoryCallback>(NULL)); -				} +					LLAssetType::AT_LINK, +					LLPointer<LLInventoryCallback>(NULL)); +			}  		}  	}  } @@ -3333,7 +3338,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  			disabled_items.push_back(std::string("Share"));  		} -		items.push_back(std::string("Open")); +		addOpenRightClickMenuOption(items);  		items.push_back(std::string("Properties"));  		getClipboardEntries(true, items, disabled_items, flags); @@ -3699,7 +3704,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		{  			disabled_items.push_back(std::string("Share"));  		} -		items.push_back(std::string("Open")); +		addOpenRightClickMenuOption(items);  		items.push_back(std::string("Properties"));  		getClipboardEntries(true, items, disabled_items, flags); @@ -3978,7 +3983,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		if (!is_sidepanel)  		{ -			items.push_back(std::string("Open")); +			addOpenRightClickMenuOption(items);  			items.push_back(std::string("Properties"));  		} @@ -4716,7 +4721,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		if (can_open && !is_sidepanel)  		{ -			items.push_back(std::string("Open")); +			addOpenRightClickMenuOption(items);  		}  		if (!is_sidepanel) @@ -5177,9 +5182,13 @@ const LLUUID &LLLinkFolderBridge::getFolderID() const  // static  void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type, -								   const LLUUID& uuid,LLInventoryModel* model) +								   const LLUUID& uuid, +								   LLInventoryModel* model)  { -	LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); +	// Perform indirection in case of link. +	const LLUUID& linked_uuid = gInventory.getLinkedItemID(uuid); + +	LLInvFVBridgeAction* action = createAction(asset_type,linked_uuid,model);  	if(action)  	{  		action->doIt(); @@ -5292,7 +5301,8 @@ protected:  }; -class LLNotecardBridgeAction: public LLInvFVBridgeAction +class LLNotecardBridgeAction +: public LLInvFVBridgeAction  {  	friend class LLInvFVBridgeAction;  public: diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index f378d219f6..de63bdd76b 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -135,7 +135,7 @@ protected:  											menuentry_vec_t &disabled_items);  	virtual void addDeleteContextMenuOptions(menuentry_vec_t &items,  											 menuentry_vec_t &disabled_items); - +	virtual void addOpenRightClickMenuOption(menuentry_vec_t &items);  protected:  	LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index d03a492cd1..2c26bada20 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -3624,14 +3624,14 @@ void LLSelectMgr::sendAttach(U8 attachment_point)  		return;  	} -#if ENABLE_MULTIATTACHMENTS -	attachment_point |= ATTACHMENT_ADD; -#endif  	BOOL build_mode = LLToolMgr::getInstance()->inEdit();  	// Special case: Attach to default location for this object.  	if (0 == attachment_point ||  		get_if_there(gAgentAvatarp->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL))  	{ +#if ENABLE_MULTIATTACHMENTS +		attachment_point |= ATTACHMENT_ADD; +#endif  		sendListToRegions(  			"ObjectAttach",  			packAgentIDAndSessionAndAttachment,  diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3d042a8d8c..5dd9623955 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1091,7 +1091,7 @@ void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)  		////////////////////////////////////////////////////////////////////////////////  		// Special handling for various types. -		const LLAssetType::EType asset_type = item->getType(); +		const LLAssetType::EType asset_type = item->getActualType();  		if (check_offer_throttle(from_name, false)) // If we are throttled, don't display  		{  			LL_DEBUGS("Messaging") << "Highlighting inventory item: " << item->getUUID()  << LL_ENDL; diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 5e1f6b58e8..11459ad0e6 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -410,6 +410,14 @@           parameter="open" />      </menu_item_call>      <menu_item_call +     label="Open Original" +     layout="topleft" +     name="Open Original"> +        <menu_item_call.on_click +         function="Inventory.DoToSelected" +         parameter="open_original" /> +    </menu_item_call> +    <menu_item_call       label="Properties"       layout="topleft"       name="Properties"> diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 27d66945d9..46625144e1 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -3,7 +3,7 @@   background_visible="true"   default_tab_group="1"   follows="all" - height="408" + height="423"   label="Things"   layout="topleft"   min_height="350" @@ -48,7 +48,7 @@     left="10"     max_length="300"     name="inventory search editor" -   top="3" +   top="18"     width="303" />    <tab_container       bg_alpha_color="DkGray" | 
