SH-4611 FIX - use an observer to scroll after category rename completes
parent
0384d57972
commit
8f4c4db90f
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue