diff --git a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp index d15f13368..fef5f4484 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp @@ -68,6 +68,37 @@ CaptionFullView::CaptionFullView(not_null controller) return base::EventFilterResult::Continue; }; base::install_event_filter(_text.get(), filter); + if (_controller->repost()) { + _wrap->setMouseTracking(true); + base::install_event_filter(_wrap.get(), [=](not_null e) { + const auto mouse = [&] { + return static_cast(e.get()); + }; + const auto type = e->type(); + if (type == QEvent::MouseMove) { + const auto handler = _controller->lookupRepostHandler( + mouse()->pos() - QPoint( + st::mediaviewCaptionPadding.left(), + (_wrap->padding().top() + - _controller->repostCaptionPadding().top()))); + ClickHandler::setActive(handler.link, handler.host); + _wrap->setCursor(handler.link + ? style::cur_pointer + : style::cur_default); + } else if (type == QEvent::MouseButtonPress + && mouse()->button() == Qt::LeftButton + && ClickHandler::getActive()) { + ClickHandler::pressed(); + } else if (type == QEvent::MouseButtonRelease) { + if (const auto activated = ClickHandler::unpressed()) { + ActivateClickHandler(_wrap.get(), activated, { + mouse()->button(), + }); + } + } + return base::EventFilterResult::Continue; + }); + } base::install_event_filter(_wrap.get(), filter); using Type = Ui::ElasticScroll::OverscrollType; @@ -139,6 +170,10 @@ void CaptionFullView::close() { startAnimation(); } +void CaptionFullView::repaint() { + _wrap->update(); +} + void CaptionFullView::updateGeometry() { if (_outer.isEmpty()) { return; diff --git a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.h b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.h index b51ccb0d9..124622d72 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.h +++ b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.h @@ -30,6 +30,7 @@ public: ~CaptionFullView(); void close(); + void repaint(); [[nodiscard]] bool closing() const; [[nodiscard]] bool focused() const; diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp index 83d3e5585..64e056727 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp @@ -1378,6 +1378,9 @@ void Controller::repaintSibling(not_null sibling) { } void Controller::repaint() { + if (_captionFullView) { + _captionFullView->repaint(); + } _delegate->storiesRepaint(); }