summaryrefslogtreecommitdiff
path: root/indra/llui/llscrolllistctrl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llscrolllistctrl.cpp')
-rw-r--r--indra/llui/llscrolllistctrl.cpp45
1 files changed, 20 insertions, 25 deletions
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index 95ea2cbc37..d263c25c72 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -143,7 +143,8 @@ LLScrollListText::LLScrollListText( const LLString& text, const LLFontGL* font,
mFontStyle( font_style ),
mWidth( width ),
mVisible( visible ),
- mHighlightChars( 0 )
+ mHighlightCount( 0 ),
+ mHighlightOffset( 0 )
{
if (use_color)
{
@@ -197,13 +198,14 @@ void LLScrollListText::drawToWidth(S32 width, const LLColor4& color, const LLCol
display_color = &color;
}
- if (mHighlightChars > 0)
+ if (mHighlightCount > 0)
{
mRoundedRectImage->bind();
glColor4fv(highlight_color.mV);
- gl_segmented_rect_2d_tex(-2,
+ S32 left = mFont->getWidth(mText.getString(), 0, mHighlightOffset);
+ gl_segmented_rect_2d_tex(left - 2,
llround(mFont->getLineHeight()) + 1,
- mFont->getWidth(mText.getString(), 0, mHighlightChars) + 1,
+ left + mFont->getWidth(mText.getString(), mHighlightOffset, mHighlightCount) + 1,
1,
mRoundedRectImage->getWidth(),
mRoundedRectImage->getHeight(),
@@ -1141,11 +1143,17 @@ BOOL LLScrollListCtrl::selectSimpleItemByPrefix(const LLWString& target, BOOL ca
{
LLWString::toLower(item_label);
}
+ // remove extraneous whitespace from searchable label
+ LLWString trimmed_label = item_label;
+ LLWString::trim(trimmed_label);
- BOOL select = item->getEnabled() && !item_label.compare(0, target_len, target_trimmed);
+ BOOL select = item->getEnabled() && trimmed_label.compare(0, target_trimmed.size(), target_trimmed) == 0;
if (select)
{
+ // find offset of matching text (might have leading whitespace)
+ S32 offset = item_label.find(target_trimmed);
+ cellp->highlightText(offset, target_trimmed.size());
selectItem(item);
found = TRUE;
break;
@@ -1447,6 +1455,9 @@ BOOL LLScrollListCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
{
BOOL handled = LLView::childrenHandleMouseDown(x, y, mask) != NULL;
+ // set keyboard focus first, in case click action wants to move focus elsewhere
+ setFocus(TRUE);
+
if( !handled && mCanSelect)
{
LLScrollListItem* hit_item = hitItem(x, y);
@@ -1539,8 +1550,6 @@ BOOL LLScrollListCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
}
}
- gFocusMgr.setKeyboardFocus(this, NULL);
-
return TRUE;
}
@@ -1739,7 +1748,7 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask, BOOL called_from_parent
LLScrollListCell* cellp = getFirstSelected()->getColumn(mSearchColumn);
if (cellp)
{
- cellp->highlightText(0);
+ cellp->highlightText(0, 0);
}
}
}
@@ -1748,13 +1757,6 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask, BOOL called_from_parent
// update search string only on successful match
mSearchTimer.reset();
- // highlight current search on matching item
- LLScrollListCell* cellp = getFirstSelected()->getColumn(mSearchColumn);
- if (cellp)
- {
- cellp->highlightText(mSearchString.size());
- }
-
if (mCommitOnKeyboardMovement
&& !mCommitOnSelectionChange)
{
@@ -1794,13 +1796,6 @@ BOOL LLScrollListCtrl::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_
mSearchString += uni_char;
mSearchTimer.reset();
- // highlight current search on matching item
- LLScrollListCell* cellp = getFirstSelected()->getColumn(mSearchColumn);
- if (cellp)
- {
- cellp->highlightText(mSearchString.size());
- }
-
if (mCommitOnKeyboardMovement
&& !mCommitOnSelectionChange)
{
@@ -1843,7 +1838,7 @@ BOOL LLScrollListCtrl::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_
if (item->getEnabled() && LLStringOps::toLower(item_label[0]) == uni_char)
{
selectItem(item);
- cellp->highlightText(1);
+ cellp->highlightText(0, 1);
mSearchTimer.reset();
if (mCommitOnKeyboardMovement
@@ -1906,7 +1901,7 @@ void LLScrollListCtrl::selectItem(LLScrollListItem* itemp, BOOL select_single_it
LLScrollListCell* cellp = mLastSelected->getColumn(mSearchColumn);
if (cellp)
{
- cellp->highlightText(0);
+ cellp->highlightText(0, 0);
}
}
if (select_single_item)
@@ -1934,7 +1929,7 @@ void LLScrollListCtrl::deselectItem(LLScrollListItem* itemp)
LLScrollListCell* cellp = itemp->getColumn(mSearchColumn);
if (cellp)
{
- cellp->highlightText(0);
+ cellp->highlightText(0, 0);
}
mSelectionChanged = TRUE;
}