Fix: Web remote desktop reliability and UX

- 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
This commit is contained in:
yuanyuanxiang
2026-05-19 18:06:41 +02:00
parent d757c33bcb
commit cd43caafb2
8 changed files with 135 additions and 46 deletions

View File

@@ -911,7 +911,14 @@ public:
// 加载保存的质量设置
void LoadQualitySettings()
{
m_qualityLevel = (int8_t)m_config.GetInt("QualityLevel", QUALITY_ADAPTIVE);
// Default to QUALITY_GOOD (H264 1080P) — same as Windows ScreenManager.cpp
// and the explicit hardcoded default in macos/ScreenHandler.mm. Using
// QUALITY_ADAPTIVE here told the controller's EvaluateQuality to auto-
// upgrade to Ultra/High (DIFF/RGB565), breaking web sessions whose
// browser decoder only handles H264. Web sessions also get a clamp on
// the server side as defense in depth; this default change ensures
// Linux clients don't request adaptive in the first place.
m_qualityLevel = (int8_t)m_config.GetInt("QualityLevel", QUALITY_GOOD);
Mprintf(">>> LoadQualitySettings: level=%d\n", m_qualityLevel);
// 如果有保存的具体等级,立即应用