Windows: Reevaluate dark frames if the application palette changes
Since 5ea7e3a811 we are using dark window
frames if the default palette is dark, unless applications explicitly
override dark frame support.
If the palette changes during runtime, we didn't reevaluate that
setting. Do that by handling ApplicationPaletteChange events in
QWindowsWindow. We still have to respect an explicit opt-out.
Simplify the code at the call sites of setDarkBorder(), we don't need
to check all the time whether the application has opted out of dark
frame support.
Pick-to: 6.4
Task-number: QTBUG-72028
Change-Id: I94e7d33cd21f9656ca210b43e775f487abc25b54
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
bb10
parent
f0cd18706f
commit
f32aa06f4f
|
|
@ -849,8 +849,9 @@ static inline bool shouldApplyDarkFrame(const QWindow *w)
|
|||
{
|
||||
if (!w->isTopLevel() || w->flags().testFlag(Qt::FramelessWindowHint))
|
||||
return false;
|
||||
if (QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeStyle))
|
||||
return true;
|
||||
// the application has explicitly opted out of dark frames
|
||||
if (!QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames))
|
||||
return false;
|
||||
// if the application supports a dark border, and the palette is dark (window background color
|
||||
// is darker than the text), then turn dark-border support on, otherwise use a light border.
|
||||
const QPalette defaultPalette;
|
||||
|
|
@ -925,11 +926,8 @@ QWindowsWindowData
|
|||
return result;
|
||||
}
|
||||
|
||||
if (QWindowsContext::isDarkMode()
|
||||
&& QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames)
|
||||
&& shouldApplyDarkFrame(w)) {
|
||||
QWindowsWindow::setDarkBorderToWindow(result.hwnd, true);
|
||||
}
|
||||
QWindowsWindow::setDarkBorderToWindow(result.hwnd, QWindowsContext::isDarkMode()
|
||||
&& shouldApplyDarkFrame(w));
|
||||
|
||||
if (mirrorParentWidth != 0) {
|
||||
context->obtainedPos.setX(mirrorParentWidth - context->obtainedSize.width()
|
||||
|
|
@ -2606,6 +2604,9 @@ void QWindowsWindow::setExStyle(unsigned s) const
|
|||
bool QWindowsWindow::windowEvent(QEvent *event)
|
||||
{
|
||||
switch (event->type()) {
|
||||
case QEvent::ApplicationPaletteChange:
|
||||
setDarkBorder(QWindowsContext::isDarkMode());
|
||||
break;
|
||||
case QEvent::WindowBlocked: // Blocked by another modal window.
|
||||
setEnabled(false);
|
||||
setFlag(BlockedByModal);
|
||||
|
|
@ -3177,8 +3178,12 @@ bool QWindowsWindow::setDarkBorderToWindow(HWND hwnd, bool d)
|
|||
|
||||
void QWindowsWindow::setDarkBorder(bool d)
|
||||
{
|
||||
if (shouldApplyDarkFrame(window()) && queryDarkBorder(m_data.hwnd) != d)
|
||||
setDarkBorderToWindow(m_data.hwnd, d);
|
||||
// respect explicit opt-out and incompatible palettes or styles
|
||||
d = d && shouldApplyDarkFrame(window());
|
||||
if (queryDarkBorder(m_data.hwnd) == d)
|
||||
return;
|
||||
|
||||
setDarkBorderToWindow(m_data.hwnd, d);
|
||||
}
|
||||
|
||||
QWindowsMenuBar *QWindowsWindow::menuBar() const
|
||||
|
|
|
|||
Loading…
Reference in New Issue