From 10a94c0794a86687118e8723992ad9ad63ea717a Mon Sep 17 00:00:00 2001 From: Axel Cocat Date: Sat, 20 Feb 2021 00:06:12 +0100 Subject: [PATCH] Fix Windows' try_theme returning Theme::Dark when new theme is light (#1861) --- CHANGELOG.md | 1 + src/platform_impl/windows/dark_mode.rs | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fad7afd1..ea4fe474 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - On Android, unimplemented events are marked as unhandled on the native event loop. - On Windows, added `WindowBuilderExtWindows::with_menu` to set a custom menu at window creation time. - On Android, bump `ndk` and `ndk-glue` to 0.3: use predefined constants for event `ident`. +- On Windows, fixed `WindowEvent::ThemeChanged` not properly firing and fixed `Window::theme` returning the wrong theme. - On Web, added support for `DeviceEvent::MouseMotion` to listen for relative mouse movements. # 0.24.0 (2020-12-09) diff --git a/src/platform_impl/windows/dark_mode.rs b/src/platform_impl/windows/dark_mode.rs index a229e555..6aabbf8b 100644 --- a/src/platform_impl/windows/dark_mode.rs +++ b/src/platform_impl/windows/dark_mode.rs @@ -81,16 +81,20 @@ pub fn try_theme(hwnd: HWND, preferred_theme: Option) -> Theme { None => should_use_dark_mode(), }; - let theme_name = if is_dark_mode { - DARK_THEME_NAME.as_ptr() + let theme = if is_dark_mode { + Theme::Dark } else { - LIGHT_THEME_NAME.as_ptr() + Theme::Light + }; + let theme_name = match theme { + Theme::Dark => DARK_THEME_NAME.as_ptr(), + Theme::Light => LIGHT_THEME_NAME.as_ptr(), }; let status = unsafe { uxtheme::SetWindowTheme(hwnd, theme_name as _, std::ptr::null()) }; if status == S_OK && set_dark_mode_for_window(hwnd, is_dark_mode) { - return Theme::Dark; + return theme; } }