summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-07-24 15:26:13 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-07-25 21:59:37 +0200
commit6d4b3582adaf3cea23b0ef777a1bf3e7597fd8da (patch)
treee5ba098842acc19330caa11ac542f3752b0a5034 /src/plugins
parentf06dfb60b96004971917a27559713314b7f60de6 (diff)
Windows QPA: Move dark mode handling to the new interface
Move options to new interface, making them settable from code on this occasion. Task-number: QTBUG-83252 Change-Id: Idd80667c502a8cde5d7c66d7e597ea34c22738e7 Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/windows/qwindowsapplication.cpp15
-rw-r--r--src/plugins/platforms/windows/qwindowsapplication.h5
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp9
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.cpp24
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.h4
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.cpp11
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.h8
-rw-r--r--src/plugins/platforms/windows/qwindowstheme.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp2
9 files changed, 43 insertions, 37 deletions
diff --git a/src/plugins/platforms/windows/qwindowsapplication.cpp b/src/plugins/platforms/windows/qwindowsapplication.cpp
index 082db98a4f..c137b2a8a8 100644
--- a/src/plugins/platforms/windows/qwindowsapplication.cpp
+++ b/src/plugins/platforms/windows/qwindowsapplication.cpp
@@ -94,4 +94,19 @@ bool QWindowsApplication::setWinTabEnabled(bool enabled)
return enabled ? ctx->initTablet() : ctx->disposeTablet();
}
+bool QWindowsApplication::isDarkMode() const
+{
+ return QWindowsContext::isDarkMode();
+}
+
+QWindowsApplication::DarkModeHandling QWindowsApplication::darkModeHandling() const
+{
+ return m_darkModeHandling;
+}
+
+void QWindowsApplication::setDarkModeHandling(QWindowsApplication::DarkModeHandling handling)
+{
+ m_darkModeHandling = handling;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsapplication.h b/src/plugins/platforms/windows/qwindowsapplication.h
index 309fc7151f..6cf8577ab5 100644
--- a/src/plugins/platforms/windows/qwindowsapplication.h
+++ b/src/plugins/platforms/windows/qwindowsapplication.h
@@ -58,9 +58,14 @@ public:
bool isWinTabEnabled() const override;
bool setWinTabEnabled(bool enabled) override;
+ bool isDarkMode() const override;
+ DarkModeHandling darkModeHandling() const override;
+ void setDarkModeHandling(DarkModeHandling handling) override;
+
private:
WindowActivationBehavior m_windowActivationBehavior = DefaultActivateWindow;
TouchWindowTouchTypes m_touchWindowTouchTypes = NormalTouch;
+ DarkModeHandling m_darkModeHandling;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 39278f31e8..1e5b247f0f 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -1244,15 +1244,12 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
const bool darkMode = QWindowsTheme::queryDarkMode();
if (darkMode != QWindowsContextPrivate::m_darkMode) {
QWindowsContextPrivate::m_darkMode = darkMode;
- auto nativeInterface =
- static_cast<QWindowsNativeInterface *>(QWindowsIntegration::instance()->nativeInterface());
- emit nativeInterface->darkModeChanged(darkMode);
- const auto options = QWindowsIntegration::instance()->options();
- if ((options & QWindowsIntegration::DarkModeWindowFrames) != 0) {
+ auto integration = QWindowsIntegration::instance();
+ if (integration->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames)) {
for (QWindowsWindow *w : d->m_windows)
w->setDarkBorder(QWindowsContextPrivate::m_darkMode);
}
- if ((options & QWindowsIntegration::DarkModeStyle) != 0) {
+ if (integration->darkModeHandling().testFlag(QWindowsApplication::DarkModeStyle)) {
QWindowsTheme::instance()->refresh();
for (QWindowsWindow *w : d->m_windows)
QWindowSystemInterface::handleThemeChange(w->window());
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp
index aeafff9962..6ec5f6e37f 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.cpp
+++ b/src/plugins/platforms/windows/qwindowsintegration.cpp
@@ -135,9 +135,11 @@ QT_BEGIN_NAMESPACE
struct QWindowsIntegrationPrivate
{
Q_DISABLE_COPY_MOVE(QWindowsIntegrationPrivate)
- explicit QWindowsIntegrationPrivate(const QStringList &paramList);
+ explicit QWindowsIntegrationPrivate() = default;
~QWindowsIntegrationPrivate();
+ void parseOptions(QWindowsIntegration *q, const QStringList &paramList);
+
unsigned m_options = 0;
QWindowsContext m_context;
QPlatformFontDatabase *m_fontDatabase = nullptr;
@@ -181,9 +183,13 @@ bool parseIntOption(const QString &parameter,const QLatin1String &option,
return true;
}
+using DarkModeHandlingFlag = QPlatformInterface::Private::QWindowsApplication::DarkModeHandlingFlag;
+using DarkModeHandling = QPlatformInterface::Private::QWindowsApplication::DarkModeHandling;
+
static inline unsigned parseOptions(const QStringList &paramList,
int *tabletAbsoluteRange,
- QtWindows::ProcessDpiAwareness *dpiAwareness)
+ QtWindows::ProcessDpiAwareness *dpiAwareness,
+ DarkModeHandling *darkModeHandling)
{
unsigned options = 0;
for (const QString &param : paramList) {
@@ -223,9 +229,10 @@ static inline unsigned parseOptions(const QStringList &paramList,
} else if (param == u"reverse") {
options |= QWindowsIntegration::RtlEnabled;
} else if (param == u"darkmode=1") {
- options |= QWindowsIntegration::DarkModeWindowFrames;
+ darkModeHandling->setFlag(DarkModeHandlingFlag::DarkModeWindowFrames);
} else if (param == u"darkmode=2") {
- options |= QWindowsIntegration::DarkModeWindowFrames | QWindowsIntegration::DarkModeStyle;
+ darkModeHandling->setFlag(DarkModeHandlingFlag::DarkModeWindowFrames);
+ darkModeHandling->setFlag(DarkModeHandlingFlag::DarkModeStyle);
} else {
qWarning() << "Unknown option" << param;
}
@@ -233,7 +240,7 @@ static inline unsigned parseOptions(const QStringList &paramList,
return options;
}
-QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList &paramList)
+void QWindowsIntegrationPrivate::parseOptions(QWindowsIntegration *q, const QStringList &paramList)
{
initOpenGlBlacklistResources();
@@ -242,7 +249,9 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList &paramL
// are connected to Windows 8.1
QtWindows::ProcessDpiAwareness dpiAwareness = QtWindows::ProcessPerMonitorDpiAware;
int tabletAbsoluteRange = -1;
- m_options = parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness);
+ DarkModeHandling darkModeHandling;
+ m_options = ::parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness, &darkModeHandling);
+ q->setDarkModeHandling(darkModeHandling);
QWindowsFontDatabase::setFontOptions(m_options);
if (tabletAbsoluteRange >= 0)
QWindowsContext::setTabletAbsoluteRange(tabletAbsoluteRange);
@@ -276,9 +285,10 @@ QWindowsIntegrationPrivate::~QWindowsIntegrationPrivate()
QWindowsIntegration *QWindowsIntegration::m_instance = nullptr;
QWindowsIntegration::QWindowsIntegration(const QStringList &paramList) :
- d(new QWindowsIntegrationPrivate(paramList))
+ d(new QWindowsIntegrationPrivate)
{
m_instance = this;
+ d->parseOptions(this, paramList);
#if QT_CONFIG(clipboard)
d->m_clipboard.registerViewer();
#endif
diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h
index 3a8c09dd43..eaf62c750d 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.h
+++ b/src/plugins/platforms/windows/qwindowsintegration.h
@@ -79,9 +79,7 @@ public:
DontUseWMPointer = 0x400,
DetectAltGrModifier = 0x800,
RtlEnabled = 0x1000,
- DarkModeWindowFrames = 0x2000,
- DarkModeStyle = 0x4000,
- FontDatabaseDirectWrite = 0x8000
+ FontDatabaseDirectWrite = 0x2000
};
explicit QWindowsIntegration(const QStringList &paramList);
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
index 103db19a69..12950d02d6 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
@@ -239,15 +239,4 @@ QVariant QWindowsNativeInterface::gpuList() const
return result;
}
-bool QWindowsNativeInterface::isDarkMode() const
-{
- return QWindowsContext::isDarkMode();
-}
-
-// Dark mode support level 2 (style)
-bool QWindowsNativeInterface::isDarkModeStyle() const
-{
- return (QWindowsIntegration::instance()->options() & QWindowsIntegration::DarkModeStyle) != 0;
-}
-
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.h b/src/plugins/platforms/windows/qwindowsnativeinterface.h
index 6b3740a17b..bb7801f398 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.h
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.h
@@ -63,8 +63,6 @@ class QWindowsNativeInterface : public QPlatformNativeInterface
{
Q_OBJECT
Q_PROPERTY(bool asyncExpose READ asyncExpose WRITE setAsyncExpose)
- Q_PROPERTY(bool darkMode READ isDarkMode STORED false NOTIFY darkModeChanged)
- Q_PROPERTY(bool darkModeStyle READ isDarkModeStyle STORED false)
Q_PROPERTY(QVariant gpu READ gpu STORED false)
Q_PROPERTY(QVariant gpuList READ gpuList STORED false)
@@ -92,14 +90,8 @@ public:
bool asyncExpose() const;
void setAsyncExpose(bool value);
- bool isDarkMode() const;
- bool isDarkModeStyle() const;
-
QVariant gpu() const;
QVariant gpuList() const;
-
-Q_SIGNALS:
- void darkModeChanged(bool);
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp
index 130fac4736..ea74d8e372 100644
--- a/src/plugins/platforms/windows/qwindowstheme.cpp
+++ b/src/plugins/platforms/windows/qwindowstheme.cpp
@@ -533,7 +533,7 @@ void QWindowsTheme::refreshPalettes()
return;
const bool light =
!QWindowsContext::isDarkMode()
- || (QWindowsIntegration::instance()->options() & QWindowsIntegration::DarkModeStyle) == 0;
+ || !QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeStyle);
m_palettes[SystemPalette] = new QPalette(systemPalette(light));
m_palettes[ToolTipPalette] = new QPalette(toolTipPalette(*m_palettes[SystemPalette], light));
m_palettes[MenuPalette] = new QPalette(menuPalette(*m_palettes[SystemPalette], light));
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 2da4251179..a7cc36951a 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -821,7 +821,7 @@ QWindowsWindowData
}
if (QWindowsContext::isDarkMode()
- && (QWindowsIntegration::instance()->options() & QWindowsIntegration::DarkModeWindowFrames) != 0
+ && QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames)
&& shouldApplyDarkFrame(w)) {
QWindowsWindow::setDarkBorderToWindow(result.hwnd, true);
}