From 9290cd3a16de7b6ada394cfeb4778261638f6ac5 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 15 Jun 2021 21:54:31 +0300 Subject: [PATCH] Added SessionController pointer to Media::View::OverlayWidget. --- .../inline_bots/inline_bot_result.cpp | 4 +- .../media/view/media_view_open_common.h | 47 ++++++++++++++----- .../media/view/media_view_overlay_widget.cpp | 8 ++++ .../media/view/media_view_overlay_widget.h | 1 + .../window/window_session_controller.cpp | 4 +- 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp index 24d9b3d14..4e4d5f800 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp @@ -333,9 +333,9 @@ bool Result::onChoose(Layout::ItemBase *layout) { Media::View::OpenRequest Result::openRequest() { if (_document) { - return Media::View::OpenRequest(_document, nullptr); + return Media::View::OpenRequest(nullptr, _document, nullptr); } else if (_photo) { - return Media::View::OpenRequest(_photo, nullptr); + return Media::View::OpenRequest(nullptr, _photo, nullptr); } return {}; } diff --git a/Telegram/SourceFiles/media/view/media_view_open_common.h b/Telegram/SourceFiles/media/view/media_view_open_common.h index d7aeae127..3906dcc0e 100644 --- a/Telegram/SourceFiles/media/view/media_view_open_common.h +++ b/Telegram/SourceFiles/media/view/media_view_open_common.h @@ -14,6 +14,10 @@ class PeerData; class PhotoData; class HistoryItem; +namespace Window { +class SessionController; +} // namespace Window + namespace Media::View { struct OpenRequest { @@ -21,23 +25,37 @@ public: OpenRequest() { } - OpenRequest(not_null photo, HistoryItem *item) - : _photo(photo) - , _item(item) { - } - OpenRequest(not_null photo, not_null peer) - : _photo(photo) - , _peer(peer) { - } - - OpenRequest(not_null document, HistoryItem *item) - : _document(document) + OpenRequest( + Window::SessionController *controller, + not_null photo, + HistoryItem *item) + : _controller(controller) + , _photo(photo) , _item(item) { } OpenRequest( + Window::SessionController *controller, + not_null photo, + not_null peer) + : _controller(controller) + , _photo(photo) + , _peer(peer) { + } + + OpenRequest( + Window::SessionController *controller, + not_null document, + HistoryItem *item) + : _controller(controller) + , _document(document) + , _item(item) { + } + OpenRequest( + Window::SessionController *controller, not_null document, const Data::CloudTheme &cloudTheme) - : _document(document) + : _controller(controller) + , _document(document) , _cloudTheme(cloudTheme) { } @@ -61,7 +79,12 @@ public: return _cloudTheme; } + Window::SessionController *controller() const { + return _controller; + } + private: + Window::SessionController *_controller = nullptr; DocumentData *_document = nullptr; PhotoData *_photo = nullptr; PeerData *_peer = nullptr; diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index f7bae2e2f..547c787d1 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -2316,6 +2316,10 @@ void OverlayWidget::showDocument( } void OverlayWidget::show(OpenRequest request) { + if (!request.controller()) { + return; + } + const auto document = request.document(); const auto photo = request.photo(); const auto contextItem = request.item(); @@ -2325,6 +2329,8 @@ void OverlayWidget::show(OpenRequest request) { return; } setSession(&photo->session()); + _controller = request.controller(); + Assert(_session == (&_controller->session())); if (contextPeer) { setContext(contextPeer); @@ -2345,6 +2351,8 @@ void OverlayWidget::show(OpenRequest request) { activateControls(); } else if (document) { setSession(&document->session()); + _controller = request.controller(); + Assert(_session == (&_controller->session())); if (contextItem) { setContext(contextItem); diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h index d38490cc6..1591fa671 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h @@ -429,6 +429,7 @@ private: const std::unique_ptr _surface; const not_null _widget; + Window::SessionController *_controller = nullptr; Main::Session *_session = nullptr; rpl::lifetime _sessionLifetime; PhotoData *_photo = nullptr; diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index 51bc0f688..de01b9f12 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -1223,6 +1223,7 @@ void SessionController::openPhoto( not_null photo, FullMsgId contextId) { _window->openInMediaView(Media::View::OpenRequest( + this, photo, session().data().message(contextId))); } @@ -1230,7 +1231,7 @@ void SessionController::openPhoto( void SessionController::openPhoto( not_null photo, not_null peer) { - _window->openInMediaView(Media::View::OpenRequest(photo, peer)); + _window->openInMediaView(Media::View::OpenRequest(this, photo, peer)); } void SessionController::openDocument( @@ -1240,6 +1241,7 @@ void SessionController::openDocument( // TEMP. if (showInMediaView) { _window->openInMediaView(Media::View::OpenRequest( + this, document, session().data().message(contextId))); return;