Mô tả lỗi
Trên X11, mode Uinput (Smooth / Super Smooth) gõ ở thanh địa chỉ Chromium-based (Chrome, Edge) mất chữ gần như mọi từ có dấu. Input/textarea trong trang, Firefox, app GTK thì không bị. Preedit không bị.
Log lotus=5 khi gõ tiee:
Perform replacement: e -> ê
Send 2 backspaces
Reset engine (+25 ms)
deactivate -> activate (~5 ms)
Clear all buffers
Chromium trên X11 reset GTK IM context bằng cách focus out rồi focus in lại ngay, mỗi khi text trong ô đổi ngoài IME. Ở omnibox thì gần như phím nào cũng vậy, kể cả ngay sau backspace và commit của Lotus. Lotus coi đó là đổi cửa sổ thật:
deactivate() set is_deleting_ = false (src/lotus-engine.cpp:771) → backspace thứ 2 không được đếm, pending_commit_string_ không bao giờ được commit: tie + e → t.
activate() gọi setMode() (src/lotus-engine.cpp:443) → clearAllBuffers() xoá history. Commit xong mà bị bounce thì phím dấu kế tiếp ra thô: viê + j → viêj.
WaitSurroundingEvent ở #477 không giúp được vì Chromium X11 không có surrounding text.
Code liên quan ở 3.5.9 và dev giống hệt nhau.
Các bước tái hiện
- X11 (mình dùng GNOME), Mode = Uinput (Smooth)
- Mở Chrome/Edge, gõ
tieengs vieejt vào thanh địa chỉ
Kết quả mong đợi
tiếng việt
Kết quả thực tế
tngs vjt
Hướng fix
Cùng IC focus in lại trong vòng 100 ms sau focus out thì coi là bounce (cùng ngưỡng 100 ms nhánh surrvalid đang dùng, src/lotus-engine.cpp:479): giữ is_deleting_ để replacement đang dở chạy tiếp, và bỏ qua setMode() / clearAllBuffers(). Khoảng 30 dòng trong activate() / deactivate().
Mình đo bằng bàn phím ảo uinput, mỗi lượt 15 cụm Telex, Edge 150:
| Thanh địa chỉ Edge, Smooth |
trước |
sau |
| 50 ms/phím |
0/15 |
15/15 |
| 5 ms/phím |
0/15 |
15/15 |
| gõ chồng phím, 30 ms |
0/15 |
30/30 |
Input/textarea/contenteditable của Edge, Firefox, GTK3, gnome-terminal và Preedit vẫn 15/15 sau fix. ctest không đổi.
Code ở nhánh nguyenphivn:fix/x11-focus-bounce, 1 commit trên dev. Bạn thấy hướng này ổn thì mình gửi PR.
Liên quan #294: cũng X11 + omnibox nhưng triệu chứng là lặp (eê, dđ). Máy mình chưa ra được kiểu lặp đó nên chưa dám nói fix này đóng luôn #294. Ai đang bị #294 thử nhánh trên giúp mình với.
Phiên bản fcitx5-lotus
3.5.9 (code liên quan giống dev 2fb0b82; mình đo trên bản build từ dev + #477, WaitSurroundingEvent bật hay tắt đều lỗi)
Cách cài đặt
Tự build từ source
Hệ điều hành / Distro
Ubuntu 24.04
Môi trường Desktop
GNOME (X11)
Mô tả lỗi
Trên X11, mode Uinput (Smooth / Super Smooth) gõ ở thanh địa chỉ Chromium-based (Chrome, Edge) mất chữ gần như mọi từ có dấu. Input/textarea trong trang, Firefox, app GTK thì không bị. Preedit không bị.
Log
lotus=5khi gõtiee:Chromium trên X11 reset GTK IM context bằng cách focus out rồi focus in lại ngay, mỗi khi text trong ô đổi ngoài IME. Ở omnibox thì gần như phím nào cũng vậy, kể cả ngay sau backspace và commit của Lotus. Lotus coi đó là đổi cửa sổ thật:
deactivate()setis_deleting_ = false(src/lotus-engine.cpp:771) → backspace thứ 2 không được đếm,pending_commit_string_không bao giờ được commit:tie+e→t.activate()gọisetMode()(src/lotus-engine.cpp:443) →clearAllBuffers()xoá history. Commit xong mà bị bounce thì phím dấu kế tiếp ra thô:viê+j→viêj.WaitSurroundingEventở #477 không giúp được vì Chromium X11 không có surrounding text.Code liên quan ở 3.5.9 và
devgiống hệt nhau.Các bước tái hiện
tieengs vieejtvào thanh địa chỉKết quả mong đợi
tiếng việtKết quả thực tế
tngs vjtHướng fix
Cùng IC focus in lại trong vòng 100 ms sau focus out thì coi là bounce (cùng ngưỡng 100 ms nhánh
surrvalidđang dùng,src/lotus-engine.cpp:479): giữis_deleting_để replacement đang dở chạy tiếp, và bỏ quasetMode()/clearAllBuffers(). Khoảng 30 dòng trongactivate()/deactivate().Mình đo bằng bàn phím ảo uinput, mỗi lượt 15 cụm Telex, Edge 150:
Input/textarea/contenteditable của Edge, Firefox, GTK3, gnome-terminal và Preedit vẫn 15/15 sau fix. ctest không đổi.
Code ở nhánh
nguyenphivn:fix/x11-focus-bounce, 1 commit trêndev. Bạn thấy hướng này ổn thì mình gửi PR.Liên quan #294: cũng X11 + omnibox nhưng triệu chứng là lặp (
eê,dđ). Máy mình chưa ra được kiểu lặp đó nên chưa dám nói fix này đóng luôn #294. Ai đang bị #294 thử nhánh trên giúp mình với.Phiên bản fcitx5-lotus
3.5.9 (code liên quan giống
dev2fb0b82; mình đo trên bản build từdev+ #477,WaitSurroundingEventbật hay tắt đều lỗi)Cách cài đặt
Tự build từ source
Hệ điều hành / Distro
Ubuntu 24.04
Môi trường Desktop
GNOME (X11)