Added new commands to Quit and Raise for Linux MPRIS.

This commit is contained in:
23rd 2021-06-06 22:49:15 +03:00
parent 13c70a9ce9
commit d22601461a
4 changed files with 24 additions and 8 deletions

View file

@ -82,10 +82,7 @@ void FeedLangTestingKey(int key) {
} // namespace } // namespace
MainWindow::MainWindow(not_null<Window::Controller*> controller) MainWindow::MainWindow(not_null<Window::Controller*> controller)
: Platform::MainWindow(controller) : Platform::MainWindow(controller) {
, _mediaControlsManager(Window::SystemMediaControlsManager::Supported()
? std::make_unique<Window::SystemMediaControlsManager>(this)
: nullptr) {
auto logo = Core::App().logo(); auto logo = Core::App().logo();
icon16 = logo.scaledToWidth(16, Qt::SmoothTransformation); icon16 = logo.scaledToWidth(16, Qt::SmoothTransformation);
@ -135,6 +132,11 @@ void MainWindow::initHook() {
this, this,
[=] { checkHistoryActivation(); }, [=] { checkHistoryActivation(); },
Qt::QueuedConnection); Qt::QueuedConnection);
if (Window::SystemMediaControlsManager::Supported()) {
using MediaManager = Window::SystemMediaControlsManager;
_mediaControlsManager = std::make_unique<MediaManager>(&controller());
}
} }
void MainWindow::createTrayIconMenu() { void MainWindow::createTrayIconMenu() {

View file

@ -132,7 +132,7 @@ private:
QPixmap grabInner(); QPixmap grabInner();
using MediaControlsManager = Window::SystemMediaControlsManager; using MediaControlsManager = Window::SystemMediaControlsManager;
const std::unique_ptr<MediaControlsManager> _mediaControlsManager; std::unique_ptr<MediaControlsManager> _mediaControlsManager;
QImage icon16, icon32, icon64, iconbig16, iconbig32, iconbig64; QImage icon16, icon32, icon64, iconbig16, iconbig32, iconbig64;

View file

@ -13,10 +13,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_document.h" #include "data/data_document.h"
#include "data/data_document_media.h" #include "data/data_document_media.h"
#include "data/data_file_origin.h" #include "data/data_file_origin.h"
#include "mainwidget.h"
#include "main/main_account.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "media/audio/media_audio.h" #include "media/audio/media_audio.h"
#include "media/player/media_player_instance.h" #include "media/player/media_player_instance.h"
#include "ui/text/format_song_document_name.h" #include "ui/text/format_song_document_name.h"
#include "window/window_controller.h"
namespace Window { namespace Window {
@ -25,14 +28,14 @@ bool SystemMediaControlsManager::Supported() {
} }
SystemMediaControlsManager::SystemMediaControlsManager( SystemMediaControlsManager::SystemMediaControlsManager(
not_null<QWidget*> parent) not_null<Window::Controller*> controller)
: _controls(std::make_unique<base::Platform::SystemMediaControls>()) { : _controls(std::make_unique<base::Platform::SystemMediaControls>()) {
using PlaybackStatus = using PlaybackStatus =
base::Platform::SystemMediaControls::PlaybackStatus; base::Platform::SystemMediaControls::PlaybackStatus;
using Command = base::Platform::SystemMediaControls::Command; using Command = base::Platform::SystemMediaControls::Command;
const auto inited = _controls->init(parent.get()); const auto inited = _controls->init(controller->widget());
if (!inited) { if (!inited) {
LOG(("SystemMediaControlsManager failed to init.")); LOG(("SystemMediaControlsManager failed to init."));
return; return;
@ -162,6 +165,13 @@ SystemMediaControlsManager::SystemMediaControlsManager(
case Command::Next: mediaPlayer->next(type); break; case Command::Next: mediaPlayer->next(type); break;
case Command::Previous: mediaPlayer->previous(type); break; case Command::Previous: mediaPlayer->previous(type); break;
case Command::Stop: mediaPlayer->stop(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); }, _lifetime);

View file

@ -15,11 +15,15 @@ namespace Data {
class DocumentMedia; class DocumentMedia;
} // namespace Data } // namespace Data
namespace Window {
class Controller;
} // namespace Window
namespace Window { namespace Window {
class SystemMediaControlsManager { class SystemMediaControlsManager {
public: public:
SystemMediaControlsManager(not_null<QWidget*> parent); SystemMediaControlsManager(not_null<Window::Controller*> controller);
~SystemMediaControlsManager(); ~SystemMediaControlsManager();
static bool Supported(); static bool Supported();