From 22518b26c953a530fdfbd28e2103ec0ae2c73cd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 11 Jun 2024 17:20:14 +0200 Subject: [PATCH] macOS: Adopt new NSCursor API for window frame resize cursors Fixes: QTBUG-126240 Change-Id: I25799d5fa38cebae756a393e3d8f27e422567adb Reviewed-by: Volker Hilsheimer (cherry picked from commit 4aeb27fbacfade7106b19c460deb5414143a5e53) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/cocoa/qcocoacursor.mm | 46 ++++++++++++++------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoacursor.mm b/src/plugins/platforms/cocoa/qcocoacursor.mm index aaa35a91ef4..99759424f9c 100644 --- a/src/plugins/platforms/cocoa/qcocoacursor.mm +++ b/src/plugins/platforms/cocoa/qcocoacursor.mm @@ -134,24 +134,42 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor) case Qt::DragLinkCursor: cocoaCursor = [NSCursor dragLinkCursor]; break; -#if !defined(QT_APPLE_NO_PRIVATE_APIS) case Qt::SizeVerCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeNorthSouthCursor)]) - cocoaCursor = [NSCursor _windowResizeNorthSouthCursor]; - break; case Qt::SizeHorCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeEastWestCursor)]) - cocoaCursor = [NSCursor _windowResizeEastWestCursor]; - break; case Qt::SizeBDiagCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeNorthEastSouthWestCursor)]) - cocoaCursor = [NSCursor _windowResizeNorthEastSouthWestCursor]; - break; - case Qt::SizeFDiagCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeNorthWestSouthEastCursor)]) - cocoaCursor = [NSCursor _windowResizeNorthWestSouthEastCursor]; - break; + case Qt::SizeFDiagCursor: { +#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(150000) + if (@available(macOS 15, *)) { + auto position = [newShape]{ + switch (newShape) { + case Qt::SizeVerCursor: return NSCursorFrameResizePositionTop; + case Qt::SizeHorCursor: return NSCursorFrameResizePositionLeft; + case Qt::SizeBDiagCursor: return NSCursorFrameResizePositionTopRight; + case Qt::SizeFDiagCursor: return NSCursorFrameResizePositionTopLeft; + default: Q_UNREACHABLE(); + } + }(); + cocoaCursor = [NSCursor frameResizeCursorFromPosition:position + inDirections:NSCursorFrameResizeDirectionsAll]; + break; + } +#endif // macOS 15 SDK +#if !defined(QT_APPLE_NO_PRIVATE_APIS) + auto selector = [newShape]{ + switch (newShape) { + case Qt::SizeVerCursor: return @selector(_windowResizeNorthSouthCursor); + case Qt::SizeHorCursor: return @selector(_windowResizeEastWestCursor); + case Qt::SizeBDiagCursor: return @selector(_windowResizeNorthEastSouthWestCursor); + case Qt::SizeFDiagCursor: return @selector(_windowResizeNorthWestSouthEastCursor); + default: Q_UNREACHABLE(); + } + }(); + + if ([NSCursor respondsToSelector:selector]) + cocoaCursor = [NSCursor performSelector:selector]; #endif // QT_APPLE_NO_PRIVATE_APIS + break; + } default: break; }