diff options
| -rw-r--r-- | indra/llui/llemojihelper.cpp | 5 | ||||
| -rw-r--r-- | indra/llui/llemojihelper.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelemojicomplete.cpp | 48 | ||||
| -rw-r--r-- | indra/newview/llpanelemojicomplete.h | 1 | 
4 files changed, 51 insertions, 5 deletions
diff --git a/indra/llui/llemojihelper.cpp b/indra/llui/llemojihelper.cpp index d4c31ee986..54c801ab7b 100644 --- a/indra/llui/llemojihelper.cpp +++ b/indra/llui/llemojihelper.cpp @@ -98,6 +98,11 @@ void LLEmojiHelper::showHelper(LLUICtrl* hostctrl_p, S32 local_x, S32 local_y, c  void LLEmojiHelper::hideHelper(const LLUICtrl* ctrl_p)  { +	if (ctrl_p && !isActive(ctrl_p)) +	{ +		return; +	} +  	setHostCtrl(nullptr);  } diff --git a/indra/llui/llemojihelper.h b/indra/llui/llemojihelper.h index 7ed042fc5f..63f5c640c9 100644 --- a/indra/llui/llemojihelper.h +++ b/indra/llui/llemojihelper.h @@ -45,7 +45,7 @@ public:  	bool        isActive(const LLUICtrl* ctrl_p) const;  	static bool isCursorInEmojiCode(const LLWString& wtext, S32 cursor_pos, S32* short_code_pos_p = nullptr);  	void        showHelper(LLUICtrl* hostctrl_p, S32 local_x, S32 local_y, const std::string& short_code, std::function<void(LLWString)> commit_cb); -	void        hideHelper(const LLUICtrl* ctrl_p); +	void        hideHelper(const LLUICtrl* ctrl_p = nullptr);  	// Eventing  	bool handleKey(const LLUICtrl* ctrl_p, KEY key, MASK mask); diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index f6823befac..61b08ad48d 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -27,6 +27,7 @@  #include "llviewerprecompiledheaders.h"  #include "llemojidictionary.h" +#include "llemojihelper.h"  #include "llpanelemojicomplete.h"  #include "lluictrlfactory.h" @@ -101,9 +102,9 @@ BOOL LLPanelEmojiComplete::handleHover(S32 x, S32 y, MASK mask)  BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent)  { +	bool handled = false;  	if (MASK_NONE == mask)  	{ -		bool handled = false;  		switch (key)  		{  			case KEY_LEFT: @@ -116,11 +117,24 @@ BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent  				selectNext();  				handled = true;  				break; +			case KEY_RETURN: +				if (!mEmojis.empty()) +				{ +					LLWString wstr; +					wstr.push_back(mEmojis.at(mCurSelected)); +					setValue(wstring_to_utf8str(wstr)); +					onCommit(); +					handled = true; +				} +				break;  		} -		return handled;  	} -	return false; +	if (handled) +	{ +		return TRUE; +	} +	return LLUICtrl::handleKey(key, mask, called_from_parent);  }  void LLPanelEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent) @@ -223,6 +237,26 @@ LLFloaterEmojiComplete::LLFloaterEmojiComplete(const LLSD& sdKey)  	setIsChrome(true);  } +BOOL LLFloaterEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent) +{ +	bool handled = false; +	if (MASK_NONE == mask) +	{ +		switch (key) +		{ +			case KEY_ESCAPE: +				LLEmojiHelper::instance().hideHelper(); +				handled = true; +				break; +		} + +	} + +	if (handled) +		return TRUE; +	return LLFloater::handleKey(key, mask, called_from_parent); +} +  void LLFloaterEmojiComplete::onOpen(const LLSD& key)  {  	mEmojiCtrl->setEmojiHint(key["hint"].asString()); @@ -231,9 +265,15 @@ void LLFloaterEmojiComplete::onOpen(const LLSD& key)  BOOL LLFloaterEmojiComplete::postBuild()  {  	mEmojiCtrl = findChild<LLPanelEmojiComplete>("emoji_complete_ctrl"); +	mEmojiCtrl->setCommitCallback( +		std::bind([&](const LLSD& sdValue) +		{ +			setValue(sdValue); +			onCommit(); +		}, std::placeholders::_2));  	mEmojiCtrlHorz = getRect().getWidth() - mEmojiCtrl->getRect().getWidth(); -	return TRUE; +	return LLFloater::postBuild();  }  void LLFloaterEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent) diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h index b389ac9d53..361a2dc9b7 100644 --- a/indra/newview/llpanelemojicomplete.h +++ b/indra/newview/llpanelemojicomplete.h @@ -98,6 +98,7 @@ public:  	LLFloaterEmojiComplete(const LLSD& sdKey);  public: +	BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override;  	void onOpen(const LLSD& key) override;  	BOOL postBuild() override;  	void reshape(S32 width, S32 height, BOOL called_from_parent) override;  | 
