Skip to content

Firefox trên Wayland mất chữ khi gõ nhanh ở mode Uinput: sleep_for chặn event loop nên không thấy SurroundingTextUpdated #487

Description

@nguyenphivn

Tóm tắt: bỏ sleep_for, chuyển sang chờ event SurroundingTextUpdated là thay đổi cải thiện lớn nhất mình đo được cho mode Uinput trên Wayland:

Mô tả lỗi

Wayland, mode Uinput (Smooth), gõ nhanh trên Firefox bị mất chữ. Mình đo bằng bàn phím ảo uinput, 15 cụm Telex mỗi lượt, bản hiện tại chỉ ra 9–14/15 trên Firefox.

Nguyên nhân: backspace đi qua kernel (uinput), còn chữ mới đi qua Wayland text-input. Hai đường khác nhau nên chữ mới hay tới trước backspace. Code hiện tại chờ bằng sleep_for 2 ms mỗi backspace, rồi retry 3 × 2 ms.

Chỗ sleep_for đó không thể đúng: fcitx5 chỉ có một event loop, mà InputContextSurroundingTextUpdated (tín hiệu "app đã xoá xong") lại đi qua đúng cái loop đang bị sleep_for chặn. Ngủ bao lâu cũng không thấy tín hiệu tới, nên retry 3 × 2 ms thực chất lần nào cũng chạy đủ 6 ms. Mình thử tăng thời gian ngủ lên 12,5 lần: Firefox chỉ từ 8/15 lên 9/15, nằm trong nhiễu.

Các bước tái hiện

  1. Wayland (mình dùng KDE Plasma 6), Mode = Uinput (Smooth)
  2. Mở Firefox, gõ nhanh dduwowcj truwowngf hocj vào một ô bất kỳ

Kết quả mong đợi

được trường học

Kết quả thực tế

Thỉnh thoảng mất chữ, 1–6 cụm trên 15

Hướng fix

Không sleep_for nữa: trả event loop về ngay, nghe InputContextSurroundingTextUpdated, kiểm tra bằng nội dung ô (không dùng realtextLen), quá 50 ms thì commit như cũ. App không có surrounding text (terminal, Chromium X11) vẫn đi đường sleep cũ.

50 ms/phím 5 ms/phím
Firefox, 4 ô 60/60 60/60
Kate, Konsole, Alacritty, Meld, Electron 15/15 mỗi app 15/15 mỗi app
Edge, 4 ô trong trang 60/60 30/30
Edge thanh địa chỉ 15/15 14/15

Đánh đổi: đổi cửa sổ trong vòng 50 ms sau khi bấm phím dấu thì ô cũ mất chữ đó.

Trên X11 mình đo thì Firefox không bị (15/15 cả khi bật lẫn tắt), nên đây là lỗi riêng Wayland.

Code nằm ở #477 (draft), mặc định tắt. Ai đang bị thì thử được bằng cách thêm WaitSurroundingEvent=True vào ~/.config/fcitx5/conf/lotus.conf. Có thể là cùng lỗi với #319#267. @archion11 @lamsonquaikhach bạn thử giúp mình với, nếu vẫn còn gặp.

Phiên bản fcitx5-lotus

dev tại thời điểm đo (08/09/2026)

Cách cài đặt

Tự build từ source

Hệ điều hành / Distro

CachyOS

Môi trường Desktop

KDE Plasma (Wayland)

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
      Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions