rime / squirrel

【鼠鬚管】Rime for macOS
https://rime.im
GNU General Public License v3.0
4.54k stars 413 forks source link

窗口切换后键入shift+任意键会导致切换中西文输入模式 #901

Closed gradypark86 closed 2 months ago

gradypark86 commented 2 months ago

升级到 0.18 后,若切换窗口后输入 shift+任意键(如输入 #, @, !, A, B 等),输入法会切换中西文输入模式。

复现步骤:

  1. 在某窗口正常输入,此时为中文输入模式。
  2. 使用快捷键切换到另一窗口,再切换回来。
  3. 此时中文可正常输入,但一旦输入 shift+任意键,输入法会变为西文输入模式。

0.16.2 无此问题,0.18 自带默认配置即有此问题。

gradypark86 commented 2 months ago

貌似是和 alt-tab 存在冲突,使用 alt-tab 快捷键切换到其他窗口才会出现上述问题。macOS 自带的 ⌘ + ⇥ 快捷键没有影响。

测试了一下,只有将 ⌘ 或 ⌥ 作为 alt-tab 的按住键,会出现该问题。

LEOYoon-Tsaw commented 2 months ago

我可以重現這個問題,原因是Option +Tab後失焦了,Option鍵release的事件被推遲到Shift按下的時候和Shift按下一齊發送給了鼠鬚管。而鼠鬚管沒有對同時多個修飾鍵改變這種情況做處理,結果是Shift按下先於Option釋放處理了,Librime最後看到Shift釋放時沒有識別到之前的Shift down(Librime認爲前次事件是Option up),就沒有正確處理。

我做了一些修復的嘗試,確保在同時有多個modifier改變時,先傳release的給librime,後傳按下的給librime。能解決這個問題,對日常使用也不會有影響(正常不可能同時按兩個鍵,總有先後)。

@lotem 看看前端的處理是否合適吧,也許由librime修復也可以。

lotem commented 2 months ago

在修饰键状态改变时模拟修饰键按下和释放的事件这是鼠须管前端特有的逻辑。所以就在前端修复吧。