Skip to content

Commit 29bbaba

Browse files
committed
Update files, enabled support for Windows 10 build 19044
1 parent c5b7b39 commit 29bbaba

File tree

7 files changed

+97
-64
lines changed

7 files changed

+97
-64
lines changed

.github/workflows/build_win.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ jobs:
2828
run: |
2929
build.cmd ${{ matrix.platform }}
3030
31-
- name: Archive artifact ${{ matrix.arch }}
31+
- name: Archive artifact ${{ matrix.platform }}
3232
uses: actions/upload-artifact@v4
3333
with:
3434
name: 7z-dark-${{ matrix.platform }}
3535
path: ${{ matrix.platform }}-bin
3636

37-
- name: Archive artifact ${{ matrix.arch }} with fluent icons
37+
- name: Archive artifact ${{ matrix.platform }} with fluent icons
3838
if: ${{ matrix.platform == 'x64' || matrix.platform == 'arm64' }}
3939
uses: actions/upload-artifact@v4
4040
with:

DarkMode/src/DarkMode.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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)
138138
enum WINDOWCOMPOSITIONATTRIB
139139
{
140140
WCA_UNDEFINED = 0,
@@ -176,13 +176,13 @@ struct WINDOWCOMPOSITIONATTRIBDATA
176176
#endif
177177

178178
using 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)
180180
using fnSetWindowCompositionAttribute = BOOL (WINAPI*)(HWND hWnd, WINDOWCOMPOSITIONATTRIBDATA*);
181181
#endif
182182
// 1809 17763
183183
using fnShouldAppsUseDarkMode = auto (WINAPI*)() -> bool; // ordinal 132
184184
using 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)
186186
using fnAllowDarkModeForApp = auto (WINAPI*)(bool allow) -> bool; // ordinal 135, in 1809
187187
#endif
188188
using fnFlushMenuThemes = void (WINAPI*)(); // ordinal 136
@@ -195,12 +195,12 @@ using fnOpenNcThemeData = auto (WINAPI*)(HWND hWnd, LPCWSTR pszClassList) -> HTH
195195
using 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)
199199
static fnSetWindowCompositionAttribute pfSetWindowCompositionAttribute = nullptr;
200200
#endif
201201
static fnShouldAppsUseDarkMode pfShouldAppsUseDarkMode = nullptr;
202202
static fnAllowDarkModeForWindow pfAllowDarkModeForWindow = nullptr;
203-
#if defined(_DARKMODELIB_ALLOW_OLD_OS)
203+
#if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
204204
static fnAllowDarkModeForApp _AllowDarkModeForApp = nullptr;
205205
#endif
206206
static 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)
249249
void 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)
328329
static std::unordered_set<HWND> g_darkScrollBarWindows;
329330
static 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

357359
static 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)
384389
static 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
388393
static constexpr DWORD g_win11Build = 22000;
389394

@@ -399,7 +404,7 @@ bool IsWindows11() // or later OS version
399404

400405
static 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");

DarkMode/src/DarkMode.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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/.
@@ -24,14 +24,16 @@ extern bool g_darkModeEnabled;
2424
[[nodiscard]] bool ShouldAppsUseDarkMode();
2525
bool AllowDarkModeForWindow(HWND hWnd, bool allow);
2626
[[nodiscard]] bool IsHighContrast();
27-
#if defined(_DARKMODELIB_ALLOW_OLD_OS)
27+
#if defined(_DARKMODELIB_ALLOW_OLD_OS) && (_DARKMODELIB_ALLOW_OLD_OS > 0)
2828
void RefreshTitleBarThemeColor(HWND hWnd);
2929
void SetTitleBarThemeColor(HWND hWnd, BOOL dark);
3030
#endif
3131
[[nodiscard]] bool IsColorSchemeChangeMessage(LPARAM lParam);
3232
[[nodiscard]] bool IsColorSchemeChangeMessage(UINT uMsg, LPARAM lParam);
3333
void AllowDarkModeForApp(bool allow);
34+
#if defined(_DARKMODELIB_LIMIT_SCROLLBAR_FIX) && (_DARKMODELIB_LIMIT_SCROLLBAR_FIX > 0)
3435
void EnableDarkScrollBarForWindowAndChildren(HWND hWnd);
36+
#endif
3537
void InitDarkMode();
3638
void SetDarkMode(bool useDark, bool fixDarkScrollbar);
3739
[[nodiscard]] bool IsWindows10();

0 commit comments

Comments
 (0)