From 6bb7e2c2ebf3bfcb4de0789c9143269fcb7a85fa Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 10 Apr 2021 22:39:06 +0300 Subject: [PATCH] Removed using of hardcoded numbers of tray menu actions. --- Telegram/SourceFiles/mainwindow.cpp | 45 +++++++++++++++-------------- Telegram/SourceFiles/mainwindow.h | 2 ++ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index e56420650..e4bc952e3 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -153,24 +153,39 @@ void MainWindow::createTrayIconMenu() { }); #endif // else for Q_OS_WIN - auto notificationActionText = Core::App().settings().desktopNotify() - ? tr::lng_disable_notifications_from_tray(tr::now) - : tr::lng_enable_notifications_from_tray(tr::now); - - trayIconMenu->addAction(tr::lng_minimize_to_tray(tr::now), [=] { + const auto minimizeAction = trayIconMenu->addAction(QString(), [=] { if (_activeForTrayIconAction) { minimizeToTray(); } else { showFromTrayMenu(); } }); - trayIconMenu->addAction(notificationActionText, [=] { + const auto notificationAction = trayIconMenu->addAction(QString(), [=] { toggleDisplayNotifyFromTray(); }); trayIconMenu->addAction(tr::lng_quit_from_tray(tr::now), [=] { quitFromTray(); }); + _updateTrayMenuTextActions.events( + ) | rpl::start_with_next([=] { + if (!trayIconMenu) { + return; + } + + _activeForTrayIconAction = isActiveForTrayMenu(); + minimizeAction->setText(_activeForTrayIconAction + ? tr::lng_minimize_to_tray(tr::now) + : tr::lng_open_from_tray(tr::now)); + + auto notificationActionText = Core::App().settings().desktopNotify() + ? tr::lng_disable_notifications_from_tray(tr::now) + : tr::lng_enable_notifications_from_tray(tr::now); + notificationAction->setText(notificationActionText); + }, lifetime()); + + _updateTrayMenuTextActions.fire({}); + initTrayMenuHook(); } @@ -678,22 +693,10 @@ bool MainWindow::eventFilter(QObject *object, QEvent *e) { } void MainWindow::updateTrayMenu() { - if (!trayIconMenu) return; - - auto actions = trayIconMenu->actions(); - const auto active = isActiveForTrayMenu(); - if (_activeForTrayIconAction != active) { - _activeForTrayIconAction = active; - const auto toggleAction = actions.at(0); - toggleAction->setText(_activeForTrayIconAction - ? tr::lng_minimize_to_tray(tr::now) - : tr::lng_open_from_tray(tr::now)); + if (!trayIconMenu) { + return; } - auto notificationAction = actions.at(1); - auto notificationActionText = Core::App().settings().desktopNotify() - ? tr::lng_disable_notifications_from_tray(tr::now) - : tr::lng_enable_notifications_from_tray(tr::now); - notificationAction->setText(notificationActionText); + _updateTrayMenuTextActions.fire({}); psTrayMenuUpdated(); } diff --git a/Telegram/SourceFiles/mainwindow.h b/Telegram/SourceFiles/mainwindow.h index 11112e16b..78b8bc4c4 100644 --- a/Telegram/SourceFiles/mainwindow.h +++ b/Telegram/SourceFiles/mainwindow.h @@ -162,6 +162,8 @@ private: object_ptr _testingThemeWarning = { nullptr }; + rpl::event_stream<> _updateTrayMenuTextActions; + }; namespace App {