Skip to content

Trackpad fix v2 — UX polish, latency reductions, local cursor (4ad1d42)

Choose a tag to compare

@2extndd 2extndd released this 26 May 13:36
· 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 Rate default = "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