diff --git a/src/gui/optionsdialog.cpp b/src/gui/optionsdialog.cpp index ffebfff33..4831de1c6 100644 --- a/src/gui/optionsdialog.cpp +++ b/src/gui/optionsdialog.cpp @@ -461,7 +461,10 @@ void OptionsDialog::saveBehaviorTabOptions() const pref->setLocale(locale); #ifdef Q_OS_WIN - pref->setStyle(m_ui->comboStyle->currentText()); + if (const QVariant systemStyle = m_ui->comboStyle->currentData(); systemStyle.isValid()) + pref->setStyle(systemStyle.toString()); + else + pref->setStyle(m_ui->comboStyle->currentText()); #endif #ifdef QBT_HAS_COLORSCHEME_OPTION @@ -1698,18 +1701,27 @@ bool OptionsDialog::isSplashScreenDisabled() const void OptionsDialog::initializeStyleCombo() { #ifdef Q_OS_WIN + m_ui->labelStyleHint->setText(tr("%1 is recommended for best compatibility with Windows dark mode" + , "Fusion is recommended for best compatibility with Windows dark mode").arg(u"Fusion"_s)); + m_ui->comboStyle->addItem(tr("System", "System default Qt style"), u"system"_s); + m_ui->comboStyle->setItemData(0, tr("Let Qt decide the style for this system"), Qt::ToolTipRole); + m_ui->comboStyle->insertSeparator(1); + QStringList styleNames = QStyleFactory::keys(); std::sort(styleNames.begin(), styleNames.end(), Utils::Compare::NaturalLessThan()); m_ui->comboStyle->addItems(styleNames); const QString prefStyleName = Preferences::instance()->getStyle(); const QString selectedStyleName = prefStyleName.isEmpty() ? QApplication::style()->name() : prefStyleName; - m_ui->comboStyle->setCurrentText(selectedStyleName); + + if (selectedStyleName.compare(u"system"_s, Qt::CaseInsensitive) != 0) + m_ui->comboStyle->setCurrentText(selectedStyleName); #else m_ui->labelStyle->hide(); m_ui->comboStyle->hide(); + m_ui->labelStyleHint->hide(); m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyle); m_ui->UISettingsBoxLayout->removeWidget(m_ui->comboStyle); - m_ui->UISettingsBoxLayout->removeItem(m_ui->spacerStyle); + m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyleHint); #endif } diff --git a/src/gui/optionsdialog.ui b/src/gui/optionsdialog.ui index 95429236c..b122b429f 100644 --- a/src/gui/optionsdialog.ui +++ b/src/gui/optionsdialog.ui @@ -179,17 +179,13 @@ - - - Qt::Orientation::Horizontal + + + + true + - - - 40 - 20 - - - + diff --git a/src/gui/uithememanager.cpp b/src/gui/uithememanager.cpp index 12b4ac68a..4319d3c28 100644 --- a/src/gui/uithememanager.cpp +++ b/src/gui/uithememanager.cpp @@ -37,10 +37,6 @@ #include #include -#ifdef Q_OS_WIN -#include -#endif - #include "base/global.h" #include "base/logger.h" #include "base/path.h" @@ -88,9 +84,11 @@ UIThemeManager::UIThemeManager() #endif { #ifdef Q_OS_WIN - const QString defaultStyle = (QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows10) ? u"Fusion"_s : QString(); - if (const QString styleName = Preferences::instance()->getStyle(); !QApplication::setStyle(styleName.isEmpty() ? defaultStyle : styleName)) - LogMsg(tr("Set app style failed. Unknown style: \"%1\"").arg(styleName), Log::WARNING); + if (const QString styleName = Preferences::instance()->getStyle(); styleName.compare(u"system", Qt::CaseInsensitive) != 0) + { + if (!QApplication::setStyle(styleName.isEmpty() ? u"Fusion"_s : styleName)) + LogMsg(tr("Set app style failed. Unknown style: \"%1\"").arg(styleName), Log::WARNING); + } #endif #ifdef QBT_HAS_COLORSCHEME_OPTION