Block tab drags across cmux app instances

This commit is contained in:
Lawrence Chen 2026-02-23 18:33:19 -08:00
parent 58376c3fbc
commit 5c584dd7f7

View file

@ -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
}