From 68a5e2061a6469b67a97cfc60d97a3d1fae29d6a Mon Sep 17 00:00:00 2001 From: Dustin Howett Date: Thu, 6 Jul 2023 15:50:10 -0500 Subject: [PATCH 1/2] Remove TerminalTrySetDarkTheme The DWMWA for this has been documented for quite a while now! --- src/cascadia/WindowsTerminal/AppHost.cpp | 2 +- src/cascadia/WindowsTerminal/IslandWindow.cpp | 8 +++++++- src/cascadia/WindowsTerminal/IslandWindow.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cascadia/WindowsTerminal/AppHost.cpp b/src/cascadia/WindowsTerminal/AppHost.cpp index 9d2066a5dac..ddbbafdbe9b 100644 --- a/src/cascadia/WindowsTerminal/AppHost.cpp +++ b/src/cascadia/WindowsTerminal/AppHost.cpp @@ -1089,7 +1089,7 @@ void AppHost::_updateTheme() // It must be done before WM_NCPAINT so that the borders are rendered with // the correct theme. // For more information, see GH#6620. - LOG_IF_FAILED(TerminalTrySetDarkTheme(_window->GetHandle(), _isActuallyDarkTheme(theme.RequestedTheme()))); + _window->UseDarkTheme(_isActuallyDarkTheme(theme.RequestedTheme())); // Update the window frame. If `rainbowFrame:true` is enabled, then that // will be used. Otherwise we'll try to use the `FrameBrush` set in the diff --git a/src/cascadia/WindowsTerminal/IslandWindow.cpp b/src/cascadia/WindowsTerminal/IslandWindow.cpp index 5c0e7792966..88e15c9ede5 100644 --- a/src/cascadia/WindowsTerminal/IslandWindow.cpp +++ b/src/cascadia/WindowsTerminal/IslandWindow.cpp @@ -1873,6 +1873,12 @@ void IslandWindow::RemoveFromSystemMenu(const winrt::hstring& itemLabel) _systemMenuItems.erase(it->first); } +void IslandWindow::UseDarkTheme(const bool v) +{ + const BOOL attribute = v ? TRUE : FALSE; + std::ignore = DwmSetWindowAttribute(GetHandle(), DWMWA_USE_IMMERSIVE_DARK_MODE, &attribute, sizeof(attribute)); +} + void IslandWindow::UseMica(const bool newValue, const double /*titlebarOpacity*/) { // This block of code enables Mica for our window. By all accounts, this @@ -1907,7 +1913,7 @@ void IslandWindow::UseMica(const bool newValue, const double /*titlebarOpacity*/ // the darkness of our window. However, we're keeping this call to prevent // the window from appearing as a white rectangle for a frame before we load // the rest of the settings. - LOG_IF_FAILED(TerminalTrySetDarkTheme(_window.get(), true)); + UseDarkTheme(true); return TRUE; } diff --git a/src/cascadia/WindowsTerminal/IslandWindow.h b/src/cascadia/WindowsTerminal/IslandWindow.h index ca34bc125bf..db7411f7345 100644 --- a/src/cascadia/WindowsTerminal/IslandWindow.h +++ b/src/cascadia/WindowsTerminal/IslandWindow.h @@ -65,6 +65,7 @@ class IslandWindow : void AddToSystemMenu(const winrt::hstring& itemLabel, winrt::delegate callback); void RemoveFromSystemMenu(const winrt::hstring& itemLabel); + void UseDarkTheme(const bool v); virtual void UseMica(const bool newValue, const double titlebarOpacity); WINRT_CALLBACK(DragRegionClicked, winrt::delegate<>); From 437abe7ce2c90c15c7240a2a2848f41d5a37bce2 Mon Sep 17 00:00:00 2001 From: Dustin Howett Date: Thu, 6 Jul 2023 16:21:54 -0500 Subject: [PATCH 2/2] Switch to the new TerminalThemeHelpers --- dep/nuget/packages.config | 2 +- src/common.nugetversions.targets | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dep/nuget/packages.config b/dep/nuget/packages.config index fb1f261b593..d0c670dcd57 100644 --- a/dep/nuget/packages.config +++ b/dep/nuget/packages.config @@ -5,7 +5,7 @@ - + diff --git a/src/common.nugetversions.targets b/src/common.nugetversions.targets index bc949206615..3113c124072 100644 --- a/src/common.nugetversions.targets +++ b/src/common.nugetversions.targets @@ -46,7 +46,7 @@ - + @@ -82,7 +82,7 @@ - +