diff --git a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp index 0b180f298..77e10d817 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp @@ -756,6 +756,11 @@ void SuggestionsController::handleTextChange() { const auto query = getEmojiQuery(); if (v::is(query)) { showWithQuery(query); + InvokeQueued(_container, [=] { + if (_shown) { + updateGeometry(); + } + }); return; } const auto text = v::get(query); @@ -811,11 +816,13 @@ SuggestionsQuery SuggestionsController::getEmojiQuery() { const auto imageName = format.toImageFormat().name(); if (const auto emoji = Emoji::FromUrl(imageName)) { _queryStartPosition = position - 1; + _emojiQueryLength = (position - from); return emoji; } continue; } _queryStartPosition = from; + _emojiQueryLength = 0; return fragment.text(); } return QString(); @@ -866,16 +873,23 @@ SuggestionsQuery SuggestionsController::getEmojiQuery() { void SuggestionsController::replaceCurrent( const QString &replacement, const QString &customEmojiData) { + const auto cursor = _field->textCursor(); + const auto position = cursor.position(); const auto suggestion = getEmojiQuery(); - const auto length = v::is(suggestion) - ? 1 - : v::get(suggestion).size(); - if (!length) { + if (v::is(suggestion)) { + const auto weak = Ui::MakeWeak(_container.get()); + const auto count = std::max(_emojiQueryLength, 1); + for (auto i = 0; i != count; ++i) { + const auto start = position - count + i; + _replaceCallback(start, start + 1, replacement, customEmojiData); + if (!weak) { + return; + } + } + } else if (v::get(suggestion).isEmpty()) { showWithQuery(QString()); } else { - const auto cursor = _field->textCursor(); - const auto position = cursor.position(); - const auto from = position - length; + const auto from = position - v::get(suggestion).size(); _replaceCallback(from, position, replacement, customEmojiData); } } diff --git a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.h b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.h index 8e2c5076a..97eef2d2b 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.h +++ b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.h @@ -192,6 +192,7 @@ private: bool _shown = false; bool _forceHidden = false; int _queryStartPosition = 0; + int _emojiQueryLength = 0; bool _ignoreCursorPositionChange = false; bool _textChangeAfterKeyPress = false; QPointer _field;