diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index a8d99756e..9f4eb4ad6 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -390,14 +390,6 @@ bool Application::hideMediaView() { return false; } -void Application::showTheme( - not_null document, - const Data::CloudTheme &cloud) { - Expects(_mediaView != nullptr); - - _mediaView->showTheme(document, cloud); -} - PeerData *Application::ui_getPeerForMouseAction() { if (_mediaView && !_mediaView->isHidden()) { return _mediaView->ui_getPeerForMouseAction(); diff --git a/Telegram/SourceFiles/core/application.h b/Telegram/SourceFiles/core/application.h index b78ff2242..c40a20dce 100644 --- a/Telegram/SourceFiles/core/application.h +++ b/Telegram/SourceFiles/core/application.h @@ -143,9 +143,6 @@ public: // Media view interface. void checkMediaViewActivation(); bool hideMediaView(); - void showTheme( - not_null document, - const Data::CloudTheme &cloud); [[nodiscard]] PeerData *ui_getPeerForMouseAction(); [[nodiscard]] QPoint getPointForCallPanelCenter() const; diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index 411a6ff73..ad5a8caa0 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -84,6 +84,7 @@ bool ShowTheme( const auto fromMessageId = context.value().itemId; Core::App().hideMediaView(); controller->session().data().cloudThemes().resolve( + &controller->window(), match->captured(1), fromMessageId); return true; diff --git a/Telegram/SourceFiles/data/data_cloud_themes.cpp b/Telegram/SourceFiles/data/data_cloud_themes.cpp index 6a1b3e70a..8d719c4e9 100644 --- a/Telegram/SourceFiles/data/data_cloud_themes.cpp +++ b/Telegram/SourceFiles/data/data_cloud_themes.cpp @@ -17,11 +17,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_document_media.h" #include "main/main_session.h" #include "boxes/confirm_box.h" -#include "core/application.h" // Core::App().showTheme. +#include "media/view/media_view_open_common.h" #include "lang/lang_keys.h" #include "apiwrap.h" -#include "app.h" -#include "mainwindow.h" namespace Data { namespace { @@ -140,6 +138,7 @@ void CloudThemes::applyUpdate(const MTPTheme &theme) { } void CloudThemes::resolve( + not_null controller, const QString &slug, const FullMsgId &clickFromMessageId) { _session->api().request(_resolveRequestId).cancel(); @@ -148,31 +147,35 @@ void CloudThemes::resolve( MTP_inputThemeSlug(MTP_string(slug)), MTP_long(0) )).done([=](const MTPTheme &result) { - showPreview(result); + showPreview(controller, result); }).fail([=](const MTP::Error &error) { if (error.type() == qstr("THEME_FORMAT_INVALID")) { - Ui::show(Box( + controller->show(Box( tr::lng_theme_no_desktop(tr::now))); } }).send(); } -void CloudThemes::showPreview(const MTPTheme &data) { +void CloudThemes::showPreview( + not_null controller, + const MTPTheme &data) { data.match([&](const MTPDtheme &data) { - showPreview(CloudTheme::Parse(_session, data)); + showPreview(controller, CloudTheme::Parse(_session, data)); }); } -void CloudThemes::showPreview(const CloudTheme &cloud) { +void CloudThemes::showPreview( + not_null controller, + const CloudTheme &cloud) { if (const auto documentId = cloud.documentId) { - previewFromDocument(cloud); + previewFromDocument(controller, cloud); } else if (cloud.createdBy == _session->userId()) { - Ui::show(Box( + controller->show(Box( Window::Theme::CreateForExistingBox, - &App::wnd()->controller(), + controller, cloud)); } else { - Ui::show(Box( + controller->show(Box( tr::lng_theme_no_desktop(tr::now))); } } @@ -193,12 +196,19 @@ void CloudThemes::applyFromDocument(const CloudTheme &cloud) { }); } -void CloudThemes::previewFromDocument(const CloudTheme &cloud) { +void CloudThemes::previewFromDocument( + not_null controller, + const CloudTheme &cloud) { + const auto sessionController = controller->sessionController(); + if (!sessionController) { + return; + } const auto document = _session->data().document(cloud.documentId); loadDocumentAndInvoke(_previewFrom, cloud, document, [=]( std::shared_ptr media) { const auto document = media->owner(); - Core::App().showTheme(document, cloud); + using Open = Media::View::OpenRequest; + controller->openInMediaView(Open(sessionController, document, cloud)); }); } diff --git a/Telegram/SourceFiles/data/data_cloud_themes.h b/Telegram/SourceFiles/data/data_cloud_themes.h index 2e3e2af9f..0a32db306 100644 --- a/Telegram/SourceFiles/data/data_cloud_themes.h +++ b/Telegram/SourceFiles/data/data_cloud_themes.h @@ -15,6 +15,10 @@ namespace Main { class Session; } // namespace Main +namespace Window { +class Controller; +} // namespace Window + namespace Data { class DocumentMedia; @@ -47,9 +51,16 @@ public: void applyUpdate(const MTPTheme &theme); - void resolve(const QString &slug, const FullMsgId &clickFromMessageId); - void showPreview(const MTPTheme &data); - void showPreview(const CloudTheme &cloud); + void resolve( + not_null controller, + const QString &slug, + const FullMsgId &clickFromMessageId); + void showPreview( + not_null controller, + const MTPTheme &data); + void showPreview( + not_null controller, + const CloudTheme &cloud); void applyFromDocument(const CloudTheme &cloud); private: @@ -69,7 +80,9 @@ private: [[nodiscard]] bool needReload() const; void scheduleReload(); void reloadCurrent(); - void previewFromDocument(const CloudTheme &cloud); + void previewFromDocument( + not_null controller, + const CloudTheme &cloud); void loadDocumentAndInvoke( LoadingDocument &value, const CloudTheme &cloud, diff --git a/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp b/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp index cab61629f..19d94215b 100644 --- a/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp +++ b/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp @@ -524,7 +524,9 @@ void CloudList::insert(int index, const Data::CloudTheme &theme) { } else if (cloud.documentId) { _window->session().data().cloudThemes().applyFromDocument(cloud); } else { - _window->session().data().cloudThemes().showPreview(cloud); + _window->session().data().cloudThemes().showPreview( + &_window->window(), + cloud); } }); auto &element = *_elements.insert(