From 32158e33147fb09165ac0bfc584761c80f56fa17 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Mon, 5 May 2025 17:19:55 +0200 Subject: [PATCH] [Win32] Move OS-version-related functionality to OsVersion class With the separation of the OS version check to the separate OsVersion class/DLL, version concerns have been spread over the OS and the OsVersion classes. This change consistently moves every such logic to the OsVersion class. It also replaces the manual checks of the current OS version against a specified version by an easy-to-read access to according constants identifying whether the current system is at least a specific Windows build version. --- .../Eclipse SWT PI/win32/library/os.c | 36 ---------- .../Eclipse SWT PI/win32/library/os_stats.h | 2 - .../Eclipse SWT PI/win32/library/os_structs.c | 67 ------------------- .../Eclipse SWT PI/win32/library/os_structs.h | 12 ---- .../org/eclipse/swt/internal/win32/OS.java | 32 +-------- .../swt/internal/win32/OSVERSIONINFOEX.java | 35 ---------- .../swt/internal/win32/version/OsVersion.java | 21 +++--- .../win32/org/eclipse/swt/widgets/Button.java | 7 +- .../org/eclipse/swt/widgets/Display.java | 5 +- .../win32/org/eclipse/swt/widgets/Shell.java | 5 +- 10 files changed, 25 insertions(+), 197 deletions(-) delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c index 495e6a69ac5..0d075e66459 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c @@ -6519,18 +6519,6 @@ JNIEXPORT void JNICALL OS_NATIVE(NotifyWinEvent) } #endif -#ifndef NO_OSVERSIONINFOEX_1sizeof -JNIEXPORT jint JNICALL OS_NATIVE(OSVERSIONINFOEX_1sizeof) - (JNIEnv *env, jclass that) -{ - jint rc = 0; - OS_NATIVE_ENTER(env, that, OSVERSIONINFOEX_1sizeof_FUNC); - rc = (jint)OSVERSIONINFOEX_sizeof(); - OS_NATIVE_EXIT(env, that, OSVERSIONINFOEX_1sizeof_FUNC); - return rc; -} -#endif - #ifndef NO_OUTLINETEXTMETRIC_1sizeof JNIEXPORT jint JNICALL OS_NATIVE(OUTLINETEXTMETRIC_1sizeof) (JNIEnv *env, jclass that) @@ -7322,30 +7310,6 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(RoundRect) } #endif -#ifndef NO_RtlGetVersion -JNIEXPORT jint JNICALL OS_NATIVE(RtlGetVersion) - (JNIEnv *env, jclass that, jobject arg0) -{ - OSVERSIONINFOEX _arg0, *lparg0=NULL; - jint rc = 0; - OS_NATIVE_ENTER(env, that, RtlGetVersion_FUNC); - if (arg0) if ((lparg0 = getOSVERSIONINFOEXFields(env, arg0, &_arg0)) == NULL) goto fail; -/* - rc = (jint)RtlGetVersion(lparg0); -*/ - { - OS_LOAD_FUNCTION(fp, RtlGetVersion) - if (fp) { - rc = (jint)((jint (CALLING_CONVENTION*)(OSVERSIONINFOEX *))fp)(lparg0); - } - } -fail: - if (arg0 && lparg0) setOSVERSIONINFOEXFields(env, arg0, lparg0); - OS_NATIVE_EXIT(env, that, RtlGetVersion_FUNC); - return rc; -} -#endif - #ifndef NO_SAFEARRAYBOUND_1sizeof JNIEXPORT jint JNICALL OS_NATIVE(SAFEARRAYBOUND_1sizeof) (JNIEnv *env, jclass that) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h index 16ce626c546..bc809ece5f4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h @@ -499,7 +499,6 @@ typedef enum { NONCLIENTMETRICS_1sizeof_FUNC, NOTIFYICONDATA_1V2_1SIZE_FUNC, NotifyWinEvent_FUNC, - OSVERSIONINFOEX_1sizeof_FUNC, OUTLINETEXTMETRIC_1sizeof_FUNC, OffsetRect_FUNC, OffsetRgn_FUNC, @@ -554,7 +553,6 @@ typedef enum { ReplyMessage_FUNC, RestoreDC_FUNC, RoundRect_FUNC, - RtlGetVersion_FUNC, SAFEARRAYBOUND_1sizeof_FUNC, SAFEARRAY_1sizeof_FUNC, SCRIPT_1ANALYSIS_1sizeof_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c index da11d5aa500..6de84ef4593 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c @@ -4213,73 +4213,6 @@ void setNOTIFYICONDATAFields(JNIEnv *env, jobject lpObject, NOTIFYICONDATA *lpSt } #endif -#ifndef NO_OSVERSIONINFOEX -typedef struct OSVERSIONINFOEX_FID_CACHE { - int cached; - jclass clazz; - jfieldID dwOSVersionInfoSize, dwMajorVersion, dwMinorVersion, dwBuildNumber, dwPlatformId, szCSDVersion, wServicePackMajor, wServicePackMinor, wSuiteMask, wProductType, wReserved; -} OSVERSIONINFOEX_FID_CACHE; - -OSVERSIONINFOEX_FID_CACHE OSVERSIONINFOEXFc; - -void cacheOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject) -{ - if (OSVERSIONINFOEXFc.cached) return; - OSVERSIONINFOEXFc.clazz = (*env)->GetObjectClass(env, lpObject); - OSVERSIONINFOEXFc.dwOSVersionInfoSize = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwOSVersionInfoSize", "I"); - OSVERSIONINFOEXFc.dwMajorVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwMajorVersion", "I"); - OSVERSIONINFOEXFc.dwMinorVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwMinorVersion", "I"); - OSVERSIONINFOEXFc.dwBuildNumber = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwBuildNumber", "I"); - OSVERSIONINFOEXFc.dwPlatformId = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "dwPlatformId", "I"); - OSVERSIONINFOEXFc.szCSDVersion = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "szCSDVersion", "[C"); - OSVERSIONINFOEXFc.wServicePackMajor = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wServicePackMajor", "I"); - OSVERSIONINFOEXFc.wServicePackMinor = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wServicePackMinor", "I"); - OSVERSIONINFOEXFc.wSuiteMask = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wSuiteMask", "I"); - OSVERSIONINFOEXFc.wProductType = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wProductType", "I"); - OSVERSIONINFOEXFc.wReserved = (*env)->GetFieldID(env, OSVERSIONINFOEXFc.clazz, "wReserved", "I"); - OSVERSIONINFOEXFc.cached = 1; -} - -OSVERSIONINFOEX *getOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct) -{ - if (!OSVERSIONINFOEXFc.cached) cacheOSVERSIONINFOEXFields(env, lpObject); - lpStruct->dwOSVersionInfoSize = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwOSVersionInfoSize); - lpStruct->dwMajorVersion = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMajorVersion); - lpStruct->dwMinorVersion = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMinorVersion); - lpStruct->dwBuildNumber = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwBuildNumber); - lpStruct->dwPlatformId = (*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.dwPlatformId); - { - jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, OSVERSIONINFOEXFc.szCSDVersion); - (*env)->GetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szCSDVersion) / sizeof(jchar), (jchar *)lpStruct->szCSDVersion); - } - lpStruct->wServicePackMajor = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMajor); - lpStruct->wServicePackMinor = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMinor); - lpStruct->wSuiteMask = (WORD)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wSuiteMask); - lpStruct->wProductType = (BYTE)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wProductType); - lpStruct->wReserved = (BYTE)(*env)->GetIntField(env, lpObject, OSVERSIONINFOEXFc.wReserved); - return lpStruct; -} - -void setOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct) -{ - if (!OSVERSIONINFOEXFc.cached) cacheOSVERSIONINFOEXFields(env, lpObject); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwOSVersionInfoSize, (jint)lpStruct->dwOSVersionInfoSize); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMajorVersion, (jint)lpStruct->dwMajorVersion); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwMinorVersion, (jint)lpStruct->dwMinorVersion); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwBuildNumber, (jint)lpStruct->dwBuildNumber); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.dwPlatformId, (jint)lpStruct->dwPlatformId); - { - jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, OSVERSIONINFOEXFc.szCSDVersion); - (*env)->SetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szCSDVersion) / sizeof(jchar), (jchar *)lpStruct->szCSDVersion); - } - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMajor, (jint)lpStruct->wServicePackMajor); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wServicePackMinor, (jint)lpStruct->wServicePackMinor); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wSuiteMask, (jint)lpStruct->wSuiteMask); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wProductType, (jint)lpStruct->wProductType); - (*env)->SetIntField(env, lpObject, OSVERSIONINFOEXFc.wReserved, (jint)lpStruct->wReserved); -} -#endif - #ifndef NO_OUTLINETEXTMETRIC typedef struct OUTLINETEXTMETRIC_FID_CACHE { int cached; diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h index c195326032f..1acb67b74d7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h @@ -965,18 +965,6 @@ void setNOTIFYICONDATAFields(JNIEnv *env, jobject lpObject, NOTIFYICONDATA *lpSt #define NOTIFYICONDATA_sizeof() 0 #endif -#ifndef NO_OSVERSIONINFOEX -void cacheOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject); -OSVERSIONINFOEX *getOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct); -void setOSVERSIONINFOEXFields(JNIEnv *env, jobject lpObject, OSVERSIONINFOEX *lpStruct); -#define OSVERSIONINFOEX_sizeof() sizeof(OSVERSIONINFOEX) -#else -#define cacheOSVERSIONINFOEXFields(a,b) -#define getOSVERSIONINFOEXFields(a,b,c) NULL -#define setOSVERSIONINFOEXFields(a,b,c) -#define OSVERSIONINFOEX_sizeof() 0 -#endif - #ifndef NO_OUTLINETEXTMETRIC void cacheOUTLINETEXTMETRICFields(JNIEnv *env, jobject lpObject); OUTLINETEXTMETRIC *getOUTLINETEXTMETRICFields(JNIEnv *env, jobject lpObject, OUTLINETEXTMETRIC *lpStruct); diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java index 75e6f4da1c0..73b75f8d3d9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java @@ -19,6 +19,7 @@ import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.*; +import org.eclipse.swt.internal.win32.version.*; import org.eclipse.swt.widgets.*; public class OS extends C { @@ -30,18 +31,6 @@ public class OS extends C { * SWT Windows flags */ public static final boolean IsDBLocale; - /** - * Always reports the correct build number, regardless of manifest and - * compatibility GUIDs. Note that build number alone is sufficient to - * identify Windows version. - */ - public static final int WIN32_BUILD; - /** - * Values taken from https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions - */ - public static final int WIN32_BUILD_WIN10_1809 = 17763; // "Windows 10 October 2018 Update" - public static final int WIN32_BUILD_WIN10_2004 = 19041; // "Windows 10 May 2020 Update" - public static final int WIN32_BUILD_WIN11_21H2 = 22000; // Initial Windows 11 release public static final String NO_MANIFEST = "org.eclipse.swt.internal.win32.OS.NO_MANIFEST"; @@ -53,20 +42,6 @@ public class OS extends C { public static final int SM_IMMENABLED = 0x52; static { - /* - * Starting with Windows 10, GetVersionEx() lies about version unless - * application manifest has a proper entry. RtlGetVersion() always - * reports true version. - */ - OSVERSIONINFOEX osVersionInfoEx = new OSVERSIONINFOEX (); - osVersionInfoEx.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof; - if (0 == OS.RtlGetVersion (osVersionInfoEx)) { - WIN32_BUILD = osVersionInfoEx.dwBuildNumber; - } else { - System.err.println ("SWT: OS: Failed to detect Windows build number"); - WIN32_BUILD = 0; - } - /* Load the manifest to force the XP Theme */ if (System.getProperty (NO_MANIFEST) == null) { ACTCTX pActCtx = new ACTCTX (); @@ -1974,7 +1949,6 @@ public static int VERSION (int major, int minor) { /** @method flags=const */ public static final native int NOTIFYICONDATA_V2_SIZE (); public static final native int OUTLINETEXTMETRIC_sizeof (); -public static final native int OSVERSIONINFOEX_sizeof (); public static final native int PAINTSTRUCT_sizeof (); public static final native int POINT_sizeof (); public static final native int PRINTDLG_sizeof (); @@ -3964,8 +3938,6 @@ public static int HRESULT_FROM_WIN32(int x) { public static final native boolean RestoreDC (long hdc, int nSavedDC); /** @param hdc cast=(HDC) */ public static final native boolean RoundRect (long hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight); -/** @method flags=dynamic */ -public static final native int RtlGetVersion (OSVERSIONINFOEX lpVersionInformation); /** @param hdc cast=(HDC) */ public static final native int SaveDC (long hdc); /** @param hWnd cast=(HWND) */ @@ -4616,7 +4588,7 @@ public static final native boolean DuplicateHandle(long hSourceProcessHandle, lo public static long OpenThemeData(long hwnd, char[] themeName, int dpi) { - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809) { + if (OsVersion.IS_WIN10_1809) { return OS.OpenThemeDataForDpi(hwnd, themeName, dpi); } else { return OS.OpenThemeData(hwnd, themeName); diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java deleted file mode 100644 index df6da82d39c..00000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2021 Syntevo and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Syntevo - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.win32; - -public class OSVERSIONINFOEX { - public int dwOSVersionInfoSize; - public int dwMajorVersion; - public int dwMinorVersion; - public int dwBuildNumber; - public int dwPlatformId; - public char[] szCSDVersion = new char[128]; - /** @field cast=(WORD) */ - public int wServicePackMajor; - /** @field cast=(WORD) */ - public int wServicePackMinor; - /** @field cast=(WORD) */ - public int wSuiteMask; - /** @field cast=(BYTE) */ - public int wProductType; - /** @field cast=(BYTE) */ - public int wReserved; - - public static final int sizeof = OS.OSVERSIONINFOEX_sizeof (); -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java index e02be241ec7..094e78da9ee 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/version/OsVersion.java @@ -31,20 +31,25 @@ public class OsVersion extends Platform { * compatibility GUIDs. Note that build number alone is sufficient to * identify Windows version. */ - public static final int WIN32_BUILD; + private static final int WIN32_BUILD = getCurrentOsVersion(); + /** * Values taken from https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions */ - public static final int WIN32_BUILD_WIN10_1607 = 14393; // "Windows 10 August 2016 Update" + private static final int WIN10_1607 = 14393; + public static final boolean IS_WIN10_1607 = WIN32_BUILD >= WIN10_1607; // "Windows 10 August 2016 Update" + public static final boolean IS_WIN10_1809 = WIN32_BUILD >= 17763; // "Windows 10 October 2018 Update" + public static final boolean IS_WIN10_2004 = WIN32_BUILD >= 19041; // "Windows 10 May 2020 Update" + public static final boolean IS_WIN11_21H2 = WIN32_BUILD >= 22000; // Initial Windows 11 release /** * The minimum supported Windows build version for using this SWT version */ - public static final int WIN32_MINIMUM_COMPATIBLE_BUILD = WIN32_BUILD_WIN10_1607; + private static final int MINIMUM_COMPATIBLE_BUILD = WIN10_1607; private static final String DISABLE_WINDOWS_VERSION_CHECK_PROPERTY = "swt.disableWindowsVersionCheck"; - static { + private static int getCurrentOsVersion() { /* * Starting with Windows 10, GetVersionEx() lies about version unless * application manifest has a proper entry. RtlGetVersion() always @@ -53,19 +58,19 @@ public class OsVersion extends Platform { OSVERSIONINFOEX osVersionInfoEx = new OSVERSIONINFOEX (); osVersionInfoEx.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof; if (0 == OsVersion.RtlGetVersion (osVersionInfoEx)) { - WIN32_BUILD = osVersionInfoEx.dwBuildNumber; + return osVersionInfoEx.dwBuildNumber; } else { System.err.println ("SWT: OS: Failed to detect Windows build number"); - WIN32_BUILD = 0; + return 0; } } public static void checkCompatibleWindowsVersion() { String disableVersionCheckPropertyValue = System.getProperty(DISABLE_WINDOWS_VERSION_CHECK_PROPERTY, Boolean.FALSE.toString()); boolean versionCheckDisabled = "".equals(disableVersionCheckPropertyValue) || Boolean.TRUE.toString().equalsIgnoreCase(disableVersionCheckPropertyValue); - if (!versionCheckDisabled && WIN32_BUILD < WIN32_MINIMUM_COMPATIBLE_BUILD) { + if (!versionCheckDisabled && WIN32_BUILD < MINIMUM_COMPATIBLE_BUILD) { System.err.println(String.format("Incompatible OS: Minimum Windows build version is %s but current is %s", - WIN32_MINIMUM_COMPATIBLE_BUILD, WIN32_BUILD)); + MINIMUM_COMPATIBLE_BUILD, WIN32_BUILD)); System.exit(1); } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java index ca2f165452e..788d239be88 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java @@ -20,6 +20,7 @@ import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.win32.*; +import org.eclipse.swt.internal.win32.version.*; /** * Instances of this class represent a selectable user interface object that @@ -1351,7 +1352,7 @@ LRESULT wmNotifyChild (NMHDR hdr, long wParam, long lParam) { int inset = 2; int radius = 3; - if (useDarkModeExplorerTheme && (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN11_21H2)) { + if (useDarkModeExplorerTheme && OsVersion.IS_WIN11_21H2) { // On Win11, Light theme and Dark theme images have different sizes inset = 1; radius = 4; @@ -1362,7 +1363,7 @@ LRESULT wmNotifyChild (NMHDR hdr, long wParam, long lParam) { int r = nmcd.right - inset; int b = nmcd.bottom - inset; - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN11_21H2) { + if (OsVersion.IS_WIN11_21H2) { // 'RoundRect' has left/top pixel reserved for border l += 1; t += 1; @@ -1488,7 +1489,7 @@ static int getThemeStateId(int style, boolean pressed, boolean enabled) { * The workaround is to use hot image in place of default. */ boolean hot = false; - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN11_21H2) { + if (OsVersion.IS_WIN11_21H2) { if (!pressed && enabled) { hot = true; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java index 38775af168e..766f9176730 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java @@ -25,6 +25,7 @@ import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.ole.win32.*; import org.eclipse.swt.internal.win32.*; +import org.eclipse.swt.internal.win32.version.*; /** * Instances of this class are responsible for managing the @@ -2158,7 +2159,7 @@ public static boolean isSystemDarkTheme () { /* * The registry settings, and Dark Theme itself, is present since Win10 1809 */ - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809) { + if (OsVersion.IS_WIN10_1809) { int[] result = OS.readRegistryDwords(OS.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", "AppsUseLightTheme"); if (result!=null) { @@ -5397,7 +5398,7 @@ private boolean setDPIAwareness(int desiredDpiAwareness) { } if (desiredDpiAwareness == OS.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) { // "Per Monitor V2" only available in more recent Windows version - boolean perMonitorV2Available = OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809; + boolean perMonitorV2Available = OsVersion.IS_WIN10_1809; if (!perMonitorV2Available) { System.err.println("***WARNING: the OS version does not support DPI awareness mode PerMonitorV2."); return false; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java index 3033af31782..6cb9cf52dd9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java @@ -19,6 +19,7 @@ import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.win32.*; +import org.eclipse.swt.internal.win32.version.*; /** * Instances of this class represent the "windows" @@ -581,11 +582,11 @@ void createBalloonTipHandle () { void setTitleColoring() { int attributeID = 0; - if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_2004) { + if (OsVersion.IS_WIN10_2004) { // Documented since build 20348, but was already present since build 19041 final int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; attributeID = DWMWA_USE_IMMERSIVE_DARK_MODE; - } else if (OS.WIN32_BUILD >= OS.WIN32_BUILD_WIN10_1809) { + } else if (OsVersion.IS_WIN10_1809) { // Undocumented value attributeID = 19; } else {