diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp index 443386a8f3..48e6e0e421 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp @@ -482,6 +482,8 @@ EmojiListWidget::EmojiListWidget( , _features(descriptor.features) , _onlyUnicodeEmoji(descriptor.mode == Mode::PeerTitle) , _mode(_onlyUnicodeEmoji ? Mode::Full : descriptor.mode) +, _mediaPreviewParent(descriptor.mediaPreviewParent) +, _mediaPreviewMargins(descriptor.mediaPreviewMargins) , _api(&session().mtp()) , _staticCount(_mode == Mode::Full ? kEmojiSectionCount : 1) , _premiumIcon(_mode == Mode::EmojiStatus @@ -686,7 +688,8 @@ void EmojiListWidget::showPreview() { } void EmojiListWidget::showPreviewFor(not_null document) { - if ((_mode == Mode::FullReactions) || (_mode == Mode::RecentReactions)) { + if ((_mode == Mode::FullReactions || _mode == Mode::RecentReactions) + && _mediaPreviewParent) { ensureMediaPreview(); _mediaPreview->showPreview(document->stickerSetOrigin(), document); } else { @@ -695,18 +698,24 @@ void EmojiListWidget::showPreviewFor(not_null document) { } void EmojiListWidget::ensureMediaPreview() { + if (!_mediaPreviewParent) { + return; + } if (_mediaPreview) { _mediaPreview->raise(); return; } const auto controller = Core::App().findWindow(_show->toastParent()); - const auto sessionController = controller ? controller->sessionController() : nullptr; + const auto sessionController = controller + ? controller->sessionController() + : nullptr; if (sessionController) { - _mediaPreview.create(parentWidget()->parentWidget(), sessionController); + _mediaPreview.create(_mediaPreviewParent, sessionController); _mediaPreview->setCustomPadding(st::emojiPanReactionsPreviewPadding); - _mediaPreview->setBackgroundMargins({ 0, 0, st::emojiPanRadius, 0 }); + _mediaPreview->setBackgroundMargins(_mediaPreviewMargins); + _mediaPreview->setCornersSkip(st::emojiPanRadius - st::lineWidth); _mediaPreview->show(); - _mediaPreview->setGeometry(parentWidget()->parentWidget()->geometry().translated(0, 0)); + _mediaPreview->setGeometry(_mediaPreviewParent->geometry()); _mediaPreview->raise(); } } diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h index 402904e45b..7a8f1860be 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h @@ -99,6 +99,8 @@ struct EmojiListDescriptor { base::flat_set freeEffects; const style::EmojiPan *st = nullptr; ComposeFeatures features; + QWidget *mediaPreviewParent = nullptr; + QMargins mediaPreviewMargins; }; class EmojiListWidget final @@ -409,6 +411,8 @@ private: const ComposeFeatures _features; const bool _onlyUnicodeEmoji; Mode _mode = Mode::Full; + QWidget *_mediaPreviewParent = nullptr; + QMargins _mediaPreviewMargins; std::unique_ptr _search; MTP::Sender _api; const int _staticCount = 0; 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 38970fb09a..cfb23d67f7 100644 --- a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp +++ b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp @@ -1051,6 +1051,8 @@ void Selector::createList() { .customRecentFactory = _unifiedFactoryOwner->factory(), .freeEffects = std::move(freeEffects), .st = st, + .mediaPreviewParent = this, + .mediaPreviewMargins = marginsForShadow(), })); if (!_reactions.stickers.empty()) { auto descriptors = ranges::views::all(