[IME] Can't input CompositionEnd only characters because of checking ccursor.index and ime_cursor.index
- Dominant language
- Rust
- Stars
- 30.6k
- Forks
- 2.1k
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 72
Description
**Describe the bug**
Sometimes can not type IME CompositionEnd characters.
**To Reproduce**
Use 'PinYin' input, type some words, then type in some other character such as `【 】 …… `
**Expected behavior**
Type in any characters, including CompositionEnd characters.
**Screenshots**
https://github.com/emilk/egui/assets/16380650/fe9c1e7a-c665-4726-bf08-081b8c7c0c41

After typing `!@`, can not type any CompositionEnd character like `【】。,;`。


I'm using version 0.27.2, i see branch `master` has changed `CompositionEnd` to `ImeEvent::Commit`, but this bug still exists.
Here is why this happens.
`/crates/egui/src/widgets/text_edit/builder.rs` L974
`if !prediction.is_empty() && cursor_range.secondary.ccursor.index == state.ime_cursor_range.secondary.ccursor.index`
this prediction make sure `cursor_range.secondary.ccursor.index` equals `state.ime_cursor_range.secondary.ccursor.index` .
but when input CompositionEnd only characters after some other characters, `cursor_range.secondary.ccursor.index` is equals to the length of previous characters, and `state.ime_cursor_range.secondary.ccursor.index` equals to `0`.
Below is my solution:


https://github.com/emilk/egui/assets/16380650/6e2d7733-cea6-49e5-89ce-fd74e04963bc
If we check this two `cursors.index` only when ime_state equals true which meanings we triggered `CompositionStart` first and currently continue typing some `IME` characters. if we trigger `CompositionEnd` first, there is no need to check `cursor.index`.
Actually, i don't know why need to check `cursor_range.secondary.ccursor.index == state.ime_cursor_range.secondary.ccursor.index`, can you tell me the reason. Thanks 😊
**Desktop (please complete the following information):**
- OS: Windows11
Contributor guide
Research direction
Start in crates/egui/src/widgets/text_edit/builder.rs around line 974 and reproduce the issue on Windows 11 with PinYin input, typing ordinary characters followed by CompositionEnd characters such as 【】。,;. Trace why the cursor indices differ after CompositionEnd input, then verify that all described characters can be entered without breaking ongoing IME composition.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop, internationalization
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100