Queue desktop tray show action

This commit is contained in:
Курнат Андрей
2026-06-10 07:24:48 +03:00
parent 371f94b669
commit f1cbf65a3c
+11 -2
View File
@@ -24,11 +24,19 @@
#include <QApplication> #include <QApplication>
#include <QDesktopServices> #include <QDesktopServices>
#include <QMenu> #include <QMenu>
#include <QMetaObject>
using namespace Qt::Literals::StringLiterals; using namespace Qt::Literals::StringLiterals;
namespace OCC { namespace OCC {
namespace {
void showSettingsAfterTrayEvent()
{
auto *app = ocApp();
QMetaObject::invokeMethod(app, [app] { app->showSettings(); }, Qt::QueuedConnection);
}
}
Systray::Systray(QObject *parent) Systray::Systray(QObject *parent)
: QSystemTrayIcon(parent) : QSystemTrayIcon(parent)
@@ -36,7 +44,7 @@ Systray::Systray(QObject *parent)
connect(this, &QSystemTrayIcon::activated, this, [](QSystemTrayIcon::ActivationReason reason) { connect(this, &QSystemTrayIcon::activated, this, [](QSystemTrayIcon::ActivationReason reason) {
// Left click // Left click
if (reason == QSystemTrayIcon::Trigger) { if (reason == QSystemTrayIcon::Trigger) {
ocApp()->showSettings(); showSettingsAfterTrayEvent();
} }
}); });
connect(AccountManager::instance(), &AccountManager::accountAdded, this, connect(AccountManager::instance(), &AccountManager::accountAdded, this,
@@ -143,7 +151,8 @@ void Systray::computeContextMenu()
Q_ASSERT(!contextMenu()); Q_ASSERT(!contextMenu());
auto *menu = new QMenu(Theme::instance()->appNameGUI()); auto *menu = new QMenu(Theme::instance()->appNameGUI());
menu->addAction(Theme::instance()->applicationIcon(), tr("Show %1").arg(Theme::instance()->appNameGUI()), ocApp(), &Application::showSettings); auto *showAction = menu->addAction(Theme::instance()->applicationIcon(), tr("Show %1").arg(Theme::instance()->appNameGUI()));
connect(showAction, &QAction::triggered, this, [] { showSettingsAfterTrayEvent(); });
auto *pauseResume = new QAction(menu); auto *pauseResume = new QAction(menu);
auto updatePauseResumeAction = [pauseResume] { auto updatePauseResumeAction = [pauseResume] {
pauseResume->setText(FolderMan::instance()->scheduler()->isRunning() ? tr("Pause synchronizations") : tr("Resume synchronizations")); pauseResume->setText(FolderMan::instance()->scheduler()->isRunning() ? tr("Pause synchronizations") : tr("Resume synchronizations"));