diff options
author | Saturn&Eric <[email protected]> | 2025-04-21 17:07:25 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2025-04-21 17:07:25 +0000 |
commit | 7e2083e47796f7e3b38badd18b6b11e7ece9a76d (patch) | |
tree | 4cea1d52c0ac6e4fb35763b71b19f05f396229d6 | |
parent | fix: should set default workspace to home path on macOS (diff) | |
parent | Add Linux dark mode detection for Fusion theme in Qt6 (diff) | |
download | GpgFrontend-7e2083e47796f7e3b38badd18b6b11e7ece9a76d.tar.gz GpgFrontend-7e2083e47796f7e3b38badd18b6b11e7ece9a76d.zip |
Merge pull request #209 from x86txt/fix-linux-dark-mode-qt6
Add Linux dark mode detection for Fusion theme in Qt6
-rw-r--r-- | src/ui/GpgFrontendUIInit.cpp | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/src/ui/GpgFrontendUIInit.cpp b/src/ui/GpgFrontendUIInit.cpp index 55d934bd..3c56b777 100644 --- a/src/ui/GpgFrontendUIInit.cpp +++ b/src/ui/GpgFrontendUIInit.cpp @@ -123,20 +123,49 @@ void PreInitGpgFrontendUI() { "QWidget", {}); } -void InitGpgFrontendUI(QApplication* /*app*/) { +void InitGpgFrontendUI(QApplication* app) { // init locale InitUITranslations(); auto settings = GetSettings(); auto theme = settings.value("appearance/theme").toString(); -#if defined(_WIN32) || defined(WIN32) - if (theme.isEmpty()) { - // support dark mode on windows - QApplication::setStyle(QStyleFactory::create("Fusion")); + // Set Fusion style for better dark mode support across platforms + QApplication::setStyle(QStyleFactory::create("Fusion")); + + // Check if system is using dark mode by comparing text/background lightness + QPalette systemPalette = QApplication::palette(); + QColor windowColor = systemPalette.color(QPalette::Window); + QColor textColor = systemPalette.color(QPalette::WindowText); + + // In dark themes, text is typically lighter than the background + bool isDarkMode = textColor.lightness() > windowColor.lightness(); + + FLOG_D("Dark mode detected: %s", isDarkMode ? "true" : "false"); + + if (isDarkMode) { + FLOG_D("Applying dark palette..."); + // Apply dark palette for Fusion + QPalette darkPalette; + darkPalette.setColor(QPalette::Window, QColor(53, 53, 53)); + darkPalette.setColor(QPalette::WindowText, Qt::white); + darkPalette.setColor(QPalette::Base, QColor(25, 25, 25)); + darkPalette.setColor(QPalette::AlternateBase, QColor(53, 53, 53)); + darkPalette.setColor(QPalette::ToolTipBase, Qt::white); + darkPalette.setColor(QPalette::ToolTipText, Qt::white); + darkPalette.setColor(QPalette::Text, Qt::white); + darkPalette.setColor(QPalette::Button, QColor(53, 53, 53)); + darkPalette.setColor(QPalette::ButtonText, Qt::white); + darkPalette.setColor(QPalette::BrightText, Qt::red); + darkPalette.setColor(QPalette::Link, QColor(42, 130, 218)); + darkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218)); + darkPalette.setColor(QPalette::HighlightedText, Qt::black); + + // Apply the dark palette + QApplication::setPalette(darkPalette); } -#endif + // If user has explicitly set a theme in settings, use that instead auto available_styles = QStyleFactory::keys(); for (QString& s : available_styles) s = s.toLower(); if (!theme.isEmpty() && available_styles.contains(theme)) { |