Skip to content

v4 — real bugfixes from user testing (af5261b)

Choose a tag to compare

@2extndd 2extndd released this 26 May 16:28
· 56 commits to fix/trackpad-input since this release

Build @ af5261b. CFBundleVersion bumped to 1.2.4 для cache-bust.

👉 Качай

Sideloader Файл
Scarlet / eSign (обновить текущий) OpenParsec-v4-unsigned.ipa
Scarlet / eSign (поставить рядом) OpenParsec-v4-trackpadfix-unsigned.ipa
AltStore / SideStore OpenParsec-v4-trackpadfix.ipa

Что починил по жалобам на v3

Скролл

  • Natural Scrolling переключатель был backwards. ON теперь = natural feel (без client-side инверсии, Mac сам делает natural в своей default config).
  • Sub-pixel ticks больше не теряются — Int32 truncation → .toNearestOrAwayFromZero rounding в scroll accumulator (та же фикса что делал в mouse path, забыл применить к scroll).
  • Inertia реально работает теперь. Было две проблемы:
    • minSeedSpeed = 80 pts/s — отвергал почти все натуральные скроллы. Снижен до 20.
    • 200ms peak-velocity reset срабатывал во время iPadOS deceleration tail и затирал peak до того как .ended fire'нул. Поднят до 1.0s.

Локальный курсор

  • Был SF Symbol cursorarrow (Mac-стрелка) → программно нарисованный iPadOS-style dot (UIView, 13pt круг, светло-серый с тонкой обводкой и тенью).
  • Не двигался из-за seed бага: contentView.bounds.midX/Y в viewDidLoad = 0. Теперь seed в viewDidLayoutSubviews через hasSeededLocalCursor flag — после реального layout.
  • Sub-pixel плавность движения: теперь moveLocalCursor обновляется на каждом ивенте при полной CGFloat точности, даже когда rounded host-delta = 0.

Language sync

  • Не срабатывал — мои защитные gates (hasSeenInitialLanguage + 150ms debounce) проглатывали legitimate уведомления. Loosened: любое изменение языка fires hotkey, debounce только 50ms против OS-level double-fire.

Смена разрешения

  • "Disconnected 20" — 100ms reconnect gap не хватало SDK. Бамп до 600ms.

Сохранение дисплея

  • Не работало — Parsec может перегенерировать display id'ы между сессиями. Теперь сохраняется И id, И "name + adapterName" строка. На restore сначала пробуем id, потом name match.

Что я не починил (объясняю честно)

  1. Resolution 1920x1080 в Settings не применяется на хосте
    На macOS Parsec захватывает физический дисплей и игнорирует запрошенное разрешение в parsecClientCfg.video.0.resolutionX/Y. Это поведение хоста, не клиента.

    Что реально снижает bandwidth:

    • Bitrate в in-stream overlay (работает 100% — host реально кодирует с меньшим bitrate)
    • H.265 decoder в Settings → Graphics
    • Поставить BetterDummy на Mac (free) — создаёт виртуальный дисплей в нужном разрешении, выбираешь его через "Switch Display" → реально получаешь 1920x1080
  2. Скрыть курсор на самом физическом Mac
    Parsec SDK не имеет client→host cursor сообщения. macOS рисует курсор до Parsec capture.

Source

CI: https://github.com/2extndd/OpenParsec/actions/runs/26461049686