Two changes to reduce unnecessary CScreenSpy restarts when connecting:
1. Client (ScreenManager.cpp): Initialize CScreenSpy with bitrate from
the locally-saved quality profile, so CMD_QUALITY_LEVEL arriving from
the server (same bitrate as default) hits SetBitRate(3000)==3000 and
skips the restart instead of comparing against the hard-coded 0.
Also fixes QualityLevel init to use the already-computed `quality`
variable (which honours the QUALITY_DISABLED override when algo!=NUL)
rather than re-reading the cfg key a second time.
2. Server (ScreenSpyDlg.cpp): Only send CMD_SCREEN_SIZE strategy=2 when
the session is in QUALITY_ADAPTIVE mode and a cached maxWidth exists.
Fixed quality levels already carry resolution via CMD_QUALITY_PROFILES,
so unconditionally sending CMD_SCREEN_SIZE caused a second restart when
the screen spy was still rebuilding from the first one.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Server: clamp web session adaptive quality to H264-only levels (>=Good) in EvaluateQuality and ApplyQualityLevel; Ultra/High (DIFF/RGB565) caused the browser to freeze ~1 min into a session
- Server: move session-type detection to the top of ScreenSpyDlg::OnInitDialog and skip SetWindowPlacement/EnterFullScreen for hidden web sessions, eliminating the MFC dialog flash on web-triggered opens
- Linux client: default QualityLevel from QUALITY_ADAPTIVE to QUALITY_GOOD to match Windows/macOS so the server's adaptive controller doesn't auto-upgrade to non-H264 algorithms
- Web: clear the floating quick-action toolbar on fullscreen exit so its row of buttons (RDP reset / Mouse / Close) doesn't stay pinned to the top of the page
- Web: route F11 to the remote in control mode instead of toggling local fullscreen
- Web: route Esc to the remote in control mode via the Keyboard Lock API instead of exiting native fullscreen