From df24d8e1a687d4feee7f3c33967e18de72869857 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 20 Sep 2024 09:56:07 -0700 Subject: [PATCH] macos: show clickable mouse pointer when hovering over secure input This only works on macOS 15 because it uses the new `pointerStyle` API. I don't have the interest to backport this to older macOS versions but I'm happy to accept a PR if someone else wants to do it. --- .../Secure Input/SecureInputOverlay.swift | 1 + macos/Sources/Helpers/Backport.swift | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/macos/Sources/Features/Secure Input/SecureInputOverlay.swift b/macos/Sources/Features/Secure Input/SecureInputOverlay.swift index 717eeb90c..96f309de5 100644 --- a/macos/Sources/Features/Secure Input/SecureInputOverlay.swift +++ b/macos/Sources/Features/Secure Input/SecureInputOverlay.swift @@ -39,6 +39,7 @@ struct SecureInputOverlay: View { .onTapGesture { isPopover = true } + .backport.pointerStyle(.link) .padding(.top, 10) .padding(.trailing, 10) .popover(isPresented: $isPopover, arrowEdge: .bottom) { diff --git a/macos/Sources/Helpers/Backport.swift b/macos/Sources/Helpers/Backport.swift index 1af5e6fe1..000251e49 100644 --- a/macos/Sources/Helpers/Backport.swift +++ b/macos/Sources/Helpers/Backport.swift @@ -23,3 +23,28 @@ extension Backport where Content: Scene { } } } + +extension Backport where Content: View { + func pointerStyle(_ style: BackportPointerStyle) -> some View { + if #available(macOS 15, *) { + return content.pointerStyle(style.official) + } else { + return content + } + } + + enum BackportPointerStyle { + case grabIdle + case grabActive + case link + + @available(macOS 15, *) + var official: PointerStyle { + switch self { + case .grabIdle: return .grabIdle + case .grabActive: return .grabActive + case .link: return .link + } + } + } +}