From b976aa0872bb3c546c13491cc357e7aac44a38f0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 4 Jul 2022 10:14:24 +0400 Subject: [PATCH] Support custom emoji in chats list entries. --- .../data/stickers/data_custom_emoji.cpp | 2 +- .../dialogs/dialogs_inner_widget.cpp | 2 ++ .../SourceFiles/dialogs/ui/dialogs_layout.cpp | 17 +++++++++++++++-- .../dialogs/ui/dialogs_message_view.cpp | 11 ++++++++++- Telegram/SourceFiles/history/history.h | 2 +- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp index a288db74a..8858ad405 100644 --- a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp +++ b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp @@ -309,7 +309,7 @@ auto CustomEmojiLoader::InitialState( if (!document->isNull()) { return Lookup{ document }; } - return Resolve(); + return Resolve{ .entityData = SerializeCustomEmojiId(id) }; } void CustomEmojiLoader::cancel() { diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index dcfea87a4..f8c46f8de 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -406,6 +406,8 @@ void InnerWidget::changeOpenedFolder(Data::Folder *folder) { void InnerWidget::paintEvent(QPaintEvent *e) { Painter p(this); + p.setInactive( + _controller->isGifPausedAtLeastFor(Window::GifPauseReason::Any)); const auto r = e->rect(); if (_controller->widget()->contentOverlapped(this, r)) { return; diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp index 638107a4c..d62bfac13 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" #include "ui/unread_badge.h" #include "ui/ui_utility.h" +#include "core/ui_integration.h" #include "lang/lang_keys.h" #include "support/support_helper.h" #include "main/main_session.h" @@ -455,6 +456,7 @@ void paintRow( if (!ShowSendActionInDialogs(history) || !history->sendActionPainter()->paint(p, nameleft, texttop, availableWidth, fullWidth, color, ms)) { if (history->cloudDraftTextCache.isEmpty()) { + using namespace TextUtilities; auto draftWrapped = Text::PlainLink( tr::lng_dialogs_text_from_wrapped( tr::now, @@ -468,12 +470,23 @@ void paintRow( lt_from_part, draftWrapped, lt_message, - { .text = draft->textWithTags.text }, + { + .text = draft->textWithTags.text, + .entities = ConvertTextTagsToEntities( + draft->textWithTags.tags), + }, Text::WithEntities); + const auto context = Core::MarkedTextContext{ + .session = &history->session(), + .customEmojiRepaint = [=] { + history->updateChatListEntry(); + }, + }; history->cloudDraftTextCache.setMarkedText( st::dialogsTextStyle, draftText, - DialogTextOptions()); + DialogTextOptions(), + context); } p.setPen(active ? st::dialogsTextFgActive : (selected ? st::dialogsTextFgOver : st::dialogsTextFg)); if (supportMode) { diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp index 0f814de79..6b8a83902 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_options.h" #include "ui/text/text_utilities.h" #include "ui/image/image.h" +#include "core/ui_integration.h" #include "lang/lang_keys.h" #include "styles/style_dialogs.h" @@ -126,10 +127,18 @@ void MessageView::paint( _senderCache = { st::dialogsTextWidthMin }; } TextUtilities::Trim(preview.text); + const auto history = item->history(); + const auto context = Core::MarkedTextContext{ + .session = &history->session(), + .customEmojiRepaint = [=] { + history->updateChatListEntry(); + }, + }; _textCache.setMarkedText( st::dialogsTextStyle, preview.text, - DialogTextOptions()); + DialogTextOptions(), + context); _textCachedFor = item; _imagesCache = std::move(preview.images); if (preview.loadingContext.has_value()) { diff --git a/Telegram/SourceFiles/history/history.h b/Telegram/SourceFiles/history/history.h index 6de30b3eb..c5e8d562e 100644 --- a/Telegram/SourceFiles/history/history.h +++ b/Telegram/SourceFiles/history/history.h @@ -483,7 +483,7 @@ public: private: friend class HistoryBlock; - enum class Flag { + enum class Flag : uchar { HasPendingResizedItems = (1 << 0), UnreadThingsKnown = (1 << 1), };