diff options
| -rw-r--r-- | indra/llui/llfolderview.h | 16 | ||||
| -rw-r--r-- | indra/newview/llinventoryfunctions.cpp | 10 | 
2 files changed, 18 insertions, 8 deletions
| diff --git a/indra/llui/llfolderview.h b/indra/llui/llfolderview.h index 525efe425a..d4a1434c73 100644 --- a/indra/llui/llfolderview.h +++ b/indra/llui/llfolderview.h @@ -341,16 +341,28 @@ public:  	virtual void doItem(LLFolderViewItem* item) = 0;  }; +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLSelectFirstFilteredItem +// +// This will select the first *item* found in the hierarchy. If no item can be +// selected, the first matching folder will. +// Since doFolder() is done first but we prioritize item selection, we let the  +// first filtered folder set the selection and raise a folder flag. +// The selection might be overridden by the first filtered item in doItem()   +// which checks an item flag. Since doFolder() checks the item flag too, the first +// item will still be selected if items were to be done first and folders second. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  class LLSelectFirstFilteredItem : public LLFolderViewFunctor  {  public: -	LLSelectFirstFilteredItem() : mItemSelected(FALSE) {} +	LLSelectFirstFilteredItem() : mItemSelected(FALSE), mFolderSelected(FALSE) {}  	virtual ~LLSelectFirstFilteredItem() {}  	virtual void doFolder(LLFolderViewFolder* folder);  	virtual void doItem(LLFolderViewItem* item); -	BOOL wasItemSelected() { return mItemSelected; } +	BOOL wasItemSelected() { return mItemSelected || mFolderSelected; }  protected:  	BOOL mItemSelected; +	BOOL mFolderSelected;  };  class LLOpenFilteredFolders : public LLFolderViewFunctor diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 1426567196..6474d56414 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -1031,14 +1031,12 @@ void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item)  void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder)  { -	if (folder->LLFolderViewItem::passedFilter() && !mItemSelected) +	// Skip if folder or item already found, if not filtered or if no parent (root folder is not selectable) +	if (!mFolderSelected && !mItemSelected && folder->LLFolderViewItem::passedFilter() && folder->getParentFolder())  	{  		folder->getRoot()->setSelection(folder, FALSE, FALSE); -		if (folder->getParentFolder()) -		{ -			folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); -		} -		mItemSelected = TRUE; +		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); +		mFolderSelected = TRUE;  	}  } | 
