Bläddra i källkod

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
Camilla Löwy 1 år sedan
förälder
incheckning
d11cb3779b
6 ändrade filer med 23 tillägg och 78 borttagningar
  1. 2 1
      README.md
  2. 6 0
      docs/news.md
  3. 5 5
      src/wgl_context.c
  4. 1 5
      src/win32_init.c
  5. 6 51
      src/win32_platform.h
  6. 3 16
      src/win32_window.c

+ 2 - 1
README.md

@@ -79,7 +79,7 @@ more information.
 
 
 ## System requirements
 ## 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
 Unix-like systems running the X Window System are supported even without
 a desktop environment or modern extensions, although some features require
 a desktop environment or modern extensions, although some features require
 a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.
 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)
    the limit of the mouse button tokens to be reported (#2423)
  - Updated minimum CMake version to 3.16 (#2541)
  - Updated minimum CMake version to 3.16 (#2541)
  - Removed support for building with original MinGW (#2540)
  - 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] Added `QuartzCore` framework as link-time dependency
  - [Cocoa] Removed support for OS X 10.10 Yosemite and earlier (#2506)
  - [Cocoa] Removed support for OS X 10.10 Yosemite and earlier (#2506)
  - [Wayland] Bugfix: The fractional scaling related objects were not destroyed
  - [Wayland] Bugfix: The fractional scaling related objects were not destroyed

+ 6 - 0
docs/news.md

@@ -20,6 +20,12 @@ this.
 
 
 ## Removals {#removals}
 ## 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}
 ### Original MinGW support has been removed {#original_mingw}
 
 
 Support for the now unmaintained original MinGW distribution has been removed.
 Support for the now unmaintained original MinGW distribution has been removed.

+ 5 - 5
src/wgl_context.c

@@ -327,8 +327,8 @@ static void swapBuffersWGL(_GLFWwindow* window)
 {
 {
     if (!window->monitor)
     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;
             BOOL enabled = FALSE;
 
 
@@ -353,9 +353,9 @@ static void swapIntervalWGL(int interval)
 
 
     if (!window->monitor)
     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;
             BOOL enabled = FALSE;
 
 

+ 1 - 5
src/win32_init.c

@@ -89,10 +89,6 @@ static GLFWbool loadLibraries(void)
         return GLFW_FALSE;
         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)
     _glfw.win32.user32.EnableNonClientDpiScaling_ = (PFN_EnableNonClientDpiScaling)
         _glfwPlatformGetModuleSymbol(_glfw.win32.user32.instance, "EnableNonClientDpiScaling");
         _glfwPlatformGetModuleSymbol(_glfw.win32.user32.instance, "EnableNonClientDpiScaling");
     _glfw.win32.user32.SetProcessDpiAwarenessContext_ = (PFN_SetProcessDpiAwarenessContext)
     _glfw.win32.user32.SetProcessDpiAwarenessContext_ = (PFN_SetProcessDpiAwarenessContext)
@@ -692,7 +688,7 @@ int _glfwInitWin32(void)
         SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
         SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
     else if (IsWindows8Point1OrGreater())
     else if (IsWindows8Point1OrGreater())
         SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
         SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
-    else if (IsWindowsVistaOrGreater())
+    else
         SetProcessDPIAware();
         SetProcessDPIAware();
 
 
     if (!createHelperWindow())
     if (!createHelperWindow())

+ 6 - 51
src/win32_platform.h

@@ -48,14 +48,14 @@
  #define UNICODE
  #define UNICODE
 #endif
 #endif
 
 
-// GLFW requires Windows XP or later
-#if WINVER < 0x0501
+// GLFW requires Windows 7 or later
+#if WINVER < 0x0601
  #undef WINVER
  #undef WINVER
- #define WINVER 0x0501
+ #define WINVER 0x0601
 #endif
 #endif
-#if _WIN32_WINNT < 0x0501
+#if _WIN32_WINNT < 0x0601
  #undef _WIN32_WINNT
  #undef _WIN32_WINNT
- #define _WIN32_WINNT 0x0501
+ #define _WIN32_WINNT 0x0601
 #endif
 #endif
 
 
 // GLFW uses DirectInput8 interfaces
 // GLFW uses DirectInput8 interfaces
@@ -66,20 +66,12 @@
 
 
 #include <wctype.h>
 #include <wctype.h>
 #include <windows.h>
 #include <windows.h>
+#include <dwmapi.h>
 #include <dinput.h>
 #include <dinput.h>
 #include <xinput.h>
 #include <xinput.h>
 #include <dbt.h>
 #include <dbt.h>
 
 
 // HACK: Define macros that some windows.h variants don't
 // 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
 #ifndef WM_COPYGLOBALDATA
  #define WM_COPYGLOBALDATA 0x0049
  #define WM_COPYGLOBALDATA 0x0049
 #endif
 #endif
@@ -102,31 +94,6 @@
  #define USER_DEFAULT_SCREEN_DPI 96
  #define USER_DEFAULT_SCREEN_DPI 96
 #endif
 #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 <dwmapi.h>
-#endif /*Windows Vista*/
-
 #ifndef DPI_ENUMS_DECLARED
 #ifndef DPI_ENUMS_DECLARED
 typedef enum
 typedef enum
 {
 {
@@ -150,12 +117,6 @@ typedef enum
 // Replacement for versionhelpers.h macros, as we cannot rely on the
 // Replacement for versionhelpers.h macros, as we cannot rely on the
 // application having a correct embedded manifest
 // 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()                                         \
 #define IsWindows8OrGreater()                                         \
     _glfwIsWindowsVersionOrGreaterWin32(HIBYTE(_WIN32_WINNT_WIN8),    \
     _glfwIsWindowsVersionOrGreaterWin32(HIBYTE(_WIN32_WINNT_WIN8),    \
                                         LOBYTE(_WIN32_WINNT_WIN8), 0)
                                         LOBYTE(_WIN32_WINNT_WIN8), 0)
@@ -266,15 +227,11 @@ typedef HRESULT (WINAPI * PFN_DirectInput8Create)(HINSTANCE,DWORD,REFIID,LPVOID*
 #define DirectInput8Create _glfw.win32.dinput8.Create
 #define DirectInput8Create _glfw.win32.dinput8.Create
 
 
 // user32.dll function pointer typedefs
 // 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_EnableNonClientDpiScaling)(HWND);
 typedef BOOL (WINAPI * PFN_SetProcessDpiAwarenessContext)(HANDLE);
 typedef BOOL (WINAPI * PFN_SetProcessDpiAwarenessContext)(HANDLE);
 typedef UINT (WINAPI * PFN_GetDpiForWindow)(HWND);
 typedef UINT (WINAPI * PFN_GetDpiForWindow)(HWND);
 typedef BOOL (WINAPI * PFN_AdjustWindowRectExForDpi)(LPRECT,DWORD,BOOL,DWORD,UINT);
 typedef BOOL (WINAPI * PFN_AdjustWindowRectExForDpi)(LPRECT,DWORD,BOOL,DWORD,UINT);
 typedef int (WINAPI * PFN_GetSystemMetricsForDpi)(int,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 EnableNonClientDpiScaling _glfw.win32.user32.EnableNonClientDpiScaling_
 #define SetProcessDpiAwarenessContext _glfw.win32.user32.SetProcessDpiAwarenessContext_
 #define SetProcessDpiAwarenessContext _glfw.win32.user32.SetProcessDpiAwarenessContext_
 #define GetDpiForWindow _glfw.win32.user32.GetDpiForWindow_
 #define GetDpiForWindow _glfw.win32.user32.GetDpiForWindow_
@@ -460,8 +417,6 @@ typedef struct _GLFWlibraryWin32
 
 
     struct {
     struct {
         HINSTANCE                       instance;
         HINSTANCE                       instance;
-        PFN_SetProcessDPIAware          SetProcessDPIAware_;
-        PFN_ChangeWindowMessageFilterEx ChangeWindowMessageFilterEx_;
         PFN_EnableNonClientDpiScaling   EnableNonClientDpiScaling_;
         PFN_EnableNonClientDpiScaling   EnableNonClientDpiScaling_;
         PFN_SetProcessDpiAwarenessContext SetProcessDpiAwarenessContext_;
         PFN_SetProcessDpiAwarenessContext SetProcessDpiAwarenessContext_;
         PFN_GetDpiForWindow             GetDpiForWindow_;
         PFN_GetDpiForWindow             GetDpiForWindow_;

+ 3 - 16
src/win32_window.c

@@ -374,9 +374,6 @@ static void updateFramebufferTransparency(const _GLFWwindow* window)
     BOOL composition, opaque;
     BOOL composition, opaque;
     DWORD color;
     DWORD color;
 
 
-    if (!IsWindowsVistaOrGreater())
-        return;
-
     if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition)
     if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition)
        return;
        return;
 
 
@@ -983,7 +980,6 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l
 
 
         case WM_MOUSEHWHEEL:
         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
             // NOTE: The X-axis is inverted for consistency with macOS and X11
             _glfwInputScroll(window, -((SHORT) HIWORD(wParam) / (double) WHEEL_DELTA), 0.0);
             _glfwInputScroll(window, -((SHORT) HIWORD(wParam) / (double) WHEEL_DELTA), 0.0);
             return 0;
             return 0;
@@ -1407,15 +1403,9 @@ static int createNativeWindow(_GLFWwindow* window,
 
 
     SetPropW(window->win32.handle, L"GLFW", 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.scaleToMonitor = wndconfig->scaleToMonitor;
     window->win32.keymenu = wndconfig->win32.keymenu;
     window->win32.keymenu = wndconfig->win32.keymenu;
@@ -1981,9 +1971,6 @@ GLFWbool _glfwFramebufferTransparentWin32(_GLFWwindow* window)
     if (!window->win32.transparent)
     if (!window->win32.transparent)
         return GLFW_FALSE;
         return GLFW_FALSE;
 
 
-    if (!IsWindowsVistaOrGreater())
-        return GLFW_FALSE;
-
     if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition)
     if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition)
         return GLFW_FALSE;
         return GLFW_FALSE;