SL-20383 Fix scroll locking view

meow-7.2.2
Andrey Kleshchev 2023-10-02 21:44:31 +03:00 committed by akleshchev
parent c6f469a2b4
commit 18f3ecfc04
3 changed files with 50 additions and 39 deletions

View File

@ -217,6 +217,7 @@ public:
virtual void draw();
virtual void deleteAllChildren();
void stopAutoScollining() {mNeedsScroll = false;}
void scrollToShowSelection();
void scrollToShowItem(LLFolderViewItem* item, const LLRect& constraint_rect);
void setScrollContainer( LLScrollContainer* parent ) { mScrollContainer = parent; }

View File

@ -1449,45 +1449,6 @@ void LLInventoryPanel::onFocusReceived()
// inventory now handles cut/copy/paste/delete
LLEditMenuHandler::gEditMenuHandler = mFolderRoot.get();
// Tab support, when tabbing into this view, select first item
// (ideally needs to account for scroll)
bool select_first = mSelectThisID.isNull() && mFolderRoot.get() && mFolderRoot.get()->getSelectedCount() == 0;
if (select_first)
{
LLFolderViewFolder::folders_t::const_iterator folders_it = mFolderRoot.get()->getFoldersBegin();
LLFolderViewFolder::folders_t::const_iterator folders_end = mFolderRoot.get()->getFoldersEnd();
for (; folders_it != folders_end; ++folders_it)
{
const LLFolderViewFolder* folder_view = *folders_it;
if (folder_view->getVisible())
{
const LLFolderViewModelItemInventory* modelp = static_cast<const LLFolderViewModelItemInventory*>(folder_view->getViewModelItem());
setSelectionByID(modelp->getUUID(), TRUE);
select_first = false;
break;
}
}
}
if (select_first)
{
LLFolderViewFolder::items_t::const_iterator items_it = mFolderRoot.get()->getItemsBegin();
LLFolderViewFolder::items_t::const_iterator items_end = mFolderRoot.get()->getItemsEnd();
for (; items_it != items_end; ++items_it)
{
const LLFolderViewItem* item_view = *items_it;
if (item_view->getVisible())
{
const LLFolderViewModelItemInventory* modelp = static_cast<const LLFolderViewModelItemInventory*>(item_view->getViewModelItem());
setSelectionByID(modelp->getUUID(), TRUE);
break;
}
}
}
LLPanel::onFocusReceived();
}
@ -2258,6 +2219,53 @@ void LLInventorySingleFolderPanel::initFromParams(const Params& p)
LLPanel::initFromParams(mParams);
}
void LLInventorySingleFolderPanel::onFocusReceived()
{
// Tab support, when tabbing into this view, select first item
// (ideally needs to account for scroll)
bool select_first = mSelectThisID.isNull() && mFolderRoot.get() && mFolderRoot.get()->getSelectedCount() == 0;
if (select_first)
{
LLFolderViewFolder::folders_t::const_iterator folders_it = mFolderRoot.get()->getFoldersBegin();
LLFolderViewFolder::folders_t::const_iterator folders_end = mFolderRoot.get()->getFoldersEnd();
for (; folders_it != folders_end; ++folders_it)
{
const LLFolderViewFolder* folder_view = *folders_it;
if (folder_view->getVisible())
{
const LLFolderViewModelItemInventory* modelp = static_cast<const LLFolderViewModelItemInventory*>(folder_view->getViewModelItem());
setSelectionByID(modelp->getUUID(), TRUE);
// quick and dirty fix: don't scroll on switching focus
// todo: better 'tab' support, one that would work for LLInventoryPanel
mFolderRoot.get()->stopAutoScollining();
select_first = false;
break;
}
}
}
if (select_first)
{
LLFolderViewFolder::items_t::const_iterator items_it = mFolderRoot.get()->getItemsBegin();
LLFolderViewFolder::items_t::const_iterator items_end = mFolderRoot.get()->getItemsEnd();
for (; items_it != items_end; ++items_it)
{
const LLFolderViewItem* item_view = *items_it;
if (item_view->getVisible())
{
const LLFolderViewModelItemInventory* modelp = static_cast<const LLFolderViewModelItemInventory*>(item_view->getViewModelItem());
setSelectionByID(modelp->getUUID(), TRUE);
mFolderRoot.get()->stopAutoScollining();
break;
}
}
}
LLInventoryPanel::onFocusReceived();
}
void LLInventorySingleFolderPanel::initFolderRoot(const LLUUID& start_folder_id)
{
if(mRootInited) return;

View File

@ -404,6 +404,8 @@ public:
{};
void initFromParams(const Params& p);
void onFocusReceived() override;
bool isSelectionRemovable() { return false; }
void initFolderRoot(const LLUUID& start_folder_id = LLUUID::null);