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