Skip to content

Commit 82da762

Browse files
authored
Merge branch 'master' into dynamic-accepts-first-mouse
2 parents e767c94 + 0b6b794 commit 82da762

3 files changed

Lines changed: 22 additions & 12 deletions

File tree

winit-appkit/src/view.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -892,24 +892,33 @@ impl WinitView {
892892
false
893893
}
894894
}
895+
pub(super) fn enable_ime(&self, capabilities: ImeCapabilities) {
896+
// This seems reasonable but the prior behavior of `set_ime_allowed` doesn't do this
897+
// (it was also broken but let's not break things worse)
895898

896-
pub(super) fn set_ime_allowed(&self, capabilities: Option<ImeCapabilities>) {
897-
if self.ivars().ime_capabilities.get().is_some() {
898-
return;
899-
}
900-
self.ivars().ime_capabilities.set(capabilities);
899+
// if self.ivars().ime_capabilities.get().is_none() {
900+
// self.ivars().ime_state.set(ImeState::Ground);
901+
// }
901902

902-
if capabilities.is_some() {
903-
return;
903+
// why are we disabling things in an enable fn? who knows. it's what the previous one did
904+
// though
905+
if self.ivars().ime_state.get() != ImeState::Disabled {
906+
self.ivars().ime_state.set(ImeState::Disabled);
907+
self.queue_event(WindowEvent::Ime(Ime::Disabled));
904908
}
905-
906-
// Clear markedText
909+
self.ivars().ime_capabilities.set(Some(capabilities));
907910
*self.ivars().marked_text.borrow_mut() = NSMutableAttributedString::new();
908-
911+
}
912+
pub(super) fn disable_ime(&self) {
913+
// see above
914+
self.ivars().ime_capabilities.set(None);
909915
if self.ivars().ime_state.get() != ImeState::Disabled {
910916
self.ivars().ime_state.set(ImeState::Disabled);
911917
self.queue_event(WindowEvent::Ime(Ime::Disabled));
912918
}
919+
// we probably don't need to do this, but again this mirrors the prior behavior of
920+
// `set_ime_allowed`
921+
*self.ivars().marked_text.borrow_mut() = NSMutableAttributedString::new();
913922
}
914923

915924
pub(super) fn ime_capabilities(&self) -> Option<ImeCapabilities> {

winit-appkit/src/window_delegate.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1686,7 +1686,7 @@ impl WindowDelegate {
16861686
if current_caps.is_some() {
16871687
return Err(ImeRequestError::AlreadyEnabled);
16881688
}
1689-
self.view().set_ime_allowed(Some(capabilities));
1689+
self.view().enable_ime(capabilities);
16901690
request_data
16911691
},
16921692
ImeRequest::Update(request_data) => {
@@ -1696,7 +1696,7 @@ impl WindowDelegate {
16961696
request_data
16971697
},
16981698
ImeRequest::Disable => {
1699-
self.view().set_ime_allowed(None);
1699+
self.view().disable_ime();
17001700
return Ok(());
17011701
},
17021702
};

winit/src/changelog/unreleased.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,4 @@ changelog entry.
5959
- On Windows, fix `WM_IME_SETCONTEXT` IME UI flag masking on `lParam`.
6060
- On macOS, fix crash in `set_marked_text` when native Pinyin IME sends out-of-bounds `selected_range`.
6161
- On X11, fix debug mode overflow panic in `set_timestamp`.
62+
- On macOS, fix IME being locked on (regardless of requests to disable) after being enabled once.

0 commit comments

Comments
 (0)