diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2024-10-08 22:10:50 +0300 | 
|---|---|---|
| committer | Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> | 2025-03-19 21:55:01 +0200 | 
| commit | 5608c3998df99c9ea075c58f0f45fb23617ec2ed (patch) | |
| tree | 4cf77a6923fe69afef48800a219360a1a21ecec8 /indra/newview/llfloaterimsessiontab.cpp | |
| parent | 28638b31af625e59914e215af1cf7b0ad40b3fb6 (diff) | |
viewer#2270 The "More" button does not close the "Choose emoji" floater
Diffstat (limited to 'indra/newview/llfloaterimsessiontab.cpp')
| -rw-r--r-- | indra/newview/llfloaterimsessiontab.cpp | 42 | 
1 files changed, 40 insertions, 2 deletions
| diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 655674357f..50e765c236 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -39,6 +39,7 @@  #include "llchicletbar.h"  #include "lldraghandle.h"  #include "llemojidictionary.h" +#include "llemojihelper.h"  #include "llfloaterreg.h"  #include "llfloateremojipicker.h"  #include "llfloaterimsession.h" @@ -300,6 +301,8 @@ bool LLFloaterIMSessionTab::postBuild()      mEmojiPickerShowBtn = getChild<LLButton>("emoji_picker_show_btn");      mEmojiPickerShowBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerShowBtnClicked(); }); +    mEmojiPickerShowBtn->setMouseDownCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerShowBtnDown(); }); +    mEmojiCloseConn = LLEmojiHelper::instance().setCloseCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerClosed(); });      mGearBtn = getChild<LLButton>("gear_btn");      mAddBtn = getChild<LLButton>("add_btn"); @@ -532,8 +535,43 @@ void LLFloaterIMSessionTab::onEmojiRecentPanelToggleBtnClicked()  void LLFloaterIMSessionTab::onEmojiPickerShowBtnClicked()  { -    mInputEditor->setFocus(true); -    mInputEditor->showEmojiHelper(); +    if (!mEmojiPickerShowBtn->getToggleState()) +    { +        mInputEditor->hideEmojiHelper(); +        mInputEditor->setFocus(true); +        mInputEditor->showEmojiHelper(); +        mEmojiPickerShowBtn->setToggleState(true); // in case hideEmojiHelper closed a visible instance +    } +    else +    { +        mInputEditor->hideEmojiHelper(); +        mEmojiPickerShowBtn->setToggleState(false); +    } +} + +void LLFloaterIMSessionTab::onEmojiPickerShowBtnDown() +{ +    if (mEmojiHelperLastCallbackFrame == LLFrameTimer::getFrameCount()) +    { +        // Helper gets closed by focus lost event on Down before before onEmojiPickerShowBtnDown +        // triggers. +        // If this condition is true, user pressed button and it was 'toggled' during press, +        // restore 'toggled' state so that button will not reopen helper. +        mEmojiPickerShowBtn->setToggleState(true); +    } +} + +void LLFloaterIMSessionTab::onEmojiPickerClosed() +{ +    if (mEmojiPickerShowBtn->getToggleState()) +    { +        mEmojiPickerShowBtn->setToggleState(false); +        // Helper gets closed by focus lost event on Down before onEmojiPickerShowBtnDown +        // triggers. If mEmojiHelperLastCallbackFrame is set and matches Down, means close +        // was triggered by user's press. +        // A bit hacky, but I can't think of a better way to handle this without rewriting helper. +        mEmojiHelperLastCallbackFrame = LLFrameTimer::getFrameCount(); +    }  }  void LLFloaterIMSessionTab::initEmojiRecentPanel() | 
