diff options
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llfolderview.cpp | 67 | ||||
| -rw-r--r-- | indra/newview/llfolderview.h | 6 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 19 | 
4 files changed, 37 insertions, 75 deletions
| diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index cecb2ee6ad..6fdd71bfbf 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1012,7 +1012,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up  		addCOFItemLink(item_to_wear, do_update, cb);  		break;  	case LLAssetType::AT_OBJECT: -		rez_attachment(item_to_wear, NULL, replace); +		rez_attachment(item_to_wear, NULL);  		break;  	default: return false;;  	} @@ -1305,16 +1305,8 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id)  		return false;  	} -	// Check whether the outfit contains any non-worn wearables. -	LLInventoryModel::cat_array_t cats; -	LLInventoryModel::item_array_t items; -	LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ true); -	gInventory.collectDescendentsIf(outfit_cat_id, -		cats, -		items, -		LLInventoryModel::EXCLUDE_TRASH, -		not_worn); -	return items.size() > 0; +	// Check whether the outfit contains the full set of body parts (shape+skin+hair+eyes). +	return getCanMakeFolderIntoOutfit(outfit_cat_id);  }  void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category) @@ -1836,9 +1828,9 @@ void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool  	llinfos << "wearInventoryCategory( " << category->getName()  			 << " )" << llendl; -	callAfterCategoryFetch(category->getUUID(),boost::bind(&LLAppearanceMgr::wearCategoryFinal, -														   &LLAppearanceMgr::instance(), -														   category->getUUID(), copy, append)); +	callAfterCategoryFetch(category->getUUID(), boost::bind(&LLAppearanceMgr::wearCategoryFinal, +															&LLAppearanceMgr::instance(), +															category->getUUID(), copy, append));  }  void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append) diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index ab36a76153..81f00af948 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -62,7 +62,6 @@  #include "llviewerwindow.h"  #include "llvoavatar.h"  #include "llfloaterproperties.h" -#include "llnotificationsutil.h"  // Linden library includes  #include "lldbstrings.h" @@ -105,7 +104,6 @@ void copy_selected_item(void* user_data);  void open_selected_items(void* user_data);  void properties_selected_items(void* user_data);  void paste_items(void* user_data); -void renamer_focus_lost( LLFocusableElement* handler, void* user_data );  //--------------------------------------------------------------------------- @@ -185,6 +183,7 @@ LLFolderView::LLFolderView(const Params& p)  	mSourceID(p.task_id),  	mRenameItem( NULL ),  	mNeedsScroll( FALSE ), +	mEnableScroll( true ),  	mUseLabelSuffix(p.use_label_suffix),  	mPinningSelectedItem(FALSE),  	mNeedsAutoSelect( FALSE ), @@ -250,7 +249,7 @@ LLFolderView::LLFolderView(const Params& p)  	text_p.name(std::string(p.name));  	text_p.font(font);  	text_p.visible(false); -	text_p.parse_urls(true); +	text_p.allow_html(true);  	text_p.wrap(true); // allow multiline text. See EXT-7564, EXT-7047  	// set text padding the same as in People panel. EXT-7047, EXT-4837  	text_p.h_pad(STATUS_TEXT_HPAD); @@ -275,6 +274,8 @@ LLFolderView::LLFolderView(const Params& p)  // Destroys the object  LLFolderView::~LLFolderView( void )  { +	closeRenamer(); +  	// The release focus call can potentially call the  	// scrollcontainer, which can potentially be called with a partly  	// destroyed scollcontainer. Just null it out here, and no worries @@ -290,8 +291,6 @@ LLFolderView::~LLFolderView( void )  	LLView::deleteViewByHandle(mPopupMenuHandle); -	gViewerWindow->removePopup(mRenamer); -  	mAutoOpenItems.removeAllNodes();  	clearSelection();  	mItems.clear(); @@ -998,12 +997,7 @@ void LLFolderView::finishRenamingItem( void )  		mRenameItem->rename( mRenamer->getText() );  	} -	gViewerWindow->removePopup(mRenamer); - -	if( mRenameItem ) -	{ -		setSelectionFromRoot( mRenameItem, TRUE ); -	} +	closeRenamer();  	// List is re-sorted alphabeticly, so scroll to make sure the selected item is visible.  	scrollToShowSelection(); @@ -1011,31 +1005,15 @@ void LLFolderView::finishRenamingItem( void )  void LLFolderView::closeRenamer( void )  { -	// will commit current name (which could be same as original name) -	mRenamer->setFocus( FALSE ); -	mRenamer->setVisible( FALSE ); -	gViewerWindow->removePopup(mRenamer); - -	if( mRenameItem ) +	if (mRenamer && mRenamer->getVisible())  	{ -		setSelectionFromRoot( mRenameItem, TRUE ); -		mRenameItem = NULL; +		// Triggers onRenamerLost() that actually closes the renamer. +		gViewerWindow->removePopup(mRenamer);  	}  }  void LLFolderView::removeSelectedItems( void )  { -	if (mSelectedItems.empty()) return; -	LLSD args; -	args["QUESTION"] = LLTrans::getString(mSelectedItems.size() > 1 ? "DeleteItems" :  "DeleteItem"); -	LLNotificationsUtil::add("DeleteItems", args, LLSD(), boost::bind(&LLFolderView::onItemsRemovalConfirmation, this, _1, _2)); -} - -void LLFolderView::onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response) -{ -	S32 option = LLNotificationsUtil::getSelectedOption(notification, response); -	if (option != 0) return; // canceled -  	if(getVisible() && getEnabled())  	{  		// just in case we're removing the renaming item. @@ -1455,8 +1433,7 @@ void LLFolderView::startRenamingSelectedItem( void )  		mRenamer->setVisible( TRUE );  		// set focus will fail unless item is visible  		mRenamer->setFocus( TRUE ); -		mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1)); -		mRenamer->setFocusLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1)); +		mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this));  		gViewerWindow->addPopup(mRenamer);  	}  } @@ -1977,10 +1954,7 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  void LLFolderView::deleteAllChildren()  { -	if(mRenamer == gFocusMgr.getTopCtrl()) -	{ -		gViewerWindow->removePopup(mRenamer); -	} +	closeRenamer();  	LLView::deleteViewByHandle(mPopupMenuHandle);  	mPopupMenuHandle = LLHandle<LLView>();  	mRenamer = NULL; @@ -1991,9 +1965,7 @@ void LLFolderView::deleteAllChildren()  void LLFolderView::scrollToShowSelection()  { -	// If items are filtered while background fetch is in progress -	// scrollbar resets to the first filtered item. See EXT-3981. -	if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && mSelectedItems.size()) +	if (mEnableScroll && mSelectedItems.size())  	{  		mNeedsScroll = TRUE;  	} @@ -2465,13 +2437,20 @@ S32	LLFolderView::notify(const LLSD& info)  /// Local function definitions  ///---------------------------------------------------------------------------- -void LLFolderView::onRenamerLost( LLFocusableElement* renamer) +void LLFolderView::onRenamerLost()  { -	mRenameItem = NULL; -	LLUICtrl* uictrl = dynamic_cast<LLUICtrl*>(renamer); -	if (uictrl) +	if (mRenamer && mRenamer->getVisible())  	{ -		uictrl->setVisible(FALSE); +		mRenamer->setVisible(FALSE); + +		// will commit current name (which could be same as original name) +		mRenamer->setFocus(FALSE); +	} + +	if( mRenameItem ) +	{ +		setSelectionFromRoot( mRenameItem, TRUE ); +		mRenameItem = NULL;  	}  } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index f5f229a602..31352d04bf 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -274,6 +274,7 @@ public:  	void dumpSelectionInformation();  	virtual S32	notify(const LLSD& info) ; +	void setEnableScroll(bool enable_scroll) { mEnableScroll = enable_scroll; }  	bool useLabelSuffix() { return mUseLabelSuffix; }  private: @@ -283,7 +284,7 @@ protected:  	LLScrollContainer* mScrollContainer;  // NULL if this is not a child of a scroll container.  	void commitRename( const LLSD& data ); -	void onRenamerLost( LLFocusableElement* renamer); +	void onRenamerLost();  	void finishRenamingItem( void );  	void closeRenamer( void ); @@ -293,8 +294,6 @@ protected:  	BOOL addNoOptions(LLMenuGL* menu) const; -	void onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response); -  protected:  	LLHandle<LLView>					mPopupMenuHandle; @@ -310,6 +309,7 @@ protected:  	LLLineEditor*					mRenamer;  	BOOL							mNeedsScroll; +	bool							mEnableScroll;  	BOOL							mPinningSelectedItem;  	LLRect							mScrollConstraintRect;  	BOOL							mNeedsAutoSelect; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 53622f7188..9bbc6514b4 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3936,7 +3936,7 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action)  		item = (LLViewerInventoryItem*)gInventory.getItem(object_id);  		if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID()))  		{ -			rez_attachment(item, NULL, true); // Replace if "Wear"ing. +			rez_attachment(item, NULL);  		}  		else if(item && item->isFinished())  		{ @@ -3952,10 +3952,6 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action)  		}  		gFocusMgr.setKeyboardFocus(NULL);  	} -	else if ("wear_add" == action) -	{ -		LLAppearanceMgr::instance().wearItemOnAvatar(mUUID, true, false); // Don't replace if adding. -	}  	else if (isRemoveAction(action))  	{  		LLInventoryItem* item = gInventory.getItem(mUUID); @@ -4007,7 +4003,7 @@ std::string LLObjectBridge::getLabelSuffix() const  	}  } -void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment, bool replace) +void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment)  {  	LLSD payload;  	payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link. @@ -4026,14 +4022,9 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach  		}  	} -	if (!replace) -	{ -		attach_pt |= ATTACHMENT_ADD; -	} -  	payload["attachment_point"] = attach_pt; -	if (replace && +	if (!gSavedSettings.getBOOL("MultipleAttachments") &&  		(attachment && attachment->getNumObjects() > 0))  	{  		LLNotificationsUtil::add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez); @@ -4062,6 +4053,8 @@ bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& respon  		if (itemp)  		{  			U8 attachment_pt = notification["payload"]["attachment_point"].asInteger(); +			if (gSavedSettings.getBOOL("MultipleAttachments")) +				attachment_pt |= ATTACHMENT_ADD;  			LLMessageSystem* msg = gMessageSystem;  			msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv); @@ -4118,7 +4111,6 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  			{  				items.push_back(std::string("Wearable And Object Separator"));  				items.push_back(std::string("Wearable And Object Wear")); -				items.push_back(std::string("Wearable Add"));  				items.push_back(std::string("Attach To"));  				items.push_back(std::string("Attach To HUD"));  				// commented out for DEV-32347 @@ -4127,7 +4119,6 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  				if (!gAgentAvatarp->canAttachMoreObjects())  				{  					disabled_items.push_back(std::string("Wearable And Object Wear")); -					disabled_items.push_back(std::string("Wearable Add"));  					disabled_items.push_back(std::string("Attach To"));  					disabled_items.push_back(std::string("Attach To HUD"));  				} | 
