mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-09-05 08:55:59 +00:00
Support entities in star gift messages.
This commit is contained in:
@@ -423,18 +423,14 @@ Fn<void(QString now, Fn<void(QString)> save)> DefaultEditLanguageCallback(
|
||||
};
|
||||
}
|
||||
|
||||
void InitMessageFieldHandlers(
|
||||
not_null<Main::Session*> session,
|
||||
std::shared_ptr<Main::SessionShow> show,
|
||||
not_null<Ui::InputField*> field,
|
||||
Fn<bool()> customEmojiPaused,
|
||||
Fn<bool(not_null<DocumentData*>)> allowPremiumEmoji,
|
||||
const style::InputField *fieldStyle) {
|
||||
const auto paused = [customEmojiPaused] {
|
||||
return customEmojiPaused && customEmojiPaused();
|
||||
void InitMessageFieldHandlers(MessageFieldHandlersArgs &&args) {
|
||||
const auto paused = [passed = args.customEmojiPaused] {
|
||||
return passed && passed();
|
||||
};
|
||||
const auto field = args.field;
|
||||
const auto session = args.session;
|
||||
field->setTagMimeProcessor(
|
||||
FieldTagMimeProcessor(session, allowPremiumEmoji));
|
||||
FieldTagMimeProcessor(session, args.allowPremiumEmoji));
|
||||
field->setCustomTextContext([=](Fn<void()> repaint) {
|
||||
return std::any(Core::MarkedTextContext{
|
||||
.session = session,
|
||||
@@ -448,12 +444,14 @@ void InitMessageFieldHandlers(
|
||||
field->setInstantReplaces(Ui::InstantReplaces::Default());
|
||||
field->setInstantReplacesEnabled(
|
||||
Core::App().settings().replaceEmojiValue());
|
||||
field->setMarkdownReplacesEnabled(true);
|
||||
if (show) {
|
||||
field->setMarkdownReplacesEnabled(rpl::single(Ui::MarkdownEnabledState{
|
||||
Ui::MarkdownEnabled{ std::move(args.allowMarkdownTags) }
|
||||
}));
|
||||
if (const auto &show = args.show) {
|
||||
field->setEditLinkCallback(
|
||||
DefaultEditLinkCallback(show, field, fieldStyle));
|
||||
DefaultEditLinkCallback(show, field, args.fieldStyle));
|
||||
field->setEditLanguageCallback(DefaultEditLanguageCallback(show));
|
||||
InitSpellchecker(show, field, fieldStyle != nullptr);
|
||||
InitSpellchecker(show, field, args.fieldStyle != nullptr);
|
||||
}
|
||||
const auto style = field->lifetime().make_state<Ui::ChatStyle>(
|
||||
session->colorIndicesValue());
|
||||
@@ -553,12 +551,15 @@ void InitMessageFieldHandlers(
|
||||
not_null<Ui::InputField*> field,
|
||||
ChatHelpers::PauseReason pauseReasonLevel,
|
||||
Fn<bool(not_null<DocumentData*>)> allowPremiumEmoji) {
|
||||
InitMessageFieldHandlers(
|
||||
&controller->session(),
|
||||
controller->uiShow(),
|
||||
field,
|
||||
[=] { return controller->isGifPausedAtLeastFor(pauseReasonLevel); },
|
||||
allowPremiumEmoji);
|
||||
InitMessageFieldHandlers({
|
||||
.session = &controller->session(),
|
||||
.show = controller->uiShow(),
|
||||
.field = field,
|
||||
.customEmojiPaused = [=] {
|
||||
return controller->isGifPausedAtLeastFor(pauseReasonLevel);
|
||||
},
|
||||
.allowPremiumEmoji = std::move(allowPremiumEmoji),
|
||||
});
|
||||
}
|
||||
|
||||
void InitMessageFieldGeometry(not_null<Ui::InputField*> field) {
|
||||
@@ -574,12 +575,15 @@ void InitMessageField(
|
||||
std::shared_ptr<ChatHelpers::Show> show,
|
||||
not_null<Ui::InputField*> field,
|
||||
Fn<bool(not_null<DocumentData*>)> allowPremiumEmoji) {
|
||||
InitMessageFieldHandlers(
|
||||
&show->session(),
|
||||
show,
|
||||
field,
|
||||
[=] { return show->paused(ChatHelpers::PauseReason::Any); },
|
||||
std::move(allowPremiumEmoji));
|
||||
InitMessageFieldHandlers({
|
||||
.session = &show->session(),
|
||||
.show = show,
|
||||
.field = field,
|
||||
.customEmojiPaused = [=] {
|
||||
return show->paused(ChatHelpers::PauseReason::Any);
|
||||
},
|
||||
.allowPremiumEmoji = std::move(allowPremiumEmoji),
|
||||
});
|
||||
InitMessageFieldGeometry(field);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user