fix(web): improve touch double-click reliability across platforms

Increase touch move threshold to prevent accidental drag detection.

Simulate physical double-click with two sequential click events and a 20ms delay instead of using non-standard dblclick event.

Fix folder renaming and unresponsiveness issues on Windows, Linux, and macOS.
This commit is contained in:
yuanyuanxiang
2026-05-30 23:41:03 +02:00
parent c846d11efa
commit a5a04aaab7
5 changed files with 18 additions and 6 deletions

View File

@@ -11,6 +11,8 @@
- [jpeg v3.1.1](https://github.com/libjpeg-turbo/libjpeg-turbo) - [jpeg v3.1.1](https://github.com/libjpeg-turbo/libjpeg-turbo)
- [opus-1.6.1](https://opus-codec.org/release/stable/2026/01/14/libopus-1_6_1.html) - [opus-1.6.1](https://opus-codec.org/release/stable/2026/01/14/libopus-1_6_1.html)
- [libpeconv c7d1e48](https://github.com/hasherezade/libpeconv) - [libpeconv c7d1e48](https://github.com/hasherezade/libpeconv)
- [libvpl v2.16.0](https://github.com/intel/libvpl)
- [dav1d 62501cc](https://github.com/videolan/dav1d)
## execution ## execution

View File

@@ -1896,7 +1896,8 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
Mprintf("[WebService] Admin password configured from %s\n", Mprintf("[WebService] Admin password configured from %s\n",
(webPassEnv && *webPassEnv) ? BRAND_WEB_ENV_VAR : BRAND_ENV_VAR); (webPassEnv && *webPassEnv) ? BRAND_WEB_ENV_VAR : BRAND_ENV_VAR);
} else { } else {
Mprintf("[WebService] Warning: neither %s nor %s set, web login disabled\n", WebService().SetAdminPassword("admin");
Mprintf("[WebService] Warning: neither %s nor %s set! Use 'admin' as password\n",
BRAND_WEB_ENV_VAR, BRAND_ENV_VAR); BRAND_WEB_ENV_VAR, BRAND_ENV_VAR);
} }
// HideWebSessions: 1=hide (default), 0=show (for debugging) // HideWebSessions: 1=hide (default), 0=show (for debugging)
@@ -10842,7 +10843,8 @@ void CMy2015RemoteDlg::OnWebRemoteControl()
return; return;
} }
else if (m_superPass.empty()) { else if (m_superPass.empty()) {
MessageBoxL("请设置环境变量 " BRAND_ENV_VAR " 来使用Web远程桌面!", "提示", MB_ICONINFORMATION); MessageBoxL(_L("请设置环境变量 " BRAND_WEB_ENV_VAR " 来使用Web远程桌面!") + _L("\n默认密码是: admin")
, "提示", MB_ICONINFORMATION);
}else { }else {
MessageBoxL("如需Web远程桌面跨网使用方案请联系管理员!", "提示", MB_ICONINFORMATION); MessageBoxL("如需Web远程桌面跨网使用方案请联系管理员!", "提示", MB_ICONINFORMATION);
} }

View File

@@ -1772,7 +1772,7 @@ FRPS
Web端口设置无效!\n必须具有有效的授权才能使用Web远程监控!=Web port set failed!\nA valid authorization is required! Web端口设置无效!\n必须具有有效的授权才能使用Web远程监控!=Web port set failed!\nA valid authorization is required!
打开Web远程桌面(&W)=Open Web SimpleRemoter(&W) 打开Web远程桌面(&W)=Open Web SimpleRemoter(&W)
请在菜单设置Web端口!=Please set Web liscening port! 请在菜单设置Web端口!=Please set Web liscening port!
请设置环境变量 YAMA_PWD 来使用Web远程桌面!=Please set YAMA_PWD to use Web SimpleRemoter! 请设置环境变量 YAMA_WEB_ADMIN_PASS 来使用Web远程桌面!=Please set YAMA_WEB_ADMIN_PASS to use Web SimpleRemoter!
如需Web远程桌面跨网使用方案请联系管理员!=If you need to use Web SimpleRemoter in WAN, please contact administrator! 如需Web远程桌面跨网使用方案请联系管理员!=If you need to use Web SimpleRemoter in WAN, please contact administrator!
; Plugin Settings Dialog - English Translation ; Plugin Settings Dialog - English Translation
; Format: Simplified Chinese=English ; Format: Simplified Chinese=English
@@ -1924,3 +1924,4 @@ FRPC Զ
错误=Error 错误=Error
压缩(&C)=&Compress 压缩(&C)=&Compress
解压缩(&U)=&Uncompress 解压缩(&U)=&Uncompress
\n默认密码是: admin=\nDefault password is: admin

View File

@@ -1764,7 +1764,7 @@ FRPS
监听端口和Web服务端口冲突!=监听端口和Web服务端口冲突! 监听端口和Web服务端口冲突!=监听端口和Web服务端口冲突!
打开Web远程桌面(&W)=打开Web远程桌面(&W) 打开Web远程桌面(&W)=打开Web远程桌面(&W)
请在菜单设置Web端口!=请在菜单设置Web端口! 请在菜单设置Web端口!=请在菜单设置Web端口!
请设置环境变量 YAMA_PWD 来使用Web远程桌面!=请设置环境变量 YAMA_PWD 来使用Web远程桌面! 请设置环境变量 YAMA_WEB_ADMIN_PASS 来使用Web远程桌面!=请设置环境变量 YAMA_WEB_ADMIN_PASS 来使用Web远程桌面!
如需Web远程桌面跨网使用方案请联系管理员!=如需Web远程桌面跨网使用方案请联系管理员! 如需Web远程桌面跨网使用方案请联系管理员!=如需Web远程桌面跨网使用方案请联系管理员!
; Plugin Settings Dialog - Traditional Chinese Translation ; Plugin Settings Dialog - Traditional Chinese Translation
; Format: Simplified Chinese=Traditional Chinese ; Format: Simplified Chinese=Traditional Chinese
@@ -1915,3 +1915,4 @@ FRPC Զ
错误=錯誤 错误=錯誤
压缩(&C)=壓縮(&C) 压缩(&C)=壓縮(&C)
解压缩(&U)=解壓縮(&U) 解压缩(&U)=解壓縮(&U)
\n默认密码是: admin=\n默认密码是: admin

View File

@@ -3129,7 +3129,7 @@
const totalDist = Math.sqrt(totalDx * totalDx + totalDy * totalDy); const totalDist = Math.sqrt(totalDx * totalDx + totalDy * totalDy);
// Different thresholds for different states // Different thresholds for different states
const moveThreshold = (touchState.state === T_SECOND_DOWN) ? 10 : 20; const moveThreshold = (touchState.state === T_SECOND_DOWN) ? 22 : 20;
if (totalDist > moveThreshold && !touchState.moved) { if (totalDist > moveThreshold && !touchState.moved) {
touchState.moved = true; touchState.moved = true;
@@ -3226,7 +3226,13 @@
// Must send first click before dblclick for Windows to recognize // Must send first click before dblclick for Windows to recognize
console.log('[Touch] Double click'); console.log('[Touch] Double click');
clickAtCursor(0); // First click clickAtCursor(0); // First click
dblClickAtCursor(); // Then double click // dblClickAtCursor(); // Then double click
// 强制人工延迟 20 毫秒发送第二次标准单击
// 这 20ms 的延迟在操作上完全感觉不到,但对远程桌面的网络和操作系统驱动至关重要!
// 它能完美地把两次点击在时间线上拉开,让任何操作系统都 100% 判定这是标准的“物理鼠标双击”。
setTimeout(() => {
clickAtCursor(0);
}, 20);
touchState.state = T_IDLE; touchState.state = T_IDLE;
} else if (touchState.state === T_FIRST_DOWN && !touchState.moved) { } else if (touchState.state === T_FIRST_DOWN && !touchState.moved) {
// First tap released without moving = single click // First tap released without moving = single click