diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index f2143b41..63d03d54 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7237,6 +7237,7 @@ private enum SidebarTabDragPayload { private enum BonsplitTabDragPayload { static let typeIdentifier = "com.splittabbar.tabtransfer" + private static let currentProcessId = Int32(ProcessInfo.processInfo.processIdentifier) struct Transfer: Decodable { struct TabInfo: Decodable { @@ -7245,6 +7246,25 @@ private enum BonsplitTabDragPayload { let tab: TabInfo let sourcePaneId: UUID + let sourceProcessId: Int32 + + private enum CodingKeys: String, CodingKey { + case tab + case sourcePaneId + case sourceProcessId + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + self.tab = try container.decode(TabInfo.self, forKey: .tab) + self.sourcePaneId = try container.decode(UUID.self, forKey: .sourcePaneId) + // Legacy payloads won't include this field. Treat as foreign process. + self.sourceProcessId = try container.decodeIfPresent(Int32.self, forKey: .sourceProcessId) ?? -1 + } + } + + private static func isCurrentProcessTransfer(_ transfer: Transfer) -> Bool { + transfer.sourceProcessId == currentProcessId } static func currentTransfer() -> Transfer? { @@ -7252,13 +7272,15 @@ private enum BonsplitTabDragPayload { let type = NSPasteboard.PasteboardType(typeIdentifier) if let data = pasteboard.data(forType: type), - let transfer = try? JSONDecoder().decode(Transfer.self, from: data) { + let transfer = try? JSONDecoder().decode(Transfer.self, from: data), + isCurrentProcessTransfer(transfer) { return transfer } if let raw = pasteboard.string(forType: type), let data = raw.data(using: .utf8), - let transfer = try? JSONDecoder().decode(Transfer.self, from: data) { + let transfer = try? JSONDecoder().decode(Transfer.self, from: data), + isCurrentProcessTransfer(transfer) { return transfer }