summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llinventorygallery.cpp20
-rw-r--r--indra/newview/llinventorypanel.cpp39
-rw-r--r--indra/newview/llpanelmaininventory.cpp9
3 files changed, 56 insertions, 12 deletions
diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp
index fa50261c9b..271cc3e037 100644
--- a/indra/newview/llinventorygallery.cpp
+++ b/indra/newview/llinventorygallery.cpp
@@ -1254,12 +1254,26 @@ void LLInventoryGallery::onFocusReceived()
// inventory now handles cut/copy/paste/delete
gEditMenuHandler = this;
- LLPanel::onFocusReceived();
-
+ // Tab support, when tabbing into this view, select first item
if (mSelectedItemID.notNull() && mItemMap[mSelectedItemID])
{
- mItemMap[mSelectedItemID]->setSelected(true);
+ LLInventoryGalleryItem* focus_item = mItemMap[mSelectedItemID];
+ focus_item->setSelected(true);
+ focus_item->setFocus(TRUE);
}
+ else if (mIndexToItemMap.size() > 0)
+ {
+ // choose any items from visible rect
+ S32 vert_offset = mScrollPanel->getDocPosVertical();
+ S32 panel_size = mVerticalGap + mRowPanelHeight;
+ S32 n = llclamp((S32)(vert_offset / panel_size) * mItemsInRow, 0, (S32)(mIndexToItemMap.size() - 1) );
+
+ LLInventoryGalleryItem* focus_item = mIndexToItemMap[n];
+ changeItemSelection(focus_item->getUUID(), true);
+ focus_item->setFocus(TRUE);
+ }
+
+ LLPanel::onFocusReceived();
}
void LLInventoryGallery::showContextMenu(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& item_id)
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 95f15c9c55..54f91451ac 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1449,6 +1449,45 @@ 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();
}
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 27c8f10889..b63d6b9308 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -2322,20 +2322,11 @@ void LLPanelMainInventory::onCombinationRootChanged(bool gallery_clicked)
void LLPanelMainInventory::onCombinationGallerySelectionChanged(const LLUUID& category_id)
{
- if(category_id != LLUUID::null)
- {
- mCombinationInventoryPanel->unSelectAll();
- }
}
void LLPanelMainInventory::onCombinationInventorySelectionChanged(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
{
onSelectionChange(mCombinationInventoryPanel, items, user_action);
-
- if(!items.empty())
- {
- mCombinationGalleryPanel->clearSelection();
- }
}
void LLPanelMainInventory::updatePanelVisibility()