summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Ernerfeldt <emil.ernerfeldt@gmail.com>2024-09-30 13:23:02 +0200
committerGitHub <noreply@github.com>2024-09-30 13:23:02 +0200
commit15d3d43aa30317ec7c0611d4faae890166d7a22b (patch)
tree4c6f3224c7429323a8e355c95a35f2dd8c533ea6
parent448e12d6b6757e430d831e531d1d62855e1d0627 (diff)
Fix backspace/arrow keys in TextEdit on Linux (#5188)
* Closes https://github.com/emilk/egui/issues/5008 * Closes https://github.com/emilk/egui/pull/5182 * Bug introduced in https://github.com/emilk/egui/pull/4912 I suspect this will make IME no longer work on Linux, though I don't know if it ever worked. I rather have backspace/arrows working though. Please help test this (I don't have Linux!) # Tested on * [x] Mac * [ ] Linux Wayland * [x] Linux X11
-rw-r--r--crates/egui-winit/src/lib.rs70
1 files changed, 37 insertions, 33 deletions
diff --git a/crates/egui-winit/src/lib.rs b/crates/egui-winit/src/lib.rs
index 7110ef3f..1980376b 100644
--- a/crates/egui-winit/src/lib.rs
+++ b/crates/egui-winit/src/lib.rs
@@ -329,39 +329,43 @@ impl State {
}
WindowEvent::Ime(ime) => {
- // on Mac even Cmd-C is pressed during ime, a `c` is pushed to Preedit.
- // So no need to check is_mac_cmd.
- //
- // How winit produce `Ime::Enabled` and `Ime::Disabled` differs in MacOS
- // and Windows.
- //
- // - On Windows, before and after each Commit will produce an Enable/Disabled
- // event.
- // - On MacOS, only when user explicit enable/disable ime. No Disabled
- // after Commit.
- //
- // We use input_method_editor_started to manually insert CompositionStart
- // between Commits.
- match ime {
- winit::event::Ime::Enabled => {
- self.ime_event_enable();
- }
- winit::event::Ime::Preedit(text, Some(_cursor)) => {
- self.ime_event_enable();
- self.egui_input
- .events
- .push(egui::Event::Ime(egui::ImeEvent::Preedit(text.clone())));
- }
- winit::event::Ime::Commit(text) => {
- self.egui_input
- .events
- .push(egui::Event::Ime(egui::ImeEvent::Commit(text.clone())));
- self.ime_event_disable();
- }
- winit::event::Ime::Disabled | winit::event::Ime::Preedit(_, None) => {
- self.ime_event_disable();
- }
- };
+ if cfg!(target_os = "linux") {
+ // We ignore IME events on linux, because of https://github.com/emilk/egui/issues/5008
+ } else {
+ // on Mac even Cmd-C is pressed during ime, a `c` is pushed to Preedit.
+ // So no need to check is_mac_cmd.
+ //
+ // How winit produce `Ime::Enabled` and `Ime::Disabled` differs in MacOS
+ // and Windows.
+ //
+ // - On Windows, before and after each Commit will produce an Enable/Disabled
+ // event.
+ // - On MacOS, only when user explicit enable/disable ime. No Disabled
+ // after Commit.
+ //
+ // We use input_method_editor_started to manually insert CompositionStart
+ // between Commits.
+ match ime {
+ winit::event::Ime::Enabled => {
+ self.ime_event_enable();
+ }
+ winit::event::Ime::Preedit(text, Some(_cursor)) => {
+ self.ime_event_enable();
+ self.egui_input
+ .events
+ .push(egui::Event::Ime(egui::ImeEvent::Preedit(text.clone())));
+ }
+ winit::event::Ime::Commit(text) => {
+ self.egui_input
+ .events
+ .push(egui::Event::Ime(egui::ImeEvent::Commit(text.clone())));
+ self.ime_event_disable();
+ }
+ winit::event::Ime::Disabled | winit::event::Ime::Preedit(_, None) => {
+ self.ime_event_disable();
+ }
+ };
+ }
EventResponse {
repaint: true,