From 7cc49320389a9f4c3832b818e363415785b7d2d7 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Mon, 25 Nov 2024 16:39:20 +0800 Subject: [PATCH 1/4] Make connectToPaletteSignal const We don't really need to have the check fo paletteSignalsConnected Signed-off-by: Claudio Cambra --- src/libsync/theme.cpp | 9 +++------ src/libsync/theme.h | 3 +-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index cb672c71750dd..2db9e708ca616 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -964,13 +964,10 @@ QColor Theme::defaultColor() return QColor{NEXTCLOUD_BACKGROUND_COLOR}; } -void Theme::connectToPaletteSignal() +void Theme::connectToPaletteSignal() const { - if (!_paletteSignalsConnected) { - if (const auto ptr = qobject_cast(qApp)) { - connect(ptr->styleHints(), &QStyleHints::colorSchemeChanged, this, &Theme::darkModeChanged); - _paletteSignalsConnected = true; - } + if (const auto ptr = qobject_cast(qApp)) { + connect(ptr->styleHints(), &QStyleHints::colorSchemeChanged, this, &Theme::darkModeChanged, Qt::UniqueConnection); } } diff --git a/src/libsync/theme.h b/src/libsync/theme.h index a7e817de15ca9..9e12ba709f51c 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -639,14 +639,13 @@ public slots: Theme &operator=(Theme const &); void updateMultipleOverrideServers(); - void connectToPaletteSignal(); + void connectToPaletteSignal() const; #if defined(Q_OS_WIN) QPalette reserveDarkPalette; // Windows 11 button and window dark colours #endif static Theme *_instance; bool _mono = false; - bool _paletteSignalsConnected = false; QString _overrideServerUrl; bool _forceOverrideServerUrl = false; From 1db2656a4b9e9e4c71568bb3ab6890d765dd46b3 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Mon, 25 Nov 2024 16:40:02 +0800 Subject: [PATCH 2/4] Try connectToSignal on all OSes on Theme init Signed-off-by: Claudio Cambra --- src/libsync/theme.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 2db9e708ca616..84fbe18685420 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -398,9 +398,10 @@ Theme::Theme() QColor(127, 127, 127)); reserveDarkPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(127, 127, 127)); - connectToPaletteSignal(); #endif + connectToPaletteSignal(); + #ifdef APPLICATION_SERVER_URL_ENFORCE _forceOverrideServerUrl = true; #endif From aceff3f52908869e2de113caf1cfa68507a75278 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Mon, 25 Nov 2024 16:40:23 +0800 Subject: [PATCH 3/4] Add connectToSignal on darkMode property fetch Theme may be instantiated before the qApp is available Signed-off-by: Claudio Cambra --- src/libsync/theme.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 84fbe18685420..a77aa4450d7f1 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -1010,6 +1010,7 @@ QVariantMap Theme::systemPalette() const bool Theme::darkMode() const { + connectToPaletteSignal(); const auto isDarkFromStyle = [] { switch (qGuiApp->styleHints()->colorScheme()) { From 84fb45a9365c6f5080a9c18fe871fd4d0b93ab71 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Mon, 25 Nov 2024 16:42:39 +0800 Subject: [PATCH 4/4] Use Style.darkMode instead of Theme.darkMode This way we avoid the computation that happens in Theme::darkMode each time the property is accessed Signed-off-by: Claudio Cambra --- src/gui/tray/ActivityItemContent.qml | 2 +- src/gui/tray/CallNotificationDialog.qml | 2 +- src/gui/tray/UnifiedSearchResultListItem.qml | 6 +++--- src/gui/tray/UserLine.qml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml index cc56103e40194..98ea3c2277f04 100644 --- a/src/gui/tray/ActivityItemContent.qml +++ b/src/gui/tray/ActivityItemContent.qml @@ -104,7 +104,7 @@ RowLayout { cache: true fillMode: Image.PreserveAspectFit - source: Theme.darkMode ? model.darkIcon : model.lightIcon + source: Style.darkMode ? model.darkIcon : model.lightIcon sourceSize.height: 64 sourceSize.width: 64 mipmap: true // Addresses grainy downscale diff --git a/src/gui/tray/CallNotificationDialog.qml b/src/gui/tray/CallNotificationDialog.qml index 22f11da71fb5e..3ebe3bd65c2f6 100644 --- a/src/gui/tray/CallNotificationDialog.qml +++ b/src/gui/tray/CallNotificationDialog.qml @@ -163,7 +163,7 @@ ApplicationWindow { cache: true source: root.usingUserAvatar ? root.talkNotificationData.userAvatar : - Theme.darkMode ? root.talkIcon + palette.windowText : root.talkIcon + Style.ncBlue + Style.darkMode ? root.talkIcon + palette.windowText : root.talkIcon + Style.ncBlue sourceSize.width: Style.accountAvatarSize sourceSize.height: Style.accountAvatarSize diff --git a/src/gui/tray/UnifiedSearchResultListItem.qml b/src/gui/tray/UnifiedSearchResultListItem.qml index bc3588e6e527f..97092b23c6f00 100644 --- a/src/gui/tray/UnifiedSearchResultListItem.qml +++ b/src/gui/tray/UnifiedSearchResultListItem.qml @@ -56,9 +56,9 @@ MouseArea { anchors.fill: parent title: model.resultTitle subline: model.subline - icons: Theme.darkMode ? model.darkIcons : model.lightIcons - iconsIsThumbnail: Theme.darkMode ? model.darkIconsIsThumbnail : model.lightIconsIsThumbnail - iconPlaceholder: Theme.darkMode ? model.darkImagePlaceholder : model.lightImagePlaceholder + icons: Style.darkMode ? model.darkIcons : model.lightIcons + iconsIsThumbnail: Style.darkMode ? model.darkIconsIsThumbnail : model.lightIconsIsThumbnail + iconPlaceholder: Style.darkMode ? model.darkImagePlaceholder : model.lightImagePlaceholder isRounded: model.isRounded && iconsIsThumbnail } } diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index 6502817e9f135..010a9391b08b9 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -41,7 +41,7 @@ AbstractButton { Layout.leftMargin: Style.accountIconsMenuMargin verticalAlignment: Qt.AlignCenter cache: false - source: model.avatar !== "" ? model.avatar : Theme.darkMode ? "image://avatars/fallbackWhite" : "image://avatars/fallbackBlack" + source: model.avatar !== "" ? model.avatar : Style.darkMode ? "image://avatars/fallbackWhite" : "image://avatars/fallbackBlack" Layout.preferredHeight: Style.accountAvatarSize Layout.preferredWidth: Style.accountAvatarSize