Skip to content

Uinput mất chữ ở thanh địa chỉ Chromium trên X11: Chromium focus out/in mỗi lần reset IM, Lotus bỏ replacement đang dở #486

Description

@nguyenphivn

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 + et.
  • 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ê + jviê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

  1. X11 (mình dùng GNOME), Mode = Uinput (Smooth)
  2. 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 (, ). 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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    • Status
      Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions