Repository navigation
Trackpad fix v2 — UX polish, latency reductions, local cursor (4ad1d42)
·
59 commits
to fix/trackpad-input
since this release
Build of branch fix/trackpad-input @ 4ad1d42 — все P0/P1/P2/P3 правки из глубокого аудита + локальный курсор оверлей.
🟢 Качай по тому же принципу как в trackpad-fix.1
Если ты на Scarlet / eSign
⬇️ OpenParsec-unsigned.ipa — оригинальный bundle id com.aigch.OpenParsec, без подписи. Scarlet/eSign re-sign'ят сами.
⬇️ Или OpenParsec-trackpadfix-unsigned.ipa — уникальный bundle id com.2extndd.openparsec.trackpadfix, тоже без подписи. Ставится рядом с оригинальным nightly OpenParsec как отдельное приложение.
Если ты на AltStore / SideStore
⬇️ OpenParsec-trackpadfix.ipa — уникальный bundle id + macOS ad-hoc подпись.
Что нового по сравнению с trackpad-fix.1
Критичные багфиксы (мог бы сломать твой стрим)
- Audio + cursor не отваливаются после смены разрешения — был race condition с
backgroundTaskRunningпосле reconnect - Гейтинг всех send'ов на статус — во время 100ms gap при смене разрешения теперь ничего не уходит в disconnected SDK
keyCommandsреально кэшируется — раньше пересоздавалось 286 объектов на каждое нажатие → jank в наборе текста
UX смены разрешения
- Overlay "Switching resolution…" во время gap
- Никакого чёрного экрана — последний кадр замораживается через
glkViewController.isPaused - Никакого ложного "Disconnected" alert —
ParsecStatusBar.poll()теперь молчит во время gap - Gap сокращён 300ms → 100ms
Сетевая задержка
Frame Ratedefault = "Auto (Device Max)" — на iPad с ProMotion (120 Hz) срезает render latency вдвое- "Low Latency Mode" umbrella toggle в
Settings → Graphics— одной галочкой включает max FPS + H.265 + no overlay + убирает 80ms holds на Cmd-shortcut'ах - Mouse accumulator теперь round-half-away-from-zero — slow drags больше не лагают на стикинесс
- QoS .userInteractive для poll threads
- PiP captureFrame только когда PiP реально активен (раньше жрал GPU readback каждый frame)
Локальный курсор (твой реквест)
- Settings → Interactivity → "Local Cursor Overlay" — рисуем белый SF Symbol cursorarrow на iPad локально, поверх стрима. Host cursor скрывается. Position трекается из input deltas — никакого RTT.
- В direct режиме 1:1 совпадает с хостом.
- В touchpad (delta) режиме — pure client-side prediction. Caveat: если кликнешь до того как хост догонит, клик прилетит в хостовую позицию, не на локальную метку. Для медленного клика — норм; для быстрых Cmd-shortcuts в стрелочных играх — лучше выключить.
Языковая синхронизация
- Не шлёт спурьюсный Ctrl+Space на старте сессии (раньше шёл на каждое подключение)
- Debounce 150ms — rapid Caps Lock toggles больше не interleave модификаторы
- Hotkey labels на macOS-стиле (⌃ ⌘ ⌥ с пометками)
Display persistence
- Выбранный дисплей запоминается и восстанавливается на следующем коннекте
- Restore только 1 раз/сессию — host hot-plug / sleep-wake больше не фликает re-encode
Полировка
- Inertia скролла: peak velocity сбрасывается после паузы >200ms между жестами
- Scroll skip при зуме > 1.0 (не дублирует pan локально и на хост)
- accumulator reset в touchesEnded — drift gone
Полный коммит history
| SHA | Что |
|---|---|
| 8277e0d | Trackpad cursor lag + 2-finger scroll fixes (бaseline из v1) |
| c6f9eb2 | Language sync hidden field + hotkey send (baseline из v1) |
| 96ae81e | Scroll polish + UIKeyCommand registry (baseline из v1) |
| 5d2bf2d | Keyboard regress fix + peak velocity + Mac labels |
| 5464629 | Display persistence + resolution reconnect |
| de86645 | Аудит P0/P1/P2/P3 — backgroundTaskRunning fix, gates, cache, low-latency mode |
| 4ad1d42 | Local cursor overlay + init fix |
Source
PR upstream: hugeBlack#70
CI: https://github.com/2extndd/OpenParsec/actions/runs/26451220276