From 1bc2515a864e1e039c7381f5bd3df2ee151f43e8 Mon Sep 17 00:00:00 2001 From: Pierre Le Fevre Date: Fri, 12 Jun 2026 16:30:30 +0200 Subject: [PATCH] Support external trackpad --- MCT/API/GestureMonitor.swift | 92 +++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 18 deletions(-) diff --git a/MCT/API/GestureMonitor.swift b/MCT/API/GestureMonitor.swift index 0118c6c..374572c 100644 --- a/MCT/API/GestureMonitor.swift +++ b/MCT/API/GestureMonitor.swift @@ -22,6 +22,8 @@ final class GestureMonitor { // MultitouchSupport state private var mtHandle: UnsafeMutableRawPointer? private var mtDevices: [UnsafeMutableRawPointer] = [] + private var registeredDeviceCount = 0 + private var deviceRefreshTimer: DispatchSourceTimer? // Three-finger swipe tracking private var threeFingerActive = false @@ -57,6 +59,9 @@ final class GestureMonitor { ) -> Void // Resolved function pointers + private var fnCreateList: CreateListFn? + private var fnRegisterCallback: RegisterCallbackFn? + private var fnDeviceStart: DeviceStartFn? private var fnDeviceStop: DeviceStopFn? private var fnUnregisterCallback: UnregisterCallbackFn? @@ -107,45 +112,96 @@ final class GestureMonitor { let stopSym = dlsym(handle, "MTDeviceStop") let unregSym = dlsym(handle, "MTUnregisterContactFrameCallback") - let createList = unsafeBitCast(createListSym, to: CreateListFn.self) - let registerCallback = unsafeBitCast(registerSym, to: RegisterCallbackFn.self) - let deviceStart = unsafeBitCast(startSym, to: DeviceStartFn.self) + fnCreateList = unsafeBitCast(createListSym, to: CreateListFn.self) + fnRegisterCallback = unsafeBitCast(registerSym, to: RegisterCallbackFn.self) + fnDeviceStart = unsafeBitCast(startSym, to: DeviceStartFn.self) if let s = stopSym { fnDeviceStop = unsafeBitCast(s, to: DeviceStopFn.self) } if let s = unregSym { fnUnregisterCallback = unsafeBitCast(s, to: UnregisterCallbackFn.self) } - // takeUnretainedValue — MTDeviceCreateList may not follow the Create Rule - let deviceList = createList().takeUnretainedValue() - log("device list obtained: \(CFArrayGetCount(deviceList)) device(s)") - - let count = CFArrayGetCount(deviceList) - for i in 0..