RFR: 8321151: JDK-8294427 breaks Windows L&F on all older Windows versions
Rajat Mahajan
rmahajan at openjdk.org
Thu Dec 21 01:26:13 UTC 2023
**Issue:**
https://bugs.openjdk.org/browse/JDK-8294427 starts to use this API
https://learn.microsoft.com/en-us/windows/win32/api/uxtheme/nf-uxtheme-openthemedatafordpi
which was introduced only in Windows 10 1703.
So the theming engine won't load on anything earlier like the original windows 10 or windows 8.1 etc.
So as an undocumented side-effect it completely breaks the theming of Windows L&F on anything earlier
and it falls back to hard-coded rendering like Windows NT/Windows 2000
Whilst those older versions are technically out of at least "mainstream" support, this is not the way
to make that breaking change and I see this fix has been backported to older releases which expect stability
it seems to me that this code should NOT fail if the new API is missing and instead fall back to the old code.
No one will care about a pixel being off on hi-dpi if the entire UI is wrong.
**Fix:**
Added fallback path to support older versions of Windows that do not support OpenThemeDataForDpi().
**Testing:**
Tested on my Windows 10 machine with and without the fallback path and it works as expected.
Alexey tested on Windows 7 and on Windows 10 v1607 — it works correctly (jdk 21.0.2 can't render themes as reported).
He also tested on Windows 11 .
-------------
Commit messages:
- code cleanup
- Ensure either OpenThemeDataForDpiFunc or OpenThemeDataFunc is present
- Declare InitThemes and rescale as static
- Re-wrap the conditional operator with -ForDpiFunc
- Move defaultDPI to global context
- Updated changes
- execute fall-back
Changes: https://git.openjdk.org/jdk/pull/17173/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17173&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8321151
Stats: 54 lines in 1 file changed: 43 ins; 2 del; 9 mod
Patch: https://git.openjdk.org/jdk/pull/17173.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/17173/head:pull/17173
PR: https://git.openjdk.org/jdk/pull/17173
More information about the client-libs-dev
mailing list