diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index 78c985c0b9..ce046718d0 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -65,6 +65,7 @@ struct Descriptor { base::flat_map disabled; bool fromSettings = false; Fn hiddenCallback; + Fn)> shownCallback; }; bool operator==(const Descriptor &a, const Descriptor &b) { @@ -1516,7 +1517,11 @@ void Show( const Descriptor &descriptor, const std::shared_ptr &media, QImage back) { - controller->show(Box(PreviewBox, controller, descriptor, media, back)); + const auto box = controller->show( + Box(PreviewBox, controller, descriptor, media, back)); + if (descriptor.shownCallback) { + descriptor.shownCallback(box); + } } void Show(not_null controller, QImage back) { @@ -1539,7 +1544,10 @@ void Show( not_null controller, Descriptor &&descriptor) { if (!controller->session().premiumPossible()) { - controller->show(Box(PremiumUnavailableBox)); + const auto box = controller->show(Box(PremiumUnavailableBox)); + if (descriptor.shownCallback) { + descriptor.shownCallback(box); + } return; } auto &list = Preloads(); @@ -1616,10 +1624,12 @@ void ShowStickerPreviewBox( void ShowPremiumPreviewBox( not_null controller, PremiumPreview section, - const base::flat_map &disabled) { + const base::flat_map &disabled, + Fn)> shown) { Show(controller, Descriptor{ .section = section, .disabled = disabled, + .shownCallback = std::move(shown), }); } diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.h b/Telegram/SourceFiles/boxes/premium_preview_box.h index a40bcae993..ed057f3f98 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.h +++ b/Telegram/SourceFiles/boxes/premium_preview_box.h @@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL class DocumentData; namespace Ui { +class BoxContent; class GenericBox; class GradientButton; } // namespace Ui @@ -55,7 +56,8 @@ enum class ReactionDisableType { void ShowPremiumPreviewBox( not_null controller, PremiumPreview section, - const base::flat_map &disabled = {}); + const base::flat_map &disabled = {}, + Fn)> shown = nullptr); void ShowPremiumPreviewToBuy( not_null controller, diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp index 829e78478a..7833f9ef1a 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp @@ -1093,7 +1093,11 @@ void EmojiListWidget::selectCustom(not_null document) { if (document->isPremiumEmoji() && !document->session().premium()) { ShowPremiumPreviewBox( controller(), - PremiumPreview::AnimatedEmoji); + PremiumPreview::AnimatedEmoji, + {}, + crl::guard(this, [=](not_null box) { + checkHideWithBox(box.get()); + })); return; } Core::App().settings().incrementRecentEmoji({ RecentEmojiDocument{ @@ -1755,7 +1759,7 @@ void EmojiListWidget::initButton( button.back = prepare(Qt::transparent, [&]() -> QBrush { if (gradient) { auto result = QLinearGradient(QPointF(0, 0), QPointF(width, 0)); - result.setStops(Ui::Premium::ButtonGradientStops()); + result.setStops(Ui::Premium::GiftGradientStops()); return result; } return st::emojiPanButton.textBg;