Added SessionController pointer to Media::View::OverlayWidget.

This commit is contained in:
23rd 2021-06-15 21:54:31 +03:00 committed by John Preston
parent dc0aaec4a4
commit 9290cd3a16
5 changed files with 49 additions and 15 deletions

View file

@ -333,9 +333,9 @@ bool Result::onChoose(Layout::ItemBase *layout) {
Media::View::OpenRequest Result::openRequest() { Media::View::OpenRequest Result::openRequest() {
if (_document) { if (_document) {
return Media::View::OpenRequest(_document, nullptr); return Media::View::OpenRequest(nullptr, _document, nullptr);
} else if (_photo) { } else if (_photo) {
return Media::View::OpenRequest(_photo, nullptr); return Media::View::OpenRequest(nullptr, _photo, nullptr);
} }
return {}; return {};
} }

View file

@ -14,6 +14,10 @@ class PeerData;
class PhotoData; class PhotoData;
class HistoryItem; class HistoryItem;
namespace Window {
class SessionController;
} // namespace Window
namespace Media::View { namespace Media::View {
struct OpenRequest { struct OpenRequest {
@ -21,23 +25,37 @@ public:
OpenRequest() { OpenRequest() {
} }
OpenRequest(not_null<PhotoData*> photo, HistoryItem *item) OpenRequest(
: _photo(photo) Window::SessionController *controller,
, _item(item) { not_null<PhotoData*> photo,
} HistoryItem *item)
OpenRequest(not_null<PhotoData*> photo, not_null<PeerData*> peer) : _controller(controller)
: _photo(photo) , _photo(photo)
, _peer(peer) {
}
OpenRequest(not_null<DocumentData*> document, HistoryItem *item)
: _document(document)
, _item(item) { , _item(item) {
} }
OpenRequest( OpenRequest(
Window::SessionController *controller,
not_null<PhotoData*> photo,
not_null<PeerData*> peer)
: _controller(controller)
, _photo(photo)
, _peer(peer) {
}
OpenRequest(
Window::SessionController *controller,
not_null<DocumentData*> document,
HistoryItem *item)
: _controller(controller)
, _document(document)
, _item(item) {
}
OpenRequest(
Window::SessionController *controller,
not_null<DocumentData*> document, not_null<DocumentData*> document,
const Data::CloudTheme &cloudTheme) const Data::CloudTheme &cloudTheme)
: _document(document) : _controller(controller)
, _document(document)
, _cloudTheme(cloudTheme) { , _cloudTheme(cloudTheme) {
} }
@ -61,7 +79,12 @@ public:
return _cloudTheme; return _cloudTheme;
} }
Window::SessionController *controller() const {
return _controller;
}
private: private:
Window::SessionController *_controller = nullptr;
DocumentData *_document = nullptr; DocumentData *_document = nullptr;
PhotoData *_photo = nullptr; PhotoData *_photo = nullptr;
PeerData *_peer = nullptr; PeerData *_peer = nullptr;

View file

@ -2316,6 +2316,10 @@ void OverlayWidget::showDocument(
} }
void OverlayWidget::show(OpenRequest request) { void OverlayWidget::show(OpenRequest request) {
if (!request.controller()) {
return;
}
const auto document = request.document(); const auto document = request.document();
const auto photo = request.photo(); const auto photo = request.photo();
const auto contextItem = request.item(); const auto contextItem = request.item();
@ -2325,6 +2329,8 @@ void OverlayWidget::show(OpenRequest request) {
return; return;
} }
setSession(&photo->session()); setSession(&photo->session());
_controller = request.controller();
Assert(_session == (&_controller->session()));
if (contextPeer) { if (contextPeer) {
setContext(contextPeer); setContext(contextPeer);
@ -2345,6 +2351,8 @@ void OverlayWidget::show(OpenRequest request) {
activateControls(); activateControls();
} else if (document) { } else if (document) {
setSession(&document->session()); setSession(&document->session());
_controller = request.controller();
Assert(_session == (&_controller->session()));
if (contextItem) { if (contextItem) {
setContext(contextItem); setContext(contextItem);

View file

@ -429,6 +429,7 @@ private:
const std::unique_ptr<Ui::RpWidgetWrap> _surface; const std::unique_ptr<Ui::RpWidgetWrap> _surface;
const not_null<QWidget*> _widget; const not_null<QWidget*> _widget;
Window::SessionController *_controller = nullptr;
Main::Session *_session = nullptr; Main::Session *_session = nullptr;
rpl::lifetime _sessionLifetime; rpl::lifetime _sessionLifetime;
PhotoData *_photo = nullptr; PhotoData *_photo = nullptr;

View file

@ -1223,6 +1223,7 @@ void SessionController::openPhoto(
not_null<PhotoData*> photo, not_null<PhotoData*> photo,
FullMsgId contextId) { FullMsgId contextId) {
_window->openInMediaView(Media::View::OpenRequest( _window->openInMediaView(Media::View::OpenRequest(
this,
photo, photo,
session().data().message(contextId))); session().data().message(contextId)));
} }
@ -1230,7 +1231,7 @@ void SessionController::openPhoto(
void SessionController::openPhoto( void SessionController::openPhoto(
not_null<PhotoData*> photo, not_null<PhotoData*> photo,
not_null<PeerData*> peer) { not_null<PeerData*> peer) {
_window->openInMediaView(Media::View::OpenRequest(photo, peer)); _window->openInMediaView(Media::View::OpenRequest(this, photo, peer));
} }
void SessionController::openDocument( void SessionController::openDocument(
@ -1240,6 +1241,7 @@ void SessionController::openDocument(
// TEMP. // TEMP.
if (showInMediaView) { if (showInMediaView) {
_window->openInMediaView(Media::View::OpenRequest( _window->openInMediaView(Media::View::OpenRequest(
this,
document, document,
session().data().message(contextId))); session().data().message(contextId)));
return; return;