11// SPDX-License-Identifier: MPL-2.0
22
33/*
4- * Copyright (c) 2025 ozone10
4+ * Copyright (c) 2025 oZone10
55 * This Source Code Form is subject to the terms of the Mozilla Public
66 * License, v. 2.0. If a copy of the MPL was not distributed with this
77 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
@@ -134,7 +134,7 @@ enum class PreferredAppMode
134134 Max
135135};
136136
137- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
137+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
138138enum WINDOWCOMPOSITIONATTRIB
139139{
140140 WCA_UNDEFINED = 0 ,
@@ -176,13 +176,13 @@ struct WINDOWCOMPOSITIONATTRIBDATA
176176#endif
177177
178178using fnRtlGetNtVersionNumbers = void (WINAPI*)(LPDWORD major, LPDWORD minor, LPDWORD build);
179- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
179+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
180180using fnSetWindowCompositionAttribute = BOOL (WINAPI*)(HWND hWnd, WINDOWCOMPOSITIONATTRIBDATA*);
181181#endif
182182// 1809 17763
183183using fnShouldAppsUseDarkMode = auto (WINAPI*)() -> bool ; // ordinal 132
184184using fnAllowDarkModeForWindow = auto (WINAPI*)(HWND hWnd, bool allow) -> bool ; // ordinal 133
185- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
185+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
186186using fnAllowDarkModeForApp = auto (WINAPI*)(bool allow) -> bool ; // ordinal 135, in 1809
187187#endif
188188using fnFlushMenuThemes = void (WINAPI*)(); // ordinal 136
@@ -195,12 +195,12 @@ using fnOpenNcThemeData = auto (WINAPI*)(HWND hWnd, LPCWSTR pszClassList) -> HTH
195195using fnSetPreferredAppMode = auto (WINAPI*)(PreferredAppMode appMode) -> PreferredAppMode; // ordinal 135, in 1903
196196// using fnIsDarkModeAllowedForApp = auto (WINAPI*)() -> bool; // ordinal 139
197197
198- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
198+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
199199static fnSetWindowCompositionAttribute pfSetWindowCompositionAttribute = nullptr ;
200200#endif
201201static fnShouldAppsUseDarkMode pfShouldAppsUseDarkMode = nullptr ;
202202static fnAllowDarkModeForWindow pfAllowDarkModeForWindow = nullptr ;
203- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
203+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
204204static fnAllowDarkModeForApp _AllowDarkModeForApp = nullptr ;
205205#endif
206206static fnFlushMenuThemes pfFlushMenuThemes = nullptr ;
@@ -245,7 +245,7 @@ bool IsHighContrast()
245245 return false ;
246246}
247247
248- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
248+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
249249void SetTitleBarThemeColor (HWND hWnd, BOOL dark)
250250{
251251
@@ -307,7 +307,7 @@ void AllowDarkModeForApp(bool allow)
307307 {
308308 pfSetPreferredAppMode (allow ? PreferredAppMode::ForceDark : PreferredAppMode::Default);
309309 }
310- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
310+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
311311 else if (_AllowDarkModeForApp != nullptr )
312312 {
313313 _AllowDarkModeForApp (allow);
@@ -325,6 +325,7 @@ static void FlushMenuThemes()
325325
326326// limit dark scroll bar to specific windows and their children
327327
328+ #if defined(_DARKMODELIB_LIMIT_SCROLLBAR_FIX) && (_DARKMODELIB_LIMIT_SCROLLBAR_FIX > 0)
328329static std::unordered_set<HWND> g_darkScrollBarWindows;
329330static std::mutex g_darkScrollBarMutex;
330331
@@ -353,12 +354,16 @@ static bool IsWindowOrParentUsingDarkScrollBar(HWND hWnd)
353354 }
354355 return (hWnd != hRoot && hasElement (g_darkScrollBarWindows, hRoot));
355356}
357+ #endif // defined(_DARKMODELIB_LIMIT_SCROLLBAR_FIX) && (_DARKMODELIB_LIMIT_SCROLLBAR_FIX > 0)
356358
357359static HTHEME WINAPI MyOpenNcThemeData (HWND hWnd, LPCWSTR pszClassList)
358360{
359- if (std::wcscmp (pszClassList, WC_SCROLLBAR) == 0 )
361+ static constexpr std::wstring_view scrollBarClassName = WC_SCROLLBAR;
362+ if (scrollBarClassName == pszClassList)
360363 {
364+ #if defined(_DARKMODELIB_LIMIT_SCROLLBAR_FIX) && (_DARKMODELIB_LIMIT_SCROLLBAR_FIX > 0)
361365 if (IsWindowOrParentUsingDarkScrollBar (hWnd))
366+ #endif
362367 {
363368 hWnd = nullptr ;
364369 pszClassList = L" Explorer::ScrollBar" ;
@@ -380,10 +385,10 @@ static void FixDarkScrollBar()
380385 }
381386}
382387
383- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
388+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
384389static constexpr DWORD g_win10Build = 17763 ;
385390#else
386- static constexpr DWORD g_win10Build = 19045 ;
391+ static constexpr DWORD g_win10Build = 19044 ; // 21H2 latest LTSC, 22H2 19045 latest GA
387392#endif
388393static constexpr DWORD g_win11Build = 22000 ;
389394
@@ -399,7 +404,7 @@ bool IsWindows11() // or later OS version
399404
400405static constexpr bool CheckBuildNumber (DWORD buildNumber)
401406{
402- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
407+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
403408 static constexpr size_t nWin10Builds = 8 ;
404409 // Windows 10 builds { 1809, 1903, 1909, 2004, 20H2, 21H1, 21H2, 22H2 }
405410 static constexpr DWORD win10Builds[nWin10Builds] = { 17763 , 18362 , 18363 , 19041 , 19042 , 19043 , 19044 , 19045 };
@@ -452,7 +457,7 @@ void InitDarkMode()
452457 const HMODULE& hUxtheme = moduleUxtheme.get ();
453458
454459 bool ptrFnOrd135NotNullptr = false ;
455- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
460+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
456461 if (g_buildNumber < 18362 )
457462 ptrFnOrd135NotNullptr = loadFn (hUxtheme, _AllowDarkModeForApp, 135 );
458463 else
@@ -471,7 +476,7 @@ void InitDarkMode()
471476 }
472477
473478 loadFn (hUxtheme, pfGetIsImmersiveColorUsingHighContrast, 106 );
474- #if defined(_DARKMODELIB_ALLOW_OLD_OS)
479+ #if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
475480 if (g_buildNumber < 19041 )
476481 {
477482 HMODULE hUser32 = GetModuleHandleW (L" user32.dll" );
0 commit comments