working on normal EXT-4261 Cannot use Keyboard to navigate to search result in my landmarks tab

--HG--
branch : product-engine
meow-7.2.2
Ychebotarev ProductEngine 2010-01-28 08:22:26 +02:00
parent 15a92d2426
commit ab68d36518
4 changed files with 124 additions and 0 deletions

View File

@ -1508,10 +1508,26 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
{
if (next == last_selected)
{
//special case for LLAccordionCtrl
if(notifyParent(LLSD().with("action","select_next")) > 0 )//message was processed
{
clearSelection();
return TRUE;
}
return FALSE;
}
setSelection( next, FALSE, TRUE );
}
else
{
//special case for LLAccordionCtrl
if(notifyParent(LLSD().with("action","select_next")) > 0 )//message was processed
{
clearSelection();
return TRUE;
}
return FALSE;
}
}
scrollToShowSelection();
mSearchString.clear();
@ -1556,6 +1572,13 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
{
if (prev == this)
{
// If case we are in accordion tab notify parent to go to the previous accordion
if(notifyParent(LLSD().with("action","select_prev")) > 0 )//message was processed
{
clearSelection();
return TRUE;
}
return FALSE;
}
setSelection( prev, FALSE, TRUE );
@ -2241,6 +2264,83 @@ void LLFolderView::updateRenamerPosition()
}
}
bool LLFolderView::selectFirstItem()
{
for (folders_t::iterator iter = mFolders.begin();
iter != mFolders.end();)
{
LLFolderViewFolder* folder = (*iter );
if (folder->getVisible())
{
LLFolderViewItem* itemp = folder->getNextFromChild(0,true);
if(itemp)
setSelection(itemp,FALSE,TRUE);
return true;
}
}
for(items_t::iterator iit = mItems.begin();
iit != mItems.end(); ++iit)
{
LLFolderViewItem* itemp = (*iit);
if (itemp->getVisible())
{
setSelection(itemp,FALSE,TRUE);
return true;
}
}
return false;
}
bool LLFolderView::selectLastItem()
{
for(items_t::reverse_iterator iit = mItems.rbegin();
iit != mItems.rend(); ++iit)
{
LLFolderViewItem* itemp = (*iit);
if (itemp->getVisible())
{
setSelection(itemp,FALSE,TRUE);
return true;
}
}
for (folders_t::reverse_iterator iter = mFolders.rbegin();
iter != mFolders.rend();)
{
LLFolderViewFolder* folder = (*iter);
if (folder->getVisible())
{
LLFolderViewItem* itemp = folder->getPreviousFromChild(0,true);
if(itemp)
setSelection(itemp,FALSE,TRUE);
return true;
}
}
return false;
}
S32 LLFolderView::notify(const LLSD& info)
{
if(info.has("action"))
{
std::string str_action = info["action"];
if(str_action == "select_first")
{
setFocus(true);
selectFirstItem();
return 1;
}
else if(str_action == "select_last")
{
setFocus(true);
selectLastItem();
return 1;
}
}
return 0;
}
///----------------------------------------------------------------------------
/// Local function definitions

View File

@ -266,6 +266,8 @@ public:
LLPanel* getParentPanel() { return mParentPanel; }
// DEBUG only
void dumpSelectionInformation();
virtual S32 notify(const LLSD& info) ;
private:
void updateRenamerPosition();
@ -278,6 +280,9 @@ protected:
void finishRenamingItem( void );
void closeRenamer( void );
bool selectFirstItem();
bool selectLastItem();
protected:
LLHandle<LLView> mPopupMenuHandle;

View File

@ -143,6 +143,23 @@ void LLPlacesInventoryPanel::restoreFolderState()
getRootFolder()->scrollToShowSelection();
}
S32 LLPlacesInventoryPanel::notify(const LLSD& info)
{
if(info.has("action"))
{
std::string str_action = info["action"];
if(str_action == "select_first")
{
return getRootFolder()->notify(info);
}
else if(str_action == "select_last")
{
return getRootFolder()->notify(info);
}
}
return 0;
}
/************************************************************************/
/* PROTECTED METHODS */
/************************************************************************/

View File

@ -57,6 +57,8 @@ public:
void saveFolderState();
void restoreFolderState();
virtual S32 notify(const LLSD& info) ;
private:
LLSaveFolderState* mSavedFolderState;
};