On Windows, fix IME APIs MT-safety
Execute the calls to the IME from the main thread. Fixes #3123.
This commit is contained in:
parent
98b3508aca
commit
36d4907da8
2 changed files with 13 additions and 7 deletions
|
|
@ -42,6 +42,7 @@ And please only add new entries to the top of this list, right below the `# Unre
|
||||||
- On Windows, updated `WM_MOUSEMOVE` to detect when cursor Enter or Leave window client area while captured and send the corresponding events. (#3153)
|
- On Windows, updated `WM_MOUSEMOVE` to detect when cursor Enter or Leave window client area while captured and send the corresponding events. (#3153)
|
||||||
- On macOS, fix crash when accessing tabbing APIs.
|
- On macOS, fix crash when accessing tabbing APIs.
|
||||||
- On Windows, fix `RedrawRequested` not being delivered when calling `Window::request_redraw` from `RedrawRequested`.
|
- On Windows, fix `RedrawRequested` not being delivered when calling `Window::request_redraw` from `RedrawRequested`.
|
||||||
|
- On Windows, fix IME APIs not working when from non event loop thread.
|
||||||
|
|
||||||
# 0.29.1-beta
|
# 0.29.1-beta
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -872,17 +872,22 @@ impl Window {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_ime_cursor_area(&self, spot: Position, size: Size) {
|
pub fn set_ime_cursor_area(&self, spot: Position, size: Size) {
|
||||||
unsafe {
|
let window = self.window.clone();
|
||||||
ImeContext::current(self.hwnd()).set_ime_cursor_area(spot, size, self.scale_factor());
|
let state = self.window_state.clone();
|
||||||
}
|
self.thread_executor.execute_in_thread(move || unsafe {
|
||||||
|
let scale_factor = state.lock().unwrap().scale_factor;
|
||||||
|
ImeContext::current(window.0).set_ime_cursor_area(spot, size, scale_factor);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_ime_allowed(&self, allowed: bool) {
|
pub fn set_ime_allowed(&self, allowed: bool) {
|
||||||
self.window_state_lock().ime_allowed = allowed;
|
let window = self.window.clone();
|
||||||
unsafe {
|
let state = self.window_state.clone();
|
||||||
ImeContext::set_ime_allowed(self.hwnd(), allowed);
|
self.thread_executor.execute_in_thread(move || unsafe {
|
||||||
}
|
state.lock().unwrap().ime_allowed = allowed;
|
||||||
|
ImeContext::set_ime_allowed(window.0, allowed);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue