-
Notifications
You must be signed in to change notification settings - Fork 564
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
有输入框的TAURI桌面程序,处于置顶状态时,用weasel向输入框打字,weasel会卡死 #1435
Comments
↑另外的讨论 |
我编译了之前据说没问题的版本. |
问题可能出在 weasel/WeaselTSF/Composition.cpp Lines 241 to 242 in 37c8fa1
注释掉任意一行都可以正常打字 |
@CDHJS |
我最早的思路其实是去找“winapi获取活动窗口句柄”误打误撞找到了 weasel/WeaselTSF/Composition.cpp Line 188 in 37c8fa1
然后fork并删掉了整个代码块,我没装C++的编译环境所以用Actions编译,也是误打误撞删掉了 weasel/WeaselTSF/Composition.cpp Line 205 in 37c8fa1
发现bug不存在了,上面的commit只是错误的以为bug来源是GetForegroundWindow把整块代码扔给GPT去重写了而已 以及我到现在没找到m_client是什么(VSCode只能找字符串),但我注释掉之后bug消失了,我fork的actions里最新的结果你可以试试 |
我测试了Chromium,Floorp,Edge,VSCode,Steam,wails,单独tao,winit+wry,webview2-rs(wry的上游)都正常,只有tao+wry和tauri会卡死,不过删除m_client.UpdateInputPosition(rc);的版本能正常运行,以及删除 weasel/WeaselUI/WeaselPanel.cpp Lines 1213 to 1214 in 37c8fa1
也能正常运行,但定位会在桌面左上角不动 卡死时【Webview tauri主进程 算法服务】加起来的CPU会有一个接近单核满载的占用,并且其中一个Webview进程内存缓慢增加(内存泄露?) 如果有托盘图标菜单的话右键托盘图标会解除卡死并关闭菜单,操作了几步就需要右键几下 如果点击了别的窗口卡死的UI会跟着新的窗口移动,如果此时输入会出现两个UI,新出现的UI正常 |
@CDHJS |
在tao+wry如果给 |
就咱俩在这讨论,不知道维护的大佬有没有计划修复 😢 |
候选窗是作为应用的子窗口popup的形式存在,上面提到的注释掉部分代码,注释掉的正是光标跟随的部分,底层是SetWindowPos,m_client.UpdateInputPosition是通过ipc通知服务端在必要的时候SetWindowPos,两个潜在SetWindowPos的对象都是候选窗而不是父窗口 如果SetWindowPos都不支持,那还可以怎么修实在想不到了 |
使用api-monitor可以观察到 Line 1506 in 588a31f
可能是诱发此bug的原因 附上chatGPT的解释: @fxliang 希望对修复这个问题有所帮助 |
另外想请教一下m_client.UpdateInputPosition在什么情况下会使用到,在我的使用中是否有这行的版本表现并无不同 |
一些猜想:WeaselUI中未注册WM_WINDOWPOSCHANGED 的响应回调,那这个消息会向上传递到上一层应用的窗口对象;然后如你指出的状态似乎这个应用框架会手动触发一次WM_WINDOWPOSCHANGED消息,tsf中有注册如果光标位置变化的话,会响应调整输入框位置,这个又会调用一次SetWindowPos,于是死循环了?
|
按照你的猜想,修复这个问题的方法是给SetWindowPos增加一个防抖来防止过短时间内的多次调用 |
上报前请检查
操作系统信息
OS 详细版本: [ 运行 winver.exe 获取,如 Windows 11 22H2 22621.1555]
小狼毫版本: [ 如 0.15.0.0 , CI 构建版请附短 commit hash ,如 372c9c ]
描述遇到的问题
tauri写的Windows桌面程序,且该程序处于置顶状态(可以用Windows powertoy设定窗口置顶,或者程序自身支持置顶)
这时用WEASEL再该程序的输入框里输入文字,WESEL自身就会卡死
这是TAURI那边的issue,暂时不知道是谁的锅
tauri-apps/tauri#6879
复现步骤
重现问题的步骤,如:
预期行为
正常输入
用户文件
请于此附上 weasel 用户文件夹下的内容,方便开发者调试问题
截图
如果问题需要,可附上 GIF 图片
其他补充说明
如果有其他补充说明,可以写在这里
The text was updated successfully, but these errors were encountered: