diff options
| author | Oz Linden <oz@lindenlab.com> | 2012-08-14 08:50:23 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2012-08-14 08:50:23 -0400 | 
| commit | 9f6503a1fc1145e886cad0aaf9b964e32e6c5449 (patch) | |
| tree | 051874a314d92664f73e478b7b4621c6c153b650 /indra | |
| parent | 2c2167229eac3efd7e7b1c5eafde8ee2e66184cd (diff) | |
| parent | f72c1d64c2f09cd1d8b003a61b6892b4c7686723 (diff) | |
merge changes for DRTVWR-192
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llfolderview.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llfolderview.h | 2 | ||||
| -rw-r--r-- | indra/newview/llfolderviewitem.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfolderviewitem.h | 1 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 6 | 
5 files changed, 37 insertions, 10 deletions
| diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7d047ec67e..d4080ab3f7 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -2235,14 +2235,9 @@ void LLFolderView::doIdle()  		arrangeAll();  	} -	mNeedsAutoSelect = mFilter->hasFilterString() && -							!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture()); - -		 -	if (mFilter->isModified() && mFilter->isNotDefault()) -	{ -		mNeedsAutoSelect = TRUE; -	} +	BOOL filter_modified_and_active = mFilter->isModified() && mFilter->isNotDefault(); +	mNeedsAutoSelect = filter_modified_and_active && +						!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());  	mFilter->clearModified();  	// filter to determine visibility before arranging @@ -2254,7 +2249,7 @@ void LLFolderView::doIdle()  		LLFastTimer t3(FTM_AUTO_SELECT);  		// select new item only if a filtered item not currently selected  		LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back(); -		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyFiltered())) +		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyVisible()))  		{  			// these are named variables to get around gcc not binding non-const references to rvalues  			// and functor application is inherently non-const to allow for stateful functors @@ -2264,7 +2259,7 @@ void LLFolderView::doIdle()  		// Open filtered folders for folder views with mAutoSelectOverride=TRUE.  		// Used by LLPlacesFolderView. -		if (mAutoSelectOverride && !mFilter->getFilterSubString().empty()) +		if (!mFilter->getFilterSubString().empty())  		{  			// these are named variables to get around gcc not binding non-const references to rvalues  			// and functor application is inherently non-const to allow for stateful functors @@ -2556,6 +2551,25 @@ void LLFolderView::onRenamerLost()  	}  } +LLFolderViewItem* LLFolderView::getNextUnselectedItem() +{ +	LLFolderViewItem* last_item = *mSelectedItems.rbegin(); +	LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE); +	while(new_selection && new_selection->isSelected()) +	{ +		new_selection = new_selection->getNextOpenNode(FALSE); +	} +	if (!new_selection) +	{ +		new_selection = last_item->getPreviousOpenNode(FALSE); +		while (new_selection && (new_selection->isInSelection())) +		{ +			new_selection = new_selection->getPreviousOpenNode(FALSE); +		} +	} +	return new_selection; +} +  LLInventoryFilter* LLFolderView::getFilter()  {  	return mFilter; diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index da8bb15f8e..3f78312a98 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -207,6 +207,8 @@ public:  	virtual void	doDelete();  	virtual BOOL	canDoDelete() const; +	LLFolderViewItem* getNextUnselectedItem(); +	  	// Public rename functionality - can only start the process  	void startRenamingSelectedItem( void ); diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 515e544452..3aa16b4413 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -1098,6 +1098,10 @@ void LLFolderViewItem::draw()  	}  } +bool LLFolderViewItem::isInSelection() const +{ +	return mIsSelected || (mParentFolder && mParentFolder->isInSelection()); +}  ///----------------------------------------------------------------------------  /// Class LLFolderViewFolder diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 3c7592046a..577b6b54a2 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -243,6 +243,7 @@ public:  	virtual void destroyView();  	BOOL isSelected() const { return mIsSelected; } +	bool isInSelection() const;  	void setUnselected() { mIsSelected = FALSE; } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b86c453d61..b819100b9b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1355,7 +1355,10 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)  	else if ("cut" == action)  	{  		cutToClipboard(); +		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI. +		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();  		LLFolderView::removeCutItems(); +		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);  		return;  	}  	else if ("copy" == action) @@ -2743,7 +2746,10 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)  	else if ("cut" == action)  	{  		cutToClipboard(); +		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI. +		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();  		LLFolderView::removeCutItems(); +		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);  		return;  	}  	else if ("copy" == action) | 
