SH-4611 FIX - use an observer to scroll after category rename completes

master
Brad Payne (Vir Linden) 2013-11-23 09:37:09 -05:00
parent 0384d57972
commit 8f4c4db90f
4 changed files with 78 additions and 1 deletions

View File

@ -701,8 +701,9 @@ void LLFolderView::finishRenamingItem( void )
closeRenamer();
// This is moved to an inventory observer in llinventorybridge.cpp, to handle updating after operation completed in AISv3 (SH-4611).
// List is re-sorted alphabetically, so scroll to make sure the selected item is visible.
scrollToShowSelection();
//scrollToShowSelection();
}
void LLFolderView::closeRenamer( void )

View File

@ -2984,8 +2984,45 @@ std::string LLFolderBridge::getLabelSuffix() const
: LLStringUtil::null;
}
class ScrollOnRenameObserver: public LLInventoryObserver
{
public:
LLFolderView *mView;
LLUUID mUUID;
ScrollOnRenameObserver(const LLUUID& uuid, LLFolderView *view):
mUUID(uuid),
mView(view)
{
}
void changed(U32 mask)
{
if (mask & LLInventoryObserver::LABEL)
{
// TODO - check for whether this is the item we're waiting for a rename of
const uuid_set_t& changed_item_ids = gInventory.getChangedIDs();
for (uuid_set_t::const_iterator it = changed_item_ids.begin(); it != changed_item_ids.end(); ++it)
{
const LLUUID& id = *it;
if (id == mUUID)
{
mView->scrollToShowSelection();
gInventory.removeObserver(this);
delete this;
return;
}
}
}
}
};
BOOL LLFolderBridge::renameItem(const std::string& new_name)
{
LLScrollOnRenameObserver *observer = new LLScrollOnRenameObserver(mUUID, mRoot);
gInventory.addObserver(observer);
rename_category(getInventoryModel(), mUUID, new_name);
// return FALSE because we either notified observers (& therefore

View File

@ -701,3 +701,24 @@ LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData(
{
mItemNameHash.finalize();
}
void LLScrollOnRenameObserver::changed(U32 mask)
{
if (mask & LLInventoryObserver::LABEL)
{
// TODO - check for whether this is the item we're waiting for a rename of
const uuid_set_t& changed_item_ids = gInventory.getChangedIDs();
for (uuid_set_t::const_iterator it = changed_item_ids.begin(); it != changed_item_ids.end(); ++it)
{
const LLUUID& id = *it;
if (id == mUUID)
{
mView->scrollToShowSelection();
gInventory.removeObserver(this);
delete this;
return;
}
}
}
}

View File

@ -287,4 +287,22 @@ protected:
category_map_t mCategoryMap;
};
class LLFolderView;
// Force a FolderView to scroll after an item in the corresponding view has been renamed.
class LLScrollOnRenameObserver: public LLInventoryObserver
{
public:
LLFolderView *mView;
LLUUID mUUID;
LLScrollOnRenameObserver(const LLUUID& uuid, LLFolderView *view):
mUUID(uuid),
mView(view)
{
}
/* virtual */ void changed(U32 mask);
};
#endif // LL_LLINVENTORYOBSERVERS_H