Skip to content

Commit

Permalink
On X11, fix IME crashing during reload
Browse files Browse the repository at this point in the history
During reload we were picking old styles, but the styles could
change during reload leading to errors during IME building.

Fixes rust-windowing#2510.
  • Loading branch information
kchibisov committed Oct 9, 2022
1 parent adfa5bd commit cdea3ef
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ And please only add new entries to the top of this list, right below the `# Unre

# Unreleased

# 0.27.3 (2022-9-10)
- On X11, fixed IME crashing during reload.

# 0.27.3

- On Windows, added `WindowExtWindows::set_undecorated_shadow` and `WindowBuilderExtWindows::with_undecorated_shadow` to draw the drop shadow behind a borderless window.
- On Windows, fixed default window features (ie snap, animations, shake, etc.) when decorations are disabled.
Expand Down
15 changes: 13 additions & 2 deletions src/platform_impl/linux/x11/ime/callbacks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,21 @@ unsafe fn replace_im(inner: *mut ImeInner) -> Result<(), ReplaceImError> {
let mut new_contexts = HashMap::new();
for (window, old_context) in (*inner).contexts.iter() {
let spot = old_context.as_ref().map(|old_context| old_context.ic_spot);
let style = old_context

// Check if the IME was allowed on that context.
let is_allowed = old_context
.as_ref()
.map(|old_context| old_context.style)
.map(|old_context| old_context.is_allowed())
.unwrap_or_default();

// We can't use the style from the old context here, since it may change on reload, so
// pick style from the nem xim based on the old state.
let style = if is_allowed {
new_im.preedit_style
} else {
new_im.none_style
};

let new_context = {
let result = ImeContext::new(
xconn,
Expand Down

0 comments on commit cdea3ef

Please sign in to comment.