From d11cb3779b828116af6391dfc07c147fa5e0a1c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Thu, 4 Apr 2024 16:40:27 +0200 Subject: [PATCH] Win32: Remove support for Windows XP and Vista It's increasingly difficult to maintain a safe testing environment for Windows XP, and so increasingly a burden on contributors to maintain support for it. Windows XP has been out of of support since 2014 and should not be used as a desktop OS. Fixes #2505 --- README.md | 3 ++- docs/news.md | 6 +++++ src/wgl_context.c | 10 ++++---- src/win32_init.c | 6 +---- src/win32_platform.h | 57 +++++--------------------------------------- src/win32_window.c | 19 +++------------ 6 files changed, 23 insertions(+), 78 deletions(-) diff --git a/README.md b/README.md index 344d6195..718449f5 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ more information. ## System requirements -GLFW supports Windows XP and later and macOS 10.11 and later. Linux and other +GLFW supports Windows 7 and later and macOS 10.11 and later. Linux and other Unix-like systems running the X Window System are supported even without a desktop environment or modern extensions, although some features require a running window or clipboard manager. The OSMesa backend requires Mesa 6.3. @@ -125,6 +125,7 @@ information on what to include when reporting a bug. the limit of the mouse button tokens to be reported (#2423) - Updated minimum CMake version to 3.16 (#2541) - Removed support for building with original MinGW (#2540) + - [Win32] Removed support for Windows XP and Vista (#2505) - [Cocoa] Added `QuartzCore` framework as link-time dependency - [Cocoa] Removed support for OS X 10.10 Yosemite and earlier (#2506) - [Wayland] Bugfix: The fractional scaling related objects were not destroyed diff --git a/docs/news.md b/docs/news.md index e98e2a77..640ae7a5 100644 --- a/docs/news.md +++ b/docs/news.md @@ -20,6 +20,12 @@ this. ## Removals {#removals} +### Windows XP and Vista support has been removed {#winxp_vista} + +Support for Windows XP and Vista has been removed. Windows XP has been out of extended +support since 2014. + + ### Original MinGW support has been removed {#original_mingw} Support for the now unmaintained original MinGW distribution has been removed. diff --git a/src/wgl_context.c b/src/wgl_context.c index 1c9189fa..3c7d71c2 100644 --- a/src/wgl_context.c +++ b/src/wgl_context.c @@ -327,8 +327,8 @@ static void swapBuffersWGL(_GLFWwindow* window) { if (!window->monitor) { - // HACK: Use DwmFlush when desktop composition is enabled on Windows Vista and 7 - if (!IsWindows8OrGreater() && IsWindowsVistaOrGreater()) + // HACK: Use DwmFlush when desktop composition is enabled on Windows 7 + if (!IsWindows8OrGreater()) { BOOL enabled = FALSE; @@ -353,9 +353,9 @@ static void swapIntervalWGL(int interval) if (!window->monitor) { - // HACK: Disable WGL swap interval when desktop composition is enabled on Windows - // Vista and 7 to avoid interfering with DWM vsync - if (!IsWindows8OrGreater() && IsWindowsVistaOrGreater()) + // HACK: Disable WGL swap interval when desktop composition is enabled on + // Windows 7 to avoid interfering with DWM vsync + if (!IsWindows8OrGreater()) { BOOL enabled = FALSE; diff --git a/src/win32_init.c b/src/win32_init.c index 77ab56ba..6b6e9d08 100644 --- a/src/win32_init.c +++ b/src/win32_init.c @@ -89,10 +89,6 @@ static GLFWbool loadLibraries(void) return GLFW_FALSE; } - _glfw.win32.user32.SetProcessDPIAware_ = (PFN_SetProcessDPIAware) - _glfwPlatformGetModuleSymbol(_glfw.win32.user32.instance, "SetProcessDPIAware"); - _glfw.win32.user32.ChangeWindowMessageFilterEx_ = (PFN_ChangeWindowMessageFilterEx) - _glfwPlatformGetModuleSymbol(_glfw.win32.user32.instance, "ChangeWindowMessageFilterEx"); _glfw.win32.user32.EnableNonClientDpiScaling_ = (PFN_EnableNonClientDpiScaling) _glfwPlatformGetModuleSymbol(_glfw.win32.user32.instance, "EnableNonClientDpiScaling"); _glfw.win32.user32.SetProcessDpiAwarenessContext_ = (PFN_SetProcessDpiAwarenessContext) @@ -692,7 +688,7 @@ int _glfwInitWin32(void) SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); else if (IsWindows8Point1OrGreater()) SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE); - else if (IsWindowsVistaOrGreater()) + else SetProcessDPIAware(); if (!createHelperWindow()) diff --git a/src/win32_platform.h b/src/win32_platform.h index bcbc604b..49cceba6 100644 --- a/src/win32_platform.h +++ b/src/win32_platform.h @@ -48,14 +48,14 @@ #define UNICODE #endif -// GLFW requires Windows XP or later -#if WINVER < 0x0501 +// GLFW requires Windows 7 or later +#if WINVER < 0x0601 #undef WINVER - #define WINVER 0x0501 + #define WINVER 0x0601 #endif -#if _WIN32_WINNT < 0x0501 +#if _WIN32_WINNT < 0x0601 #undef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 + #define _WIN32_WINNT 0x0601 #endif // GLFW uses DirectInput8 interfaces @@ -66,20 +66,12 @@ #include #include +#include #include #include #include // HACK: Define macros that some windows.h variants don't -#ifndef WM_MOUSEHWHEEL - #define WM_MOUSEHWHEEL 0x020E -#endif -#ifndef WM_DWMCOMPOSITIONCHANGED - #define WM_DWMCOMPOSITIONCHANGED 0x031E -#endif -#ifndef WM_DWMCOLORIZATIONCOLORCHANGED - #define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320 -#endif #ifndef WM_COPYGLOBALDATA #define WM_COPYGLOBALDATA 0x0049 #endif @@ -102,31 +94,6 @@ #define USER_DEFAULT_SCREEN_DPI 96 #endif -#if WINVER < 0x0601 -typedef struct -{ - DWORD cbSize; - DWORD ExtStatus; -} CHANGEFILTERSTRUCT; -#ifndef MSGFLT_ALLOW - #define MSGFLT_ALLOW 1 -#endif -#endif /*Windows 7*/ - -#if WINVER < 0x0600 -#define DWM_BB_ENABLE 0x00000001 -#define DWM_BB_BLURREGION 0x00000002 -typedef struct -{ - DWORD dwFlags; - BOOL fEnable; - HRGN hRgnBlur; - BOOL fTransitionOnMaximized; -} DWM_BLURBEHIND; -#else - #include -#endif /*Windows Vista*/ - #ifndef DPI_ENUMS_DECLARED typedef enum { @@ -150,12 +117,6 @@ typedef enum // Replacement for versionhelpers.h macros, as we cannot rely on the // application having a correct embedded manifest // -#define IsWindowsVistaOrGreater() \ - _glfwIsWindowsVersionOrGreaterWin32(HIBYTE(_WIN32_WINNT_VISTA), \ - LOBYTE(_WIN32_WINNT_VISTA), 0) -#define IsWindows7OrGreater() \ - _glfwIsWindowsVersionOrGreaterWin32(HIBYTE(_WIN32_WINNT_WIN7), \ - LOBYTE(_WIN32_WINNT_WIN7), 0) #define IsWindows8OrGreater() \ _glfwIsWindowsVersionOrGreaterWin32(HIBYTE(_WIN32_WINNT_WIN8), \ LOBYTE(_WIN32_WINNT_WIN8), 0) @@ -266,15 +227,11 @@ typedef HRESULT (WINAPI * PFN_DirectInput8Create)(HINSTANCE,DWORD,REFIID,LPVOID* #define DirectInput8Create _glfw.win32.dinput8.Create // user32.dll function pointer typedefs -typedef BOOL (WINAPI * PFN_SetProcessDPIAware)(void); -typedef BOOL (WINAPI * PFN_ChangeWindowMessageFilterEx)(HWND,UINT,DWORD,CHANGEFILTERSTRUCT*); typedef BOOL (WINAPI * PFN_EnableNonClientDpiScaling)(HWND); typedef BOOL (WINAPI * PFN_SetProcessDpiAwarenessContext)(HANDLE); typedef UINT (WINAPI * PFN_GetDpiForWindow)(HWND); typedef BOOL (WINAPI * PFN_AdjustWindowRectExForDpi)(LPRECT,DWORD,BOOL,DWORD,UINT); typedef int (WINAPI * PFN_GetSystemMetricsForDpi)(int,UINT); -#define SetProcessDPIAware _glfw.win32.user32.SetProcessDPIAware_ -#define ChangeWindowMessageFilterEx _glfw.win32.user32.ChangeWindowMessageFilterEx_ #define EnableNonClientDpiScaling _glfw.win32.user32.EnableNonClientDpiScaling_ #define SetProcessDpiAwarenessContext _glfw.win32.user32.SetProcessDpiAwarenessContext_ #define GetDpiForWindow _glfw.win32.user32.GetDpiForWindow_ @@ -460,8 +417,6 @@ typedef struct _GLFWlibraryWin32 struct { HINSTANCE instance; - PFN_SetProcessDPIAware SetProcessDPIAware_; - PFN_ChangeWindowMessageFilterEx ChangeWindowMessageFilterEx_; PFN_EnableNonClientDpiScaling EnableNonClientDpiScaling_; PFN_SetProcessDpiAwarenessContext SetProcessDpiAwarenessContext_; PFN_GetDpiForWindow GetDpiForWindow_; diff --git a/src/win32_window.c b/src/win32_window.c index d014944b..26f9684b 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -374,9 +374,6 @@ static void updateFramebufferTransparency(const _GLFWwindow* window) BOOL composition, opaque; DWORD color; - if (!IsWindowsVistaOrGreater()) - return; - if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition) return; @@ -983,7 +980,6 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l case WM_MOUSEHWHEEL: { - // This message is only sent on Windows Vista and later // NOTE: The X-axis is inverted for consistency with macOS and X11 _glfwInputScroll(window, -((SHORT) HIWORD(wParam) / (double) WHEEL_DELTA), 0.0); return 0; @@ -1407,15 +1403,9 @@ static int createNativeWindow(_GLFWwindow* window, SetPropW(window->win32.handle, L"GLFW", window); - if (IsWindows7OrGreater()) - { - ChangeWindowMessageFilterEx(window->win32.handle, - WM_DROPFILES, MSGFLT_ALLOW, NULL); - ChangeWindowMessageFilterEx(window->win32.handle, - WM_COPYDATA, MSGFLT_ALLOW, NULL); - ChangeWindowMessageFilterEx(window->win32.handle, - WM_COPYGLOBALDATA, MSGFLT_ALLOW, NULL); - } + ChangeWindowMessageFilterEx(window->win32.handle, WM_DROPFILES, MSGFLT_ALLOW, NULL); + ChangeWindowMessageFilterEx(window->win32.handle, WM_COPYDATA, MSGFLT_ALLOW, NULL); + ChangeWindowMessageFilterEx(window->win32.handle, WM_COPYGLOBALDATA, MSGFLT_ALLOW, NULL); window->win32.scaleToMonitor = wndconfig->scaleToMonitor; window->win32.keymenu = wndconfig->win32.keymenu; @@ -1981,9 +1971,6 @@ GLFWbool _glfwFramebufferTransparentWin32(_GLFWwindow* window) if (!window->win32.transparent) return GLFW_FALSE; - if (!IsWindowsVistaOrGreater()) - return GLFW_FALSE; - if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition) return GLFW_FALSE;