The menu remembered the index of the candidate it was opened on. Cloud Pinyin
results arrive asynchronously, so the list can be refreshed between the right
click and the click on an action, and the index would then point at a different
word. That word would have been forgotten and added to the block list.
The word itself is stored when the menu opens and compared when an action is
clicked, nothing is done if it is no longer the same.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The animation frame timer was re-armed with setTime(), setOneShot() and then
setEnabled(true). In the systemd event loop backend setEnabled(true) means
SD_EVENT_ON, a repeating source, and setOneShot() had just set SD_EVENT_ONESHOT.
The re-armed timer was therefore repeating at a time that had already passed,
and the event loop fired it again on every iteration: the main thread of Fcitx5
sat at 100% CPU and typing froze. The first animation was not affected, the
timer is only re-armed from the second one on, which is why it showed up as a
sudden freeze after typing for a while.
setOneShot() alone is correct. tests/timer_rearm.cpp arms a timer twice the way
the window does: with the old calls it fires 198725 times in 200 ms, with the
fix exactly twice.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Record words picked with "Forget candidate" in a block list and drop them
from the candidate list before each refresh, so words from read only
dictionaries stay gone.
- Add scripts/enable-autostart.sh for starting with m3ui at login.
- Make the Chinese README the default, keep the English one as README.en.md.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Fork of the classicui addon (Fcitx5 5.1.23) with a Material 3 look, spring
based animations and a right click action menu for candidates.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>