mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 13:51:30 +11:00
Allow the user to force X11 under Wayland
Use forced backend over the env variables. Signed-off-by: John Nunley <dev@notgull.net> Fixes: #3057
This commit is contained in:
parent
7a2a2341c2
commit
8fdd81ecef
|
@ -19,6 +19,7 @@ And please only add new entries to the top of this list, right below the `# Unre
|
||||||
- On Web, remove any fullscreen requests from the queue when an external fullscreen activation was detected.
|
- On Web, remove any fullscreen requests from the queue when an external fullscreen activation was detected.
|
||||||
- On Wayland, fix `TouchPhase::Canceled` being sent for moved events.
|
- On Wayland, fix `TouchPhase::Canceled` being sent for moved events.
|
||||||
- Mark `startup_notify` unsafe functions as safe.
|
- Mark `startup_notify` unsafe functions as safe.
|
||||||
|
- Fix a bug where Wayland would be chosen on Linux even if the user specified `with_x11`. (#3058)
|
||||||
|
|
||||||
# 0.29.1-beta
|
# 0.29.1-beta
|
||||||
|
|
||||||
|
|
|
@ -716,21 +716,34 @@ impl<T: 'static> EventLoop<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Wayland first because of X11 could be present under wayland as well.
|
// NOTE: Wayland first because of X11 could be present under wayland as well.
|
||||||
|
let backend = match (
|
||||||
|
attributes.forced_backend,
|
||||||
|
env::var("WAYLAND_DISPLAY").is_ok(),
|
||||||
|
env::var("DISPLAY").is_ok(),
|
||||||
|
) {
|
||||||
|
// User is forcing a backend.
|
||||||
|
(Some(backend), _, _) => backend,
|
||||||
|
// Wayland is present.
|
||||||
#[cfg(wayland_platform)]
|
#[cfg(wayland_platform)]
|
||||||
if attributes.forced_backend == Some(Backend::Wayland)
|
(None, true, _) => Backend::Wayland,
|
||||||
|| env::var("WAYLAND_DISPLAY").is_ok()
|
// X11 is present.
|
||||||
{
|
|
||||||
return EventLoop::new_wayland_any_thread().map_err(Into::into);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(x11_platform)]
|
#[cfg(x11_platform)]
|
||||||
if attributes.forced_backend == Some(Backend::X) || env::var("DISPLAY").is_ok() {
|
(None, _, true) => Backend::X,
|
||||||
return Ok(EventLoop::new_x11_any_thread().unwrap());
|
// No backend is present.
|
||||||
}
|
_ => {
|
||||||
|
return Err(EventLoopError::Os(os_error!(OsError::Misc(
|
||||||
Err(EventLoopError::Os(os_error!(OsError::Misc(
|
|
||||||
"neither WAYLAND_DISPLAY nor DISPLAY is set."
|
"neither WAYLAND_DISPLAY nor DISPLAY is set."
|
||||||
))))
|
))));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create the display based on the backend.
|
||||||
|
match backend {
|
||||||
|
#[cfg(wayland_platform)]
|
||||||
|
Backend::Wayland => EventLoop::new_wayland_any_thread().map_err(Into::into),
|
||||||
|
#[cfg(x11_platform)]
|
||||||
|
Backend::X => Ok(EventLoop::new_x11_any_thread().unwrap()),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(wayland_platform)]
|
#[cfg(wayland_platform)]
|
||||||
|
|
Loading…
Reference in a new issue