eframe: Only run_return twice on Windows (#3053)
The approach of #1889 may remove observers in a view twice, which produces the Obj-C Exception: Cannot remove an observer <...> for the key path "nextResponder" from <WinitView ...> because it is not registered as an observer. The above message can only be seen when attaching the application to debugger. Users normally see: [1] *** trace trap cargo run This commit fixes it by only running `event_loop.run_return()` twice on Windows. Besides: * We have set `ControlFlow::Exit` on `Event::LoopDestroyed`, `EventResult::Exit` and on error; therefore, it is safe to not calling `set_exit()`. * This commit also fix the persistence function in macOS. It can't store the content in Memory due to this exception. Fixed: #2768 (eframe: "App quit unexpectedly" on macOS) Signed-off-by: pan93412 <pan93412@gmail.com>
This commit is contained in:
parent
0fda44c4ad
commit
860dac69da
|
|
@ -238,9 +238,15 @@ fn run_and_return(
|
|||
|
||||
// On Windows this clears out events so that we can later create another window.
|
||||
// See https://github.com/emilk/egui/pull/1889 for details.
|
||||
event_loop.run_return(|_, _, control_flow| {
|
||||
control_flow.set_exit();
|
||||
});
|
||||
//
|
||||
// Note that this approach may cause issues on macOS (emilk/egui#2768); therefore,
|
||||
// we only apply this approach on Windows to minimize the affect.
|
||||
#[cfg(windows)]
|
||||
{
|
||||
event_loop.run_return(|_, _, control_flow| {
|
||||
control_flow.set_exit();
|
||||
});
|
||||
}
|
||||
|
||||
returned_result
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue