From 2fdbae22cb2f75643447c34d2dab7f15305e3567 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 26 Apr 2021 18:43:28 -0400 Subject: [PATCH 1/3] cocoa: Remove mouse event tap. It doesn't appear to work anymore, and was disabled by default anyhow, since the needed APIs are forbidden on the Mac App Store. A better solution to lock the mouse to the window on macOS would still be welcome. CGAssociateMouseAndMouseCursorPosition() works fine for relative mouse mode, this was just a question of SDL_SetWindowGrab(). As it stands now, a grabbed mouse can briefly break out of the window, causing varying degrees of chaos. --- Xcode/SDL/SDL.xcodeproj/project.pbxproj | 40 ---- src/video/cocoa/SDL_cocoamouse.h | 1 - src/video/cocoa/SDL_cocoamouse.m | 5 - src/video/cocoa/SDL_cocoamousetap.h | 34 --- src/video/cocoa/SDL_cocoamousetap.m | 286 ------------------------ src/video/cocoa/SDL_cocoawindow.m | 12 - 6 files changed, 378 deletions(-) delete mode 100644 src/video/cocoa/SDL_cocoamousetap.h delete mode 100644 src/video/cocoa/SDL_cocoamousetap.m diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj index 694bfbd5c..47a36e183 100644 --- a/Xcode/SDL/SDL.xcodeproj/project.pbxproj +++ b/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -238,7 +238,6 @@ A75FCD8D23E25AB700529352 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; }; A75FCD8E23E25AB700529352 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; }; A75FCD8F23E25AB700529352 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; }; - A75FCD9023E25AB700529352 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; A75FCD9123E25AB700529352 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; }; A75FCD9223E25AB700529352 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; }; A75FCD9323E25AB700529352 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; }; @@ -347,7 +346,6 @@ A75FCDFE23E25AB700529352 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; }; A75FCDFF23E25AB700529352 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; }; A75FCE0023E25AB700529352 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; }; - A75FCE0123E25AB700529352 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; A75FCE0223E25AB700529352 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; }; A75FCE0323E25AB700529352 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; }; A75FCE0423E25AB700529352 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; }; @@ -656,7 +654,6 @@ A75FCF4623E25AC700529352 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; }; A75FCF4723E25AC700529352 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; }; A75FCF4823E25AC700529352 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; }; - A75FCF4923E25AC700529352 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; A75FCF4A23E25AC700529352 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; }; A75FCF4B23E25AC700529352 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; }; A75FCF4C23E25AC700529352 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; }; @@ -765,7 +762,6 @@ A75FCFB723E25AC700529352 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; }; A75FCFB823E25AC700529352 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; }; A75FCFB923E25AC700529352 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; }; - A75FCFBA23E25AC700529352 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; A75FCFBB23E25AC700529352 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; }; A75FCFBC23E25AC700529352 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; }; A75FCFBD23E25AC700529352 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; }; @@ -1111,7 +1107,6 @@ A769B11223E259AE00872273 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; }; A769B11323E259AE00872273 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; }; A769B11523E259AE00872273 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; }; - A769B11723E259AE00872273 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; A769B11823E259AE00872273 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; }; A769B11A23E259AE00872273 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; }; A769B11B23E259AE00872273 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; }; @@ -1196,7 +1191,6 @@ A769B18723E259AE00872273 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; }; A769B18823E259AE00872273 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; }; A769B18923E259AE00872273 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; }; - A769B18A23E259AE00872273 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; A769B18B23E259AE00872273 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; }; A769B18C23E259AE00872273 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; }; A769B18D23E259AE00872273 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; }; @@ -2062,12 +2056,6 @@ A7D8AEBB23E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; }; A7D8AEBC23E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; }; A7D8AEBD23E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; }; - A7D8AEBE23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; - A7D8AEBF23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; - A7D8AEC023E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; - A7D8AEC123E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; - A7D8AEC223E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; - A7D8AEC323E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; }; A7D8AEC423E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; }; A7D8AEC523E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; }; A7D8AEC623E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; }; @@ -2152,12 +2140,6 @@ A7D8AF1523E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; }; A7D8AF1623E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; }; A7D8AF1723E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; }; - A7D8AF1823E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; - A7D8AF1923E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; - A7D8AF1A23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; - A7D8AF1B23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; - A7D8AF1C23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; - A7D8AF1D23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; }; A7D8AF1E23E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; }; A7D8AF1F23E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; }; A7D8AF2023E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; }; @@ -4051,7 +4033,6 @@ A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoavideo.m; sourceTree = ""; }; A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoametalview.h; sourceTree = ""; }; A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamouse.m; sourceTree = ""; }; - A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamousetap.h; sourceTree = ""; }; A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaevents.m; sourceTree = ""; }; A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaclipboard.h; sourceTree = ""; }; A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamessagebox.m; sourceTree = ""; }; @@ -4066,7 +4047,6 @@ A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamessagebox.h; sourceTree = ""; }; A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaclipboard.m; sourceTree = ""; }; A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaevents.h; sourceTree = ""; }; - A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamousetap.m; sourceTree = ""; }; A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamouse.h; sourceTree = ""; }; A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoametalview.m; sourceTree = ""; }; A7D8A6B623E2513E00DCD162 /* SDL_egl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_egl.c; sourceTree = ""; }; @@ -5082,8 +5062,6 @@ A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */, A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */, A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */, - A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */, - A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */, A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */, A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */, A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */, @@ -5828,7 +5806,6 @@ A75FCD8D23E25AB700529352 /* gl2platform.h in Headers */, A75FCD8E23E25AB700529352 /* SDL_pixels.h in Headers */, A75FCD8F23E25AB700529352 /* vk_layer.h in Headers */, - A75FCD9023E25AB700529352 /* SDL_cocoamousetap.h in Headers */, A75FCD9123E25AB700529352 /* vk_platform.h in Headers */, A75FCD9223E25AB700529352 /* SDL_cocoametalview.h in Headers */, A75FCD9323E25AB700529352 /* SDL_cocoaopengles.h in Headers */, @@ -6071,7 +6048,6 @@ A75FCF4623E25AC700529352 /* gl2platform.h in Headers */, A75FCF4723E25AC700529352 /* SDL_pixels.h in Headers */, A75FCF4823E25AC700529352 /* vk_layer.h in Headers */, - A75FCF4923E25AC700529352 /* SDL_cocoamousetap.h in Headers */, A75FCF4A23E25AC700529352 /* vk_platform.h in Headers */, A75FCF4B23E25AC700529352 /* SDL_cocoametalview.h in Headers */, A75FCF4C23E25AC700529352 /* SDL_cocoaopengles.h in Headers */, @@ -6303,7 +6279,6 @@ A769B11223E259AE00872273 /* SDL_cocoavulkan.h in Headers */, A769B11323E259AE00872273 /* gl2platform.h in Headers */, A769B11523E259AE00872273 /* vk_layer.h in Headers */, - A769B11723E259AE00872273 /* SDL_cocoamousetap.h in Headers */, A769B11823E259AE00872273 /* vk_platform.h in Headers */, A769B11A23E259AE00872273 /* SDL_cocoametalview.h in Headers */, A769B11B23E259AE00872273 /* SDL_cocoaopengles.h in Headers */, @@ -6399,7 +6374,6 @@ A7D8AEB323E2514100DCD162 /* SDL_cocoametalview.h in Headers */, A7D8AEF523E2514100DCD162 /* SDL_cocoamodes.h in Headers */, A7D8AF1F23E2514100DCD162 /* SDL_cocoamouse.h in Headers */, - A7D8AEBF23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */, A7D8AEDD23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */, A7D8AEEF23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */, A7D8AE8323E2514100DCD162 /* SDL_cocoashape.h in Headers */, @@ -6647,7 +6621,6 @@ A7D8AEB423E2514100DCD162 /* SDL_cocoametalview.h in Headers */, A7D8AEF623E2514100DCD162 /* SDL_cocoamodes.h in Headers */, A7D8AF2023E2514100DCD162 /* SDL_cocoamouse.h in Headers */, - A7D8AEC023E2514100DCD162 /* SDL_cocoamousetap.h in Headers */, A7D8AEDE23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */, A7D8AEF023E2514100DCD162 /* SDL_cocoaopengles.h in Headers */, A7D8AE8423E2514100DCD162 /* SDL_cocoashape.h in Headers */, @@ -6983,7 +6956,6 @@ A7D8AEEC23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */, A7D8B23423E2514200DCD162 /* gl2platform.h in Headers */, A7D8B25223E2514200DCD162 /* vk_layer.h in Headers */, - A7D8AEC223E2514100DCD162 /* SDL_cocoamousetap.h in Headers */, A7D8B26A23E2514200DCD162 /* vk_platform.h in Headers */, A7D8AEB623E2514100DCD162 /* SDL_cocoametalview.h in Headers */, A7D8AEF223E2514100DCD162 /* SDL_cocoaopengles.h in Headers */, @@ -7079,7 +7051,6 @@ A7D8AEB223E2514100DCD162 /* SDL_cocoametalview.h in Headers */, A7D8AEF423E2514100DCD162 /* SDL_cocoamodes.h in Headers */, A7D8AF1E23E2514100DCD162 /* SDL_cocoamouse.h in Headers */, - A7D8AEBE23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */, A7D8AEDC23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */, A7D8AEEE23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */, A7D8AE8223E2514100DCD162 /* SDL_cocoashape.h in Headers */, @@ -7410,7 +7381,6 @@ A7D8AEEB23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */, A7D8B23323E2514200DCD162 /* gl2platform.h in Headers */, A7D8B25123E2514200DCD162 /* vk_layer.h in Headers */, - A7D8AEC123E2514100DCD162 /* SDL_cocoamousetap.h in Headers */, A7D8B26923E2514200DCD162 /* vk_platform.h in Headers */, A7D8BBF323E2574800DCD162 /* SDL_uikitmessagebox.h in Headers */, A7D8AEB523E2514100DCD162 /* SDL_cocoametalview.h in Headers */, @@ -7632,7 +7602,6 @@ A7D8B23523E2514200DCD162 /* gl2platform.h in Headers */, DB313FE517554B71006C0E22 /* SDL_pixels.h in Headers */, A7D8B25323E2514200DCD162 /* vk_layer.h in Headers */, - A7D8AEC323E2514100DCD162 /* SDL_cocoamousetap.h in Headers */, A7D8B26B23E2514200DCD162 /* vk_platform.h in Headers */, A7D8AEB723E2514100DCD162 /* SDL_cocoametalview.h in Headers */, A7D8AEF323E2514100DCD162 /* SDL_cocoaopengles.h in Headers */, @@ -8181,7 +8150,6 @@ A75FCDFE23E25AB700529352 /* SDL_hidapi_xbox360w.c in Sources */, A75FCDFF23E25AB700529352 /* SDL_atomic.c in Sources */, A75FCE0023E25AB700529352 /* SDL_displayevents.c in Sources */, - A75FCE0123E25AB700529352 /* SDL_cocoamousetap.m in Sources */, A75FCE0223E25AB700529352 /* SDL_log.c in Sources */, A75FCE0323E25AB700529352 /* SDL_cocoaopengl.m in Sources */, A75FCE0423E25AB700529352 /* SDL_offscreenframebuffer.c in Sources */, @@ -8383,7 +8351,6 @@ A75FCFB723E25AC700529352 /* SDL_hidapi_xbox360w.c in Sources */, A75FCFB823E25AC700529352 /* SDL_atomic.c in Sources */, A75FCFB923E25AC700529352 /* SDL_displayevents.c in Sources */, - A75FCFBA23E25AC700529352 /* SDL_cocoamousetap.m in Sources */, A75FCFBB23E25AC700529352 /* SDL_log.c in Sources */, A75FCFBC23E25AC700529352 /* SDL_cocoaopengl.m in Sources */, A75FCFBD23E25AC700529352 /* SDL_offscreenframebuffer.c in Sources */, @@ -8606,7 +8573,6 @@ A769B18723E259AE00872273 /* SDL_hidapi_xbox360w.c in Sources */, A769B18823E259AE00872273 /* SDL_atomic.c in Sources */, A769B18923E259AE00872273 /* SDL_displayevents.c in Sources */, - A769B18A23E259AE00872273 /* SDL_cocoamousetap.m in Sources */, A769B18B23E259AE00872273 /* SDL_log.c in Sources */, A769B18C23E259AE00872273 /* SDL_cocoaopengl.m in Sources */, A769B18D23E259AE00872273 /* SDL_offscreenframebuffer.c in Sources */, @@ -8810,7 +8776,6 @@ A7D8B55E23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */, A7D8A95823E2514000DCD162 /* SDL_atomic.c in Sources */, A7D8BB2823E2514500DCD162 /* SDL_displayevents.c in Sources */, - A7D8AF1923E2514100DCD162 /* SDL_cocoamousetap.m in Sources */, A7D8AB2623E2514100DCD162 /* SDL_log.c in Sources */, A7D8AE8923E2514100DCD162 /* SDL_cocoaopengl.m in Sources */, A7D8AB7423E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */, @@ -9012,7 +8977,6 @@ A7D8B55F23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */, A7D8A95923E2514000DCD162 /* SDL_atomic.c in Sources */, A7D8BB2923E2514500DCD162 /* SDL_displayevents.c in Sources */, - A7D8AF1A23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */, A7D8AB2723E2514100DCD162 /* SDL_log.c in Sources */, A7D8AE8A23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */, A7D8AB7523E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */, @@ -9213,7 +9177,6 @@ A7D8B56123E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */, A7D8A95B23E2514000DCD162 /* SDL_atomic.c in Sources */, A7D8BB2B23E2514500DCD162 /* SDL_displayevents.c in Sources */, - A7D8AF1C23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */, A7D8AB2923E2514100DCD162 /* SDL_log.c in Sources */, A7D8AE8C23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */, A7D8AB7723E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */, @@ -9419,7 +9382,6 @@ A7D8A95723E2514000DCD162 /* SDL_atomic.c in Sources */, A75FDBCE23EA380300529352 /* SDL_hidapi_rumble.c in Sources */, A7D8BB2723E2514500DCD162 /* SDL_displayevents.c in Sources */, - A7D8AF1823E2514100DCD162 /* SDL_cocoamousetap.m in Sources */, A7D8AB2523E2514100DCD162 /* SDL_log.c in Sources */, A7D8AE8823E2514100DCD162 /* SDL_cocoaopengl.m in Sources */, A7D8AB7323E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */, @@ -9621,7 +9583,6 @@ A75FDBD123EA380300529352 /* SDL_hidapi_rumble.c in Sources */, A7D8BB2A23E2514500DCD162 /* SDL_displayevents.c in Sources */, A7D8BBFC23E2574800DCD162 /* SDL_uikitopenglview.m in Sources */, - A7D8AF1B23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */, A7D8AB2823E2514100DCD162 /* SDL_log.c in Sources */, A7D8BC0223E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */, A7D8AE8B23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */, @@ -9822,7 +9783,6 @@ A7D8A95C23E2514000DCD162 /* SDL_atomic.c in Sources */, A75FDBD423EA380300529352 /* SDL_hidapi_rumble.c in Sources */, A7D8BB2C23E2514500DCD162 /* SDL_displayevents.c in Sources */, - A7D8AF1D23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */, A7D8AB2A23E2514100DCD162 /* SDL_log.c in Sources */, A7D8AE8D23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */, A7D8AB7823E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */, diff --git a/src/video/cocoa/SDL_cocoamouse.h b/src/video/cocoa/SDL_cocoamouse.h index 8bd6acaff..7d8190423 100644 --- a/src/video/cocoa/SDL_cocoamouse.h +++ b/src/video/cocoa/SDL_cocoamouse.h @@ -40,7 +40,6 @@ typedef struct { /* What location we last saw the cursor move to. */ CGFloat lastMoveX; CGFloat lastMoveY; - void *tapdata; } SDL_MouseData; @interface NSCursor (InvisibleCursor) diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index 2166aa4cc..b6942af08 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -24,7 +24,6 @@ #include "SDL_events.h" #include "SDL_cocoamouse.h" -#include "SDL_cocoamousetap.h" #include "SDL_cocoavideo.h" #include "../../events/SDL_mouse_c.h" @@ -348,8 +347,6 @@ Cocoa_InitMouse(_THIS) SDL_SetDefaultCursor(Cocoa_CreateDefaultCursor()); - Cocoa_InitMouseEventTap(driverdata); - const NSPoint location = [NSEvent mouseLocation]; driverdata->lastMoveX = location.x; driverdata->lastMoveY = location.y; @@ -467,8 +464,6 @@ Cocoa_QuitMouse(_THIS) SDL_Mouse *mouse = SDL_GetMouse(); if (mouse) { if (mouse->driverdata) { - Cocoa_QuitMouseEventTap(((SDL_MouseData*)mouse->driverdata)); - SDL_free(mouse->driverdata); mouse->driverdata = NULL; } diff --git a/src/video/cocoa/SDL_cocoamousetap.h b/src/video/cocoa/SDL_cocoamousetap.h deleted file mode 100644 index 132775186..000000000 --- a/src/video/cocoa/SDL_cocoamousetap.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2021 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifndef SDL_cocoamousetap_h_ -#define SDL_cocoamousetap_h_ - -#include "SDL_cocoamouse.h" - -extern void Cocoa_InitMouseEventTap(SDL_MouseData *driverdata); -extern void Cocoa_EnableMouseEventTap(SDL_MouseData *driverdata, SDL_bool enabled); -extern void Cocoa_QuitMouseEventTap(SDL_MouseData *driverdata); - -#endif /* SDL_cocoamousetap_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/cocoa/SDL_cocoamousetap.m b/src/video/cocoa/SDL_cocoamousetap.m deleted file mode 100644 index f1ed18a23..000000000 --- a/src/video/cocoa/SDL_cocoamousetap.m +++ /dev/null @@ -1,286 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2021 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_VIDEO_DRIVER_COCOA - -#include "SDL_cocoamousetap.h" - -/* Event taps are forbidden in the Mac App Store, so we can only enable this - * code if your app doesn't need to ship through the app store. - * This code makes it so that a grabbed cursor cannot "leak" a mouse click - * past the edge of the window if moving the cursor too fast. - */ -#if SDL_MAC_NO_SANDBOX - -#include "SDL_keyboard.h" -#include "SDL_cocoavideo.h" -#include "../../thread/SDL_systhread.h" - -#include "../../events/SDL_mouse_c.h" - -typedef struct { - CFMachPortRef tap; - CFRunLoopRef runloop; - CFRunLoopSourceRef runloopSource; - SDL_Thread *thread; - SDL_sem *runloopStartedSemaphore; -} SDL_MouseEventTapData; - -static const CGEventMask movementEventsMask = - CGEventMaskBit(kCGEventLeftMouseDragged) - | CGEventMaskBit(kCGEventRightMouseDragged) - | CGEventMaskBit(kCGEventMouseMoved); - -static const CGEventMask allGrabbedEventsMask = - CGEventMaskBit(kCGEventLeftMouseDown) | CGEventMaskBit(kCGEventLeftMouseUp) - | CGEventMaskBit(kCGEventRightMouseDown) | CGEventMaskBit(kCGEventRightMouseUp) - | CGEventMaskBit(kCGEventOtherMouseDown) | CGEventMaskBit(kCGEventOtherMouseUp) - | CGEventMaskBit(kCGEventLeftMouseDragged) | CGEventMaskBit(kCGEventRightMouseDragged) - | CGEventMaskBit(kCGEventMouseMoved); - -static CGEventRef -Cocoa_MouseTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) -{ - SDL_MouseEventTapData *tapdata = (SDL_MouseEventTapData*)refcon; - SDL_Mouse *mouse = SDL_GetMouse(); - SDL_Window *window = SDL_GetKeyboardFocus(); - NSWindow *nswindow; - NSRect windowRect; - CGPoint eventLocation; - - switch (type) { - case kCGEventTapDisabledByTimeout: - { - CGEventTapEnable(tapdata->tap, true); - return NULL; - } - case kCGEventTapDisabledByUserInput: - { - return NULL; - } - default: - break; - } - - - if (!window || !mouse) { - return event; - } - - if (mouse->relative_mode) { - return event; - } - - if (!(window->flags & SDL_WINDOW_MOUSE_GRABBED)) { - return event; - } - - /* This is the same coordinate system as Cocoa uses. */ - nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; - eventLocation = CGEventGetUnflippedLocation(event); - windowRect = [nswindow contentRectForFrameRect:[nswindow frame]]; - - if (!NSMouseInRect(NSPointFromCGPoint(eventLocation), windowRect, NO)) { - - /* This is in CGs global screenspace coordinate system, which has a - * flipped Y. - */ - CGPoint newLocation = CGEventGetLocation(event); - - if (eventLocation.x < NSMinX(windowRect)) { - newLocation.x = NSMinX(windowRect); - } else if (eventLocation.x >= NSMaxX(windowRect)) { - newLocation.x = NSMaxX(windowRect) - 1.0; - } - - if (eventLocation.y <= NSMinY(windowRect)) { - newLocation.y -= (NSMinY(windowRect) - eventLocation.y + 1); - } else if (eventLocation.y > NSMaxY(windowRect)) { - newLocation.y += (eventLocation.y - NSMaxY(windowRect)); - } - - CGWarpMouseCursorPosition(newLocation); - CGAssociateMouseAndMouseCursorPosition(YES); - - if ((CGEventMaskBit(type) & movementEventsMask) == 0) { - /* For click events, we just constrain the event to the window, so - * no other app receives the click event. We can't due the same to - * movement events, since they mean that our warp cursor above - * behaves strangely. - */ - CGEventSetLocation(event, newLocation); - } - } - - return event; -} - -static void -SemaphorePostCallback(CFRunLoopTimerRef timer, void *info) -{ - SDL_SemPost((SDL_sem*)info); -} - -static int -Cocoa_MouseTapThread(void *data) -{ - SDL_MouseEventTapData *tapdata = (SDL_MouseEventTapData*)data; - - /* Tap was created on main thread but we own it now. */ - CFMachPortRef eventTap = tapdata->tap; - if (eventTap) { - /* Try to create a runloop source we can schedule. */ - CFRunLoopSourceRef runloopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); - if (runloopSource) { - tapdata->runloopSource = runloopSource; - } else { - CFRelease(eventTap); - SDL_SemPost(tapdata->runloopStartedSemaphore); - /* TODO: Both here and in the return below, set some state in - * tapdata to indicate that initialization failed, which we should - * check in InitMouseEventTap, after we move the semaphore check - * from Quit to Init. - */ - return 1; - } - } else { - SDL_SemPost(tapdata->runloopStartedSemaphore); - return 1; - } - - tapdata->runloop = CFRunLoopGetCurrent(); - CFRunLoopAddSource(tapdata->runloop, tapdata->runloopSource, kCFRunLoopCommonModes); - CFRunLoopTimerContext context = {.info = tapdata->runloopStartedSemaphore}; - /* We signal the runloop started semaphore *after* the run loop has started, indicating it's safe to CFRunLoopStop it. */ - CFRunLoopTimerRef timer = CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent(), 0, 0, 0, &SemaphorePostCallback, &context); - CFRunLoopAddTimer(tapdata->runloop, timer, kCFRunLoopCommonModes); - CFRelease(timer); - - /* Run the event loop to handle events in the event tap. */ - CFRunLoopRun(); - /* Make sure this is signaled so that SDL_QuitMouseEventTap knows it can safely SDL_WaitThread for us. */ - if (SDL_SemValue(tapdata->runloopStartedSemaphore) < 1) { - SDL_SemPost(tapdata->runloopStartedSemaphore); - } - CFRunLoopRemoveSource(tapdata->runloop, tapdata->runloopSource, kCFRunLoopCommonModes); - - /* Clean up. */ - CGEventTapEnable(tapdata->tap, false); - CFRelease(tapdata->runloopSource); - CFRelease(tapdata->tap); - tapdata->runloopSource = NULL; - tapdata->tap = NULL; - - return 0; -} - -void -Cocoa_InitMouseEventTap(SDL_MouseData* driverdata) -{ - SDL_MouseEventTapData *tapdata; - driverdata->tapdata = SDL_calloc(1, sizeof(SDL_MouseEventTapData)); - tapdata = (SDL_MouseEventTapData*)driverdata->tapdata; - - tapdata->runloopStartedSemaphore = SDL_CreateSemaphore(0); - if (tapdata->runloopStartedSemaphore) { - tapdata->tap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, - kCGEventTapOptionDefault, allGrabbedEventsMask, - &Cocoa_MouseTapCallback, tapdata); - if (tapdata->tap) { - /* Tap starts disabled, until app requests mouse grab */ - CGEventTapEnable(tapdata->tap, false); - tapdata->thread = SDL_CreateThreadInternal(&Cocoa_MouseTapThread, "Event Tap Loop", 512 * 1024, tapdata); - if (tapdata->thread) { - /* Success - early out. Ownership transferred to thread. */ - return; - } - CFRelease(tapdata->tap); - } - SDL_DestroySemaphore(tapdata->runloopStartedSemaphore); - } - SDL_free(driverdata->tapdata); - driverdata->tapdata = NULL; -} - -void -Cocoa_EnableMouseEventTap(SDL_MouseData *driverdata, SDL_bool enabled) -{ - SDL_MouseEventTapData *tapdata = (SDL_MouseEventTapData*)driverdata->tapdata; - if (tapdata && tapdata->tap) - { - CGEventTapEnable(tapdata->tap, !!enabled); - } -} - -void -Cocoa_QuitMouseEventTap(SDL_MouseData *driverdata) -{ - SDL_MouseEventTapData *tapdata = (SDL_MouseEventTapData*)driverdata->tapdata; - int status; - - if (tapdata == NULL) { - /* event tap was already cleaned up (possibly due to CGEventTapCreate - * returning null.) - */ - return; - } - - /* Ensure that the runloop has been started first. - * TODO: Move this to InitMouseEventTap, check for error conditions that can - * happen in Cocoa_MouseTapThread, and fall back to the non-EventTap way of - * grabbing the mouse if it fails to Init. - */ - status = SDL_SemWaitTimeout(tapdata->runloopStartedSemaphore, 5000); - if (status > -1) { - /* Then stop it, which will cause Cocoa_MouseTapThread to return. */ - CFRunLoopStop(tapdata->runloop); - /* And then wait for Cocoa_MouseTapThread to finish cleaning up. It - * releases some of the pointers in tapdata. */ - SDL_WaitThread(tapdata->thread, &status); - } - - SDL_free(driverdata->tapdata); - driverdata->tapdata = NULL; -} - -#else /* SDL_MAC_NO_SANDBOX */ - -void -Cocoa_InitMouseEventTap(SDL_MouseData *unused) -{ -} - -void -Cocoa_EnableMouseEventTap(SDL_MouseData *driverdata, SDL_bool enabled) -{ -} - -void -Cocoa_QuitMouseEventTap(SDL_MouseData *driverdata) -{ -} - -#endif /* !SDL_MAC_NO_SANDBOX */ - -#endif /* SDL_VIDEO_DRIVER_COCOA */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index 49bdfe834..fa19aa67b 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -38,7 +38,6 @@ #include "SDL_cocoavideo.h" #include "SDL_cocoashape.h" #include "SDL_cocoamouse.h" -#include "SDL_cocoamousetap.h" #include "SDL_cocoaopengl.h" #include "SDL_cocoaopengles.h" @@ -1122,13 +1121,7 @@ SetWindowStyle(SDL_Window * window, NSUInteger style) y = window->h - 1; } -#if !SDL_MAC_NO_SANDBOX CGPoint cgpoint; - - /* When SDL_MAC_NO_SANDBOX is set, this is handled by - * SDL_cocoamousetap.m. - */ - cgpoint.x = window->x + x; cgpoint.y = window->y + y; @@ -1136,7 +1129,6 @@ SetWindowStyle(SDL_Window * window, NSUInteger style) CGAssociateMouseAndMouseCursorPosition(YES); Cocoa_HandleMouseWarp(cgpoint.x, cgpoint.y); -#endif } } @@ -1972,12 +1964,8 @@ Cocoa_GetWindowGammaRamp(_THIS, SDL_Window * window, Uint16 * ramp) void Cocoa_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed) { - SDL_Mouse *mouse = SDL_GetMouse(); SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - /* Enable or disable the event tap as necessary */ - Cocoa_EnableMouseEventTap(mouse->driverdata, grabbed); - /* Move the cursor to the nearest point in the window */ if (grabbed && data && ![data->listener isMoving]) { int x, y; From 40210f8945932473e2c6f43eebf87b2f864c0715 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Mon, 26 Apr 2021 15:54:14 -0400 Subject: [PATCH 2/3] winrt: Always use a thread for joystick support --- src/joystick/windows/SDL_windowsjoystick.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/joystick/windows/SDL_windowsjoystick.c b/src/joystick/windows/SDL_windowsjoystick.c index 4d6613eca..c2eebeef3 100644 --- a/src/joystick/windows/SDL_windowsjoystick.c +++ b/src/joystick/windows/SDL_windowsjoystick.c @@ -356,6 +356,15 @@ WINDOWS_JoystickInit(void) WINDOWS_JoystickDetect(); +#ifdef __WINRT__ + /* FIXME: WinRT silently does not support device notifications. + * Revisit this if UWP ever adds support in a future release. + */ + s_bJoystickThread = SDL_TRUE; + if (SDL_StartJoystickThread() < 0) { + return -1; + } +#else s_bJoystickThread = SDL_GetHintBoolean(SDL_HINT_JOYSTICK_THREAD, SDL_FALSE); if (s_bJoystickThread) { if (SDL_StartJoystickThread() < 0) { @@ -366,6 +375,7 @@ WINDOWS_JoystickInit(void) return -1; } } +#endif return 0; } From 8527c583f4b74c282e86fc1cbf85457a41456cd8 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 27 Apr 2021 01:36:23 -0400 Subject: [PATCH 3/3] cocoa: Fix recreated windows that are both borderless and resizable. These would accidentally get a titlebar because the "borderless" style mask is zero but the resizable attribute adds a bit. I assume this happens because you used to need window decoration to resize a window in macOS, but this changed in later releases. This only caused problems when recreating a window (you had an SDL_WINDOW_OPENGL window and tried to create a Metal SDL_Renderer on it, etc). Fixes #4324. --- src/video/cocoa/SDL_cocoawindow.m | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index fa19aa67b..2b5d2de62 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -1405,7 +1405,10 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, NSView *nsview, { unsigned long style = [nswindow styleMask]; - if (style == NSWindowStyleMaskBorderless) { + /* NSWindowStyleMaskBorderless is zero, and it's possible to be + Resizeable _and_ borderless, so we can't do a simple bitwise AND + of NSWindowStyleMaskBorderless here. */ + if ((style & ~NSWindowStyleMaskResizable) == NSWindowStyleMaskBorderless) { window->flags |= SDL_WINDOW_BORDERLESS; } else { window->flags &= ~SDL_WINDOW_BORDERLESS;