mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
On X11, fix errors bleeding from hooks handling them
This commit fixes it, by not updating the `latest_error` when any of the hooks handled the error, otherwise it'd interfere with the winit's error checking.
This commit is contained in:
parent
a88d2e079d
commit
b1a5fae1f5
|
@ -8,6 +8,7 @@ And please only add new entries to the top of this list, right below the `# Unre
|
||||||
|
|
||||||
# Unreleased
|
# Unreleased
|
||||||
|
|
||||||
|
- On X11, fix errors handled during `register_xlib_error_hook` invocation bleeding into winit.
|
||||||
- Add `Window::has_focus`.
|
- Add `Window::has_focus`.
|
||||||
- On Windows, fix `Window::set_minimized(false)` not working for windows minimized by `Win + D` hotkey.
|
- On Windows, fix `Window::set_minimized(false)` not working for windows minimized by `Win + D` hotkey.
|
||||||
- **Breaking:** On Web, touch input no longer fires `WindowEvent::Cursor*`, `WindowEvent::MouseInput`, or `DeviceEvent::MouseMotion` like other platforms, but instead it fires `WindowEvent::Touch`.
|
- **Breaking:** On Web, touch input no longer fires `WindowEvent::Cursor*`, `WindowEvent::MouseInput`, or `DeviceEvent::MouseMotion` like other platforms, but instead it fires `WindowEvent::Touch`.
|
||||||
|
|
|
@ -24,9 +24,13 @@ pub type XlibErrorHook =
|
||||||
|
|
||||||
/// Hook to winit's xlib error handling callback.
|
/// Hook to winit's xlib error handling callback.
|
||||||
///
|
///
|
||||||
/// This method is provided as a safe way to handle the errors comming from X11 when using xlib
|
/// This method is provided as a safe way to handle the errors comming from X11
|
||||||
/// in external crates, like glutin for GLX access. Trying to handle errors by speculating with
|
/// when using xlib in external crates, like glutin for GLX access. Trying to
|
||||||
/// `XSetErrorHandler` is [`unsafe`].
|
/// handle errors by speculating with `XSetErrorHandler` is [`unsafe`].
|
||||||
|
///
|
||||||
|
/// **Be aware that your hook is always invoked and returning `true` from it will
|
||||||
|
/// prevent `winit` from getting the error itself. It's wise to always return
|
||||||
|
/// `false` if you're not initiated the `Sync`.**
|
||||||
///
|
///
|
||||||
/// [`unsafe`]: https://www.remlab.net/op/xlib.shtml
|
/// [`unsafe`]: https://www.remlab.net/op/xlib.shtml
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -653,10 +653,10 @@ unsafe extern "C" fn x_error_callback(
|
||||||
// Don't log error.
|
// Don't log error.
|
||||||
if !error_handled {
|
if !error_handled {
|
||||||
error!("X11 error: {:#?}", error);
|
error!("X11 error: {:#?}", error);
|
||||||
}
|
// XXX only update the error, if it wasn't handled by any of the hooks.
|
||||||
|
|
||||||
*xconn.latest_error.lock().unwrap() = Some(error);
|
*xconn.latest_error.lock().unwrap() = Some(error);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Fun fact: this return value is completely ignored.
|
// Fun fact: this return value is completely ignored.
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue