From 1e612d998703fcb85a65659183b7c2264f655e0a Mon Sep 17 00:00:00 2001 From: Beingpax Date: Fri, 28 Nov 2025 13:03:30 +0545 Subject: [PATCH] Support org.nspasteboard conventions for transient clipboard handlin --- .../xcshareddata/swiftpm/Package.resolved | 2 +- VoiceInk/ClipboardManager.swift | 22 +++++++++++++++---- VoiceInk/CursorPaster.swift | 7 +----- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/VoiceInk.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/VoiceInk.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 6f8eaa8..06849e9 100644 --- a/VoiceInk.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/VoiceInk.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "fa43afba90620dda26dfd9413de335295c333eb4c910af45f313d00c2a7decb3", + "originHash" : "144ae35ef0b62c92588dc767eb6b2d443797062688bf1347662bed55d75a7ec2", "pins" : [ { "identity" : "axswift", diff --git a/VoiceInk/ClipboardManager.swift b/VoiceInk/ClipboardManager.swift index bc0aaa5..6eb43b3 100644 --- a/VoiceInk/ClipboardManager.swift +++ b/VoiceInk/ClipboardManager.swift @@ -6,13 +6,27 @@ struct ClipboardManager { case copyFailed case accessDenied } - - static func copyToClipboard(_ text: String) -> Bool { + + static func setClipboard(_ text: String, transient: Bool = false) -> Bool { let pasteboard = NSPasteboard.general pasteboard.clearContents() - return pasteboard.setString(text, forType: .string) + pasteboard.setString(text, forType: .string) + + if let bundleIdentifier = Bundle.main.bundleIdentifier { + pasteboard.setString(bundleIdentifier, forType: NSPasteboard.PasteboardType("org.nspasteboard.source")) + } + + if transient { + pasteboard.setData(Data(), forType: NSPasteboard.PasteboardType("org.nspasteboard.TransientType")) + } + + return true } - + + static func copyToClipboard(_ text: String) -> Bool { + return setClipboard(text, transient: false) + } + static func getClipboardContent() -> String? { return NSPasteboard.general.string(forType: .string) } diff --git a/VoiceInk/CursorPaster.swift b/VoiceInk/CursorPaster.swift index 9baaf68..489e4b5 100644 --- a/VoiceInk/CursorPaster.swift +++ b/VoiceInk/CursorPaster.swift @@ -22,12 +22,7 @@ class CursorPaster { } } - pasteboard.clearContents() - pasteboard.setString(text, forType: .string) - - if !preserveTranscript { - pasteboard.setData(Data(), forType: NSPasteboard.PasteboardType("org.nspasteboard.TransientType")) - } + ClipboardManager.setClipboard(text, transient: !preserveTranscript) DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { if UserDefaults.standard.bool(forKey: "UseAppleScriptPaste") {