#779 Emoji picker is an unintuitive UX disaster

meow-7.2.2
Alexander Gavriliuk 2024-02-12 19:01:00 +01:00 committed by Andrey Lihatskiy
parent b4e29ec0e9
commit 1820095dd4
2 changed files with 61 additions and 9 deletions

View File

@ -953,6 +953,43 @@ void LLFloaterEmojiPicker::selectFocusedIcon()
}
}
bool LLFloaterEmojiPicker::moveFocusedIconUp()
{
for (S32 i = mFocusedIconRow - 1; i >= 0; --i)
{
LLScrollingPanel* panel = mEmojiGrid->getPanelList()[i];
LLEmojiGridRow* row = dynamic_cast<LLEmojiGridRow*>(panel);
if (row && row->mList->getPanelList().size() > mFocusedIconCol)
{
mEmojiScroll->scrollToShowRect(row->getBoundingRect());
mFocusedIconRow = i;
selectFocusedIcon();
return true;
}
}
return false;
}
bool LLFloaterEmojiPicker::moveFocusedIconDown()
{
S32 rowCount = mEmojiGrid->getPanelList().size();
for (S32 i = mFocusedIconRow + 1; i < rowCount; ++i)
{
LLScrollingPanel* panel = mEmojiGrid->getPanelList()[i];
LLEmojiGridRow* row = dynamic_cast<LLEmojiGridRow*>(panel);
if (row && row->mList->getPanelList().size() > mFocusedIconCol)
{
mEmojiScroll->scrollToShowRect(row->getBoundingRect());
mFocusedIconRow = i;
selectFocusedIcon();
return true;
}
}
return false;
}
bool LLFloaterEmojiPicker::moveFocusedIconPrev()
{
if (mHoveredIcon)
@ -1031,6 +1068,28 @@ void LLFloaterEmojiPicker::unselectGridIcon(LLEmojiGridIcon* icon)
BOOL LLFloaterEmojiPicker::handleKey(KEY key, MASK mask, BOOL called_from_parent)
{
if (mask == MASK_NONE)
{
switch (key)
{
case KEY_UP:
moveFocusedIconUp();
return TRUE;
case KEY_DOWN:
moveFocusedIconDown();
return TRUE;
case KEY_LEFT:
moveFocusedIconPrev();
return TRUE;
case KEY_RIGHT:
moveFocusedIconNext();
return TRUE;
case KEY_ESCAPE:
hideFloater();
return TRUE;
}
}
if (mask == MASK_ALT)
{
switch (key)
{
@ -1040,15 +1099,6 @@ BOOL LLFloaterEmojiPicker::handleKey(KEY key, MASK mask, BOOL called_from_parent
case KEY_RIGHT:
selectEmojiGroup((mSelectedGroupIndex + 1) % mGroupButtons.size());
return TRUE;
case KEY_UP:
moveFocusedIconPrev();
return TRUE;
case KEY_DOWN:
moveFocusedIconNext();
return TRUE;
case KEY_ESCAPE:
hideFloater();
return TRUE;
}
}

View File

@ -85,6 +85,8 @@ private:
void onEmojiMouseUp(LLUICtrl* ctrl);
void selectFocusedIcon();
bool moveFocusedIconUp();
bool moveFocusedIconDown();
bool moveFocusedIconPrev();
bool moveFocusedIconNext();