diff --git a/Desktop/src/gui/systray.cpp b/Desktop/src/gui/systray.cpp index a51abb8c..eab53e30 100644 --- a/Desktop/src/gui/systray.cpp +++ b/Desktop/src/gui/systray.cpp @@ -24,11 +24,19 @@ #include #include #include +#include using namespace Qt::Literals::StringLiterals; namespace OCC { +namespace { + void showSettingsAfterTrayEvent() + { + auto *app = ocApp(); + QMetaObject::invokeMethod(app, [app] { app->showSettings(); }, Qt::QueuedConnection); + } +} Systray::Systray(QObject *parent) : QSystemTrayIcon(parent) @@ -36,7 +44,7 @@ Systray::Systray(QObject *parent) connect(this, &QSystemTrayIcon::activated, this, [](QSystemTrayIcon::ActivationReason reason) { // Left click if (reason == QSystemTrayIcon::Trigger) { - ocApp()->showSettings(); + showSettingsAfterTrayEvent(); } }); connect(AccountManager::instance(), &AccountManager::accountAdded, this, @@ -143,7 +151,8 @@ void Systray::computeContextMenu() Q_ASSERT(!contextMenu()); 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 updatePauseResumeAction = [pauseResume] { pauseResume->setText(FolderMan::instance()->scheduler()->isRunning() ? tr("Pause synchronizations") : tr("Resume synchronizations"));