From 043a715c5985f35c66362f0dcf799021ff200dec Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Mon, 13 May 2024 11:15:09 -0400 Subject: [PATCH] systray: restore original behaviour for systrayicon check In response to an issue that would cause a lost window when minimizing to tray on a system without a systray, commit 316750a introduced a bug for versions of Qt that would return null icon geometry even when the icon was visible. Subsequently, this was byspassed with commit f25e66a which only applied to GNU/Linux systems, leaving the hack inplace for Windows and macOS where the bug had not originally occured. This commit: - makes the "MinimizeOnClose" option always visible - uses Qt's built-in method for "isSystemTrayIconVisible" - changes the default "MinimizeOnClose" setting to true Gitlab: #1623 Change-Id: I3b99c7fb952eedea63ae9c12d207ceb3c9bd4988 --- src/app/MainApplicationWindow.qml | 3 ++- src/app/appsettingsmanager.h | 2 +- .../components/SystemSettingsPage.qml | 3 +-- src/app/utilsadapter.cpp | 17 ++++++----------- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/app/MainApplicationWindow.qml b/src/app/MainApplicationWindow.qml index a2555e161..67f5ac409 100644 --- a/src/app/MainApplicationWindow.qml +++ b/src/app/MainApplicationWindow.qml @@ -116,7 +116,8 @@ ApplicationWindow { function close(force = false) { // If we're in the onboarding wizard or 'MinimizeOnClose' // is set, then we can quit - if (force || !UtilsAdapter.getAppValue(Settings.MinimizeOnClose) || !UtilsAdapter.getAccountListSize()) { + var minimizeToTray = UtilsAdapter.getAppValue(Settings.MinimizeOnClose) && UtilsAdapter.isSystemTrayIconVisible(); + if (force || !minimizeToTray || !UtilsAdapter.getAccountListSize()) { Qt.quit(); } else { layoutManager.closeToTray(); diff --git a/src/app/appsettingsmanager.h b/src/app/appsettingsmanager.h index bbdfa5cd8..c2b61d79e 100644 --- a/src/app/appsettingsmanager.h +++ b/src/app/appsettingsmanager.h @@ -43,7 +43,7 @@ extern const QString defaultDownloadPath; // Common key-value pairs for both APPSTORE and non-APPSTORE builds #define COMMON_KEYS \ - X(MinimizeOnClose, false) \ + X(MinimizeOnClose, true) \ X(DownloadPath, defaultDownloadPath) \ X(ScreenshotPath, {}) \ X(EnableNotifications, true) \ diff --git a/src/app/settingsview/components/SystemSettingsPage.qml b/src/app/settingsview/components/SystemSettingsPage.qml index 3ea004118..f953faec2 100644 --- a/src/app/settingsview/components/SystemSettingsPage.qml +++ b/src/app/settingsview/components/SystemSettingsPage.qml @@ -101,8 +101,7 @@ SettingsPageBase { id: closeOrMinCheckBox Layout.fillWidth: true - visible: UtilsAdapter.isSystemTrayIconVisible() - checked: UtilsAdapter.getAppValue(Settings.MinimizeOnClose) && UtilsAdapter.isSystemTrayIconVisible() + checked: UtilsAdapter.getAppValue(Settings.MinimizeOnClose) labelText: JamiStrings.keepMinimized onSwitchToggled: UtilsAdapter.setAppValue(Settings.Key.MinimizeOnClose, checked) } diff --git a/src/app/utilsadapter.cpp b/src/app/utilsadapter.cpp index e6143d8a6..ec4ac13a7 100644 --- a/src/app/utilsadapter.cpp +++ b/src/app/utilsadapter.cpp @@ -26,6 +26,7 @@ #include "systemtray.h" #include "utils.h" #include "version.h" +#include "global.h" #include <api/datatransfermodel.h> #include <api/contact.h> @@ -229,7 +230,7 @@ UtilsAdapter::getConvIdForUri(const QString& accountId, const QString& uri) return {}; return convInfo->get().uid; } catch (const std::out_of_range& e) { - qDebug() << e.what(); + C_DBG << e.what(); return ""; } } @@ -242,7 +243,7 @@ UtilsAdapter::getPeerUri(const QString& accountId, const QString& uid) const auto& convInfo = convModel->getConversationForUid(uid).value(); return convInfo.get().participants.front().uri; } catch (const std::out_of_range& e) { - qDebug() << e.what(); + C_DBG << e.what(); return ""; } } @@ -745,7 +746,7 @@ UtilsAdapter::isSystemThemeDark() #endif return readAppsUseLightThemeRegistry(true); #else - qWarning("System theme detection is not implemented or is not supported"); + C_WARN << "System theme detection is not implemented or is not supported"; return false; #endif // WIN32 #endif // __has_include(<gio/gio.h>) @@ -827,13 +828,7 @@ UtilsAdapter::isRTL() bool UtilsAdapter::isSystemTrayIconVisible() { - if (!systemTray_) - return false; - // https://bugreports.qt.io/browse/QTBUG-118656 -#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) - return true; -#endif - return systemTray_->geometry() != QRect(); + return QSystemTrayIcon::isSystemTrayAvailable() && systemTray_; } QString @@ -891,7 +886,7 @@ UtilsAdapter::createDummyImage() const qInfo() << "Dummy image created" << QDir::tempPath() + "/dummy.png"; return QDir::tempPath() + "/dummy.png"; } else { - qWarning() << "Could not create dummy image"; + C_WARN << "Could not create dummy image"; return ""; } } -- GitLab