diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp index 415e1c87a..366a96e78 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp @@ -490,6 +490,10 @@ auto EmojiListWidget::premiumChosen() const return _premiumChosen.events(); } +rpl::producer<> EmojiListWidget::jumpedToPremium() const { + return _jumpedToPremium.events(); +} + void EmojiListWidget::paintExpanding( QPainter &p, QRect clip, @@ -1134,6 +1138,7 @@ void EmojiListWidget::mouseReleaseEvent(QMouseEvent *e) { } else if (hasAddButton(button->section)) { _localSetsManager->install(id); } else if (_controller) { + _jumpedToPremium.fire({}); Settings::ShowPremium(_controller, u"animated_emoji"_q); } } diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h index cc92ff1ce..291e08bcb 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h @@ -111,6 +111,7 @@ public: -> rpl::producer; [[nodiscard]] auto premiumChosen() const -> rpl::producer>; + [[nodiscard]] rpl::producer<> jumpedToPremium() const; void paintExpanding( QPainter &p, @@ -356,6 +357,7 @@ private: rpl::event_stream _chosen; rpl::event_stream _customChosen; rpl::event_stream> _premiumChosen; + rpl::event_stream<> _jumpedToPremium; }; diff --git a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp index 627a755c0..ae49ae209 100644 --- a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp +++ b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp @@ -18,6 +18,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "chat_helpers/emoji_list_widget.h" #include "chat_helpers/stickers_list_footer.h" #include "window/window_session_controller.h" +#include "settings/settings_premium.h" +#include "mainwidget.h" #include "base/call_delayed.h" #include "styles/style_chat_helpers.h" #include "styles/style_chat.h" @@ -142,10 +144,12 @@ Selector::Selector( not_null parent, not_null parentController, Data::PossibleItemReactions &&reactions, - IconFactory iconFactory) + IconFactory iconFactory, + Fn close) : RpWidget(parent) , _parentController(parentController.get()) , _reactions(std::move(reactions)) +, _jumpedToPremium([=] { close(false); }) , _cachedRound( QSize(2 * st::reactStripSkip + st::reactStripSize, st::reactStripHeight), st::reactionCornerShadow, @@ -160,6 +164,11 @@ Selector::Selector( , _skipy((st::reactStripHeight - st::reactStripSize) / 2) , _skipBottom(st::reactStripHeight - st::reactStripSize - _skipy) { setMouseTracking(true); + + parentController->content()->alive( + ) | rpl::start_with_done([=] { + close(true); + }, lifetime()); } int Selector::countSkipLeft() const { @@ -657,6 +666,15 @@ void Selector::createList(not_null controller) { } }, _list->lifetime()); + _list->premiumChosen( + ) | rpl::start_with_next([=] { + _jumpedToPremium(); + Settings::ShowPremium(controller, u"animated_emoji"_q); + }, _list->lifetime()); + + _list->jumpedToPremium( + ) | rpl::start_with_next(_jumpedToPremium, _list->lifetime()); + const auto inner = rect().marginsRemoved(extentsForShadow()); const auto footer = _reactions.customAllowed ? _list->createFooter().data() @@ -790,7 +808,8 @@ AttachSelectorResult AttachSelectorToMenu( menu.get(), controller, std::move(reactions), - std::move(iconFactory)); + std::move(iconFactory), + [=](bool fast) { menu->hideMenu(fast); }); if (!AdjustMenuGeometryForSelector(menu, desiredPosition, selector)) { return AttachSelectorResult::Failed; } diff --git a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h index b2f078cd1..754f551ea 100644 --- a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h +++ b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h @@ -41,7 +41,8 @@ public: not_null parent, not_null parentController, Data::PossibleItemReactions &&reactions, - IconFactory iconFactory); + IconFactory iconFactory, + Fn close); int countWidth(int desiredWidth, int maxWidth); [[nodiscard]] QMargins extentsForShadow() const; @@ -99,6 +100,7 @@ private: const base::weak_ptr _parentController; const Data::PossibleItemReactions _reactions; + Fn _jumpedToPremium; base::flat_map _defaultReactionInStripMap; Ui::RoundAreaWithShadow _cachedRound; QPoint _defaultReactionShift;