diff options
| -rw-r--r-- | .hgtags | 1 | ||||
| -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 | 
6 files changed, 38 insertions, 10 deletions
| @@ -351,3 +351,4 @@ ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5  a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1  9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 +421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192 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) | 
