diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index d10d50be4..e699cf4d1 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -947,12 +947,49 @@ void Theme::connectToPaletteSignal() { if (!_paletteSignalsConnected) { if (const auto ptr = qobject_cast(QGuiApplication::instance())) { + connect(ptr, &QGuiApplication::paletteChanged, this, &Theme::systemPaletteChanged); connect(ptr->styleHints(), &QStyleHints::colorSchemeChanged, this, &Theme::darkModeChanged); _paletteSignalsConnected = true; } } } +QVariantMap Theme::systemPalette() +{ + connectToPaletteSignal(); +#if defined(Q_OS_WIN) + auto systemPalette = QGuiApplication::palette(); + if(darkMode()) { + systemPalette = reserveDarkPalette; + } +#else + const auto systemPalette = QGuiApplication::palette(); +#endif + + return QVariantMap { + { QStringLiteral("base"), systemPalette.base().color() }, + { QStringLiteral("alternateBase"), systemPalette.alternateBase().color() }, + { QStringLiteral("text"), systemPalette.text().color() }, + { QStringLiteral("toolTipBase"), systemPalette.toolTipBase().color() }, + { QStringLiteral("toolTipText"), systemPalette.toolTipText().color() }, + { QStringLiteral("brightText"), systemPalette.brightText().color() }, + { QStringLiteral("buttonText"), systemPalette.buttonText().color() }, + { QStringLiteral("button"), systemPalette.button().color() }, + { QStringLiteral("highlightedText"), systemPalette.highlightedText().color() }, + { QStringLiteral("placeholderText"), systemPalette.placeholderText().color() }, + { QStringLiteral("windowText"), systemPalette.windowText().color() }, + { QStringLiteral("window"), systemPalette.window().color() }, + { QStringLiteral("dark"), systemPalette.dark().color() }, + { QStringLiteral("highlight"), systemPalette.highlight().color() }, + { QStringLiteral("light"), systemPalette.light().color() }, + { QStringLiteral("link"), systemPalette.link().color() }, + { QStringLiteral("midlight"), systemPalette.midlight().color() }, + { QStringLiteral("mid"), systemPalette.mid().color() }, + { QStringLiteral("linkVisited"), systemPalette.linkVisited().color() }, + { QStringLiteral("shadow"), systemPalette.shadow().color() }, + }; +} + bool Theme::darkMode() { connectToPaletteSignal(); diff --git a/src/libsync/theme.h b/src/libsync/theme.h index b414c9fa3..707cb07d5 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -67,6 +67,7 @@ class OWNCLOUDSYNC_EXPORT Theme : public QObject Q_PROPERTY(QColor defaultColor READ defaultColor CONSTANT) + Q_PROPERTY(QVariantMap systemPalette READ systemPalette NOTIFY systemPaletteChanged) Q_PROPERTY(bool darkMode READ darkMode NOTIFY darkModeChanged) public: enum CustomMediaType { @@ -600,6 +601,7 @@ public: static constexpr const char *themePrefix = ":/client/theme/"; + QVariantMap systemPalette(); bool darkMode(); public slots: @@ -624,6 +626,7 @@ protected: signals: void systrayUseMonoIconsChanged(bool); + void systemPaletteChanged(const QPalette &palette); void darkModeChanged(); void overrideServerUrlChanged(); void forceOverrideServerUrlChanged(); diff --git a/theme/Style/Style.qml b/theme/Style/Style.qml index 912aa10b8..2bb1905d3 100644 --- a/theme/Style/Style.qml +++ b/theme/Style/Style.qml @@ -8,20 +8,17 @@ QtObject { readonly property int pixelSize: fontMetrics.font.pixelSize readonly property bool darkMode: Theme.darkMode - property SystemPalette nativePalette: SystemPalette { - } - // Colors readonly property color ncBlue: Theme.wizardHeaderBackgroundColor readonly property color ncHeaderTextColor: Theme.wizardHeaderTitleColor - readonly property color ncTextColor: nativePalette.text + readonly property color ncTextColor: Theme.systemPalette.windowText readonly property color ncTextBrightColor: "white" readonly property color ncSecondaryTextColor: "#808080" readonly property color lightHover: Theme.darkMode ? Qt.lighter(backgroundColor, 2) : Qt.darker(backgroundColor, 1.05) readonly property color darkerHover: Theme.darkMode ? Qt.lighter(backgroundColor, 2.35) : Qt.darker(backgroundColor, 1.25) readonly property color menuBorder: Theme.darkMode ? Qt.lighter(backgroundColor, 2.5) : Qt.darker(backgroundColor, 1.5) - readonly property color backgroundColor: nativePalette.window - readonly property color buttonBackgroundColor: nativePalette.button + readonly property color backgroundColor: Theme.systemPalette.window + readonly property color buttonBackgroundColor: Theme.systemPalette.button readonly property color positiveColor: Qt.rgba(0.38, 0.74, 0.38, 1) readonly property color currentUserHeaderColor: UserModel.currentUser ? UserModel.currentUser.headerColor : ncBlue