diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 033fd78ff9..91a30aeeb2 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -82,10 +82,7 @@ void FeedLangTestingKey(int key) { } // namespace MainWindow::MainWindow(not_null controller) -: Platform::MainWindow(controller) -, _mediaControlsManager(Window::SystemMediaControlsManager::Supported() - ? std::make_unique(this) - : nullptr) { +: Platform::MainWindow(controller) { auto logo = Core::App().logo(); icon16 = logo.scaledToWidth(16, Qt::SmoothTransformation); @@ -135,6 +132,11 @@ void MainWindow::initHook() { this, [=] { checkHistoryActivation(); }, Qt::QueuedConnection); + + if (Window::SystemMediaControlsManager::Supported()) { + using MediaManager = Window::SystemMediaControlsManager; + _mediaControlsManager = std::make_unique(&controller()); + } } void MainWindow::createTrayIconMenu() { diff --git a/Telegram/SourceFiles/mainwindow.h b/Telegram/SourceFiles/mainwindow.h index 2920ce16a6..6bf0b3e40b 100644 --- a/Telegram/SourceFiles/mainwindow.h +++ b/Telegram/SourceFiles/mainwindow.h @@ -132,7 +132,7 @@ private: QPixmap grabInner(); using MediaControlsManager = Window::SystemMediaControlsManager; - const std::unique_ptr _mediaControlsManager; + std::unique_ptr _mediaControlsManager; QImage icon16, icon32, icon64, iconbig16, iconbig32, iconbig64; diff --git a/Telegram/SourceFiles/window/system_media_controls_manager.cpp b/Telegram/SourceFiles/window/system_media_controls_manager.cpp index 57d5d6b5f4..5d40633456 100644 --- a/Telegram/SourceFiles/window/system_media_controls_manager.cpp +++ b/Telegram/SourceFiles/window/system_media_controls_manager.cpp @@ -13,10 +13,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_document.h" #include "data/data_document_media.h" #include "data/data_file_origin.h" +#include "mainwidget.h" +#include "main/main_account.h" #include "main/main_session.h" #include "media/audio/media_audio.h" #include "media/player/media_player_instance.h" #include "ui/text/format_song_document_name.h" +#include "window/window_controller.h" namespace Window { @@ -25,14 +28,14 @@ bool SystemMediaControlsManager::Supported() { } SystemMediaControlsManager::SystemMediaControlsManager( - not_null parent) + not_null controller) : _controls(std::make_unique()) { using PlaybackStatus = base::Platform::SystemMediaControls::PlaybackStatus; using Command = base::Platform::SystemMediaControls::Command; - const auto inited = _controls->init(parent.get()); + const auto inited = _controls->init(controller->widget()); if (!inited) { LOG(("SystemMediaControlsManager failed to init.")); return; @@ -162,6 +165,13 @@ SystemMediaControlsManager::SystemMediaControlsManager( case Command::Next: mediaPlayer->next(type); break; case Command::Previous: mediaPlayer->previous(type); break; case Command::Stop: mediaPlayer->stop(type); break; + case Command::Raise: controller->widget()->showFromTray(); break; + case Command::Quit: { + if (const auto main = controller->widget()->sessionContent()) { + main->closeBothPlayers(); + } + break; + } } }, _lifetime); diff --git a/Telegram/SourceFiles/window/system_media_controls_manager.h b/Telegram/SourceFiles/window/system_media_controls_manager.h index edf370868d..1eb8c822e7 100644 --- a/Telegram/SourceFiles/window/system_media_controls_manager.h +++ b/Telegram/SourceFiles/window/system_media_controls_manager.h @@ -15,11 +15,15 @@ namespace Data { class DocumentMedia; } // namespace Data +namespace Window { +class Controller; +} // namespace Window + namespace Window { class SystemMediaControlsManager { public: - SystemMediaControlsManager(not_null parent); + SystemMediaControlsManager(not_null controller); ~SystemMediaControlsManager(); static bool Supported();