Fix: sub-connection disconnect (e.g. RDP) no longer clears thumbnail of still-online host
This commit is contained in:
@@ -6152,11 +6152,24 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
// 关闭对应客户端的循环快照浮窗(如有)。CloseLoopTip 内部 find 找不到会静默返回。
|
// 关闭对应客户端的循环快照浮窗(如有)。CloseLoopTip 内部 find 找不到会静默返回。
|
||||||
if (info->clientId != 0) {
|
if (info->clientId != 0) {
|
||||||
CloseLoopTip(info->clientId);
|
// 判断主连接是否仍在线:OfflineProc 已在 IO 线程持锁内完成 RemoveFromHostList,
|
||||||
// 清理缩略图相关状态(缓存 + 调度 + 在飞标记)。主机已不在列表,重绘不必要。
|
// 若 m_ClientIndex 里仍有该 clientId,说明还有另一条连接在列表中(即本次断开的
|
||||||
ClearThumbnailCacheEntry(info->clientId);
|
// 是子连接),不应清理主连接的 UI 状态;反之说明主机真正下线。
|
||||||
m_ThumbNextDueTick.erase(info->clientId);
|
// 直接查 m_ClientIndex 比依赖 hasLogin 更稳健:不受未来子连接 auth 改造影响。
|
||||||
m_ThumbnailPending.erase(info->clientId);
|
bool stillOnline;
|
||||||
|
{
|
||||||
|
CLock L(m_cs);
|
||||||
|
stillOnline = (m_ClientIndex.find(info->clientId) != m_ClientIndex.end());
|
||||||
|
}
|
||||||
|
if (!stillOnline) {
|
||||||
|
// 主连接真正下线:关循环窗、释放缩略图 HBITMAP、清调度状态。
|
||||||
|
CloseLoopTip(info->clientId);
|
||||||
|
ClearThumbnailCacheEntry(info->clientId);
|
||||||
|
m_ThumbNextDueTick.erase(info->clientId);
|
||||||
|
m_ThumbnailPending.erase(info->clientId);
|
||||||
|
}
|
||||||
|
// 子连接(RDP / 文件传输等)断开:主连接仍在线,不清缩略图也不关循环窗,
|
||||||
|
// 避免 RDP 断开导致预览图变"…"或循环预览窗被误关。
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close child dialog window
|
// Close child dialog window
|
||||||
|
|||||||
Reference in New Issue
Block a user