Added ability to provide data to emoji list for preview via descriptor.

This commit is contained in:
23rd
2025-09-09 12:26:21 +03:00
parent 297600ca6d
commit a49b3e67d0
3 changed files with 20 additions and 5 deletions
@@ -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<DocumentData*> 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<DocumentData*> 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();
}
}
@@ -99,6 +99,8 @@ struct EmojiListDescriptor {
base::flat_set<DocumentId> 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<Ui::TabbedSearch> _search;
MTP::Sender _api;
const int _staticCount = 0;
@@ -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(