From 1d7d10a12dd75d2037caec5c59efb68bab862df6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Wed, 22 Nov 2023 15:42:20 -0500 Subject: [PATCH] mainapplication: retranslate systray Change-Id: Ib8e7407fa702f4003b33b688fa0dca517ff9a7fd GitLab: #1396 --- src/app/mainapplication.cpp | 40 +++++++++++++++++++++++++------------ src/app/mainapplication.h | 3 +++ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/app/mainapplication.cpp b/src/app/mainapplication.cpp index d94b0f27c..118f3e56f 100644 --- a/src/app/mainapplication.cpp +++ b/src/app/mainapplication.cpp @@ -105,7 +105,8 @@ ScreenInfo::onPhysicalDotsPerInchChanged() } MainApplication::MainApplication(int& argc, char** argv) - : QApplication(argc, argv), isCleanupped(false) + : QApplication(argc, argv) + , isCleanupped(false) { const char* qtVersion = qVersion(); qInfo() << "Using Qt runtime version:" << qtVersion; @@ -134,10 +135,19 @@ MainApplication::init() settingsManager_ = new AppSettingsManager(this); systemTray_ = new SystemTray(settingsManager_, this); + // These should should be QueuedConnection to ensure that the + // they are executed after the QML engine has been initialized, + // and after the QSystemTrayIcon has been created and shown. QObject::connect(settingsManager_, &AppSettingsManager::retranslate, engine_.get(), - &QQmlApplicationEngine::retranslate); + &QQmlApplicationEngine::retranslate, + Qt::QueuedConnection); + QObject::connect(settingsManager_, + &AppSettingsManager::retranslate, + this, + &MainApplication::initSystray, + Qt::QueuedConnection); setWindowIcon(QIcon(":/images/jami.ico")); @@ -361,7 +371,8 @@ MainApplication::initSystray() { systemTray_->setIcon(QIcon(":/images/jami.svg")); - QMenu* systrayMenu = new QMenu(); + // Create a new menu + systemTrayMenu_.reset(new QMenu); QString quitString; #ifdef Q_OS_WINDOWS @@ -370,10 +381,10 @@ MainApplication::initSystray() quitString = tr("&Quit"); #endif - QAction* quitAction = new QAction(quitString, this); + QAction* quitAction = new QAction(quitString, systemTrayMenu_.get()); connect(quitAction, &QAction::triggered, this, &MainApplication::closeRequested); - QAction* restoreAction = new QAction(tr("&Show Jami"), this); + QAction* restoreAction = new QAction(tr("&Show Jami"), systemTrayMenu_.get()); connect(restoreAction, &QAction::triggered, this, &MainApplication::restoreApp); connect(systemTray_, @@ -384,18 +395,21 @@ MainApplication::initSystray() #ifdef Q_OS_WINDOWS restoreApp(); #elif !defined(Q_OS_MACOS) - QWindow* window = focusWindow(); - if (window) - window->close(); - else - restoreApp(); + QWindow* window = focusWindow(); + if (window) + window->close(); + else + restoreApp(); #endif } }); - systrayMenu->addAction(restoreAction); - systrayMenu->addAction(quitAction); - systemTray_->setContextMenu(systrayMenu); + systemTrayMenu_->addAction(restoreAction); + systemTrayMenu_->addAction(quitAction); + + // Set the new menu as the context menu + systemTray_->setContextMenu(systemTrayMenu_.get()); + systemTray_->show(); } diff --git a/src/app/mainapplication.h b/src/app/mainapplication.h index 8f0f9952b..a9625a33a 100644 --- a/src/app/mainapplication.h +++ b/src/app/mainapplication.h @@ -124,5 +124,8 @@ private: ScreenInfo screenInfo_; + // We will recreate the system tray menu when the user changes the language. + QScopedPointer<QMenu> systemTrayMenu_; + bool isCleanupped; }; -- GitLab