Allow linux users manipulate wm_class and wm_instance of windows#4609
Allow linux users manipulate wm_class and wm_instance of windows#46090zitro wants to merge 7 commits intobevyengine:mainfrom
Conversation
crates/bevy_window/src/window.rs
Outdated
| #[cfg(any(feature = "x11", feature = "wayland"))] | ||
| desktop_id: "app".to_string(), | ||
| #[cfg(feature = "x11")] | ||
| desktop_instance: "Main".to_string(), |
There was a problem hiding this comment.
| #[cfg(any(feature = "x11", feature = "wayland"))] | |
| desktop_id: "app".to_string(), | |
| #[cfg(feature = "x11")] | |
| desktop_instance: "Main".to_string(), | |
| #[cfg(all( | |
| any( | |
| target_os = "linux", | |
| target_os = "freebsd", | |
| target_os = "netbsd", | |
| target_os = "openbsd" | |
| ), | |
| any(feature = "x11", feature = "wayland") | |
| ))] | |
| desktop_id: "app".to_string(), | |
| #[cfg(all( | |
| any( | |
| target_os = "linux", | |
| target_os = "freebsd", | |
| target_os = "netbsd", | |
| target_os = "openbsd" | |
| ), | |
| feature = "x11" | |
| ))] | |
| desktop_instance: "Main".to_string(), |
| /* | ||
| https://github.com/rust-windowing/winit/blob/ea1c031b54438e64576353b288848c07d2068214/src/platform/unix.rs#L337 | ||
| 337| fn with_class(self, class: String, instance: String) -> Self; | ||
| https://github.com/rust-windowing/winit/blob/ea1c031b54438e64576353b288848c07d2068214/src/platform/unix.rs#L383 | ||
| 383| fn with_class(mut self, instance: String, class: String) -> Self { | ||
|
|
||
| Because of type equality someone wrote those wrong and Rust didn't catch it! | ||
| rust-analyser uses only trait declaration, therefore it shows wrong parameter names | ||
|
|
||
| This bug persists not only in 0.26.0, but also in 0.26.1 | ||
| The next update will be breaking, no more differentiation between x11 class and wayland appid | ||
| */ |
There was a problem hiding this comment.
I needed to repeatedly read over this comment to understand why it was added.
Either this comment or another comment inside the with_class call should have an actionable Instrucction.
// TODO: Switch these two calls once winit releases 0.27 or later.With such a comment, the rest should be much clearer.
Perhaps also prepend the URLs with Trait and Trait Impl.
There was a problem hiding this comment.
In winit 0.27 https://github.com/rust-windowing/winit/blob/ce890c34551d9fb542f10dcb644d22d382e0c921/src/platform/unix.rs#L288 the correct method will be with_name
There was a problem hiding this comment.
It unifies these two methods and in wayland case, the instance field will be noop.
There was a problem hiding this comment.
This comment explains the issue with misleading argument names, which led to me searching the internet for correct variant.
crates/bevy_window/src/window.rs
Outdated
| #[cfg(any(feature = "x11", feature = "wayland"))] | ||
| pub desktop_id: String, | ||
| #[cfg(feature = "x11")] | ||
| pub desktop_instance: String, |
There was a problem hiding this comment.
| #[cfg(any(feature = "x11", feature = "wayland"))] | |
| pub desktop_id: String, | |
| #[cfg(feature = "x11")] | |
| pub desktop_instance: String, | |
| #[cfg(all( | |
| any( | |
| target_os = "linux", | |
| target_os = "freebsd", | |
| target_os = "netbsd", | |
| target_os = "openbsd" | |
| ), | |
| any(feature = "x11", feature = "wayland") | |
| ))] | |
| pub desktop_id: String, | |
| #[cfg(all( | |
| any( | |
| target_os = "linux", | |
| target_os = "freebsd", | |
| target_os = "netbsd", | |
| target_os = "openbsd" | |
| ), | |
| feature = "x11" | |
| ))] | |
| pub desktop_instance: String, |
There was a problem hiding this comment.
Okay, I changed platform configuration, now committing.
There was a problem hiding this comment.
Why is it restricted to linux and {free,net,open}bsd? Is it not supported on macOS with X for example? Or on other systems using X natively?
|
So, I think all issues regarding OS conflicts should be resolved by now. |
|
bors try |
tryTimed out. |
|
bors try |
|
So what exactly will this change allow you to do? What is |
|
wm_class is supposed to uniquely identify the program that created the window I believe. This allows users to tell their window manager to say always open such windows in the top left corner. Or it could allow the window manager to restore the position from the last time you opened the window. See WM_CLASS in https://www.x.org/docs/ICCCM/icccm.pdf for the official specification. |
alice-i-cecile
left a comment
There was a problem hiding this comment.
Code changes LGTM, but I don't have a lot of expertise here or the ability to test it.
|
done in #7650 |
Objective
Allow passing WM_CLASS to windows via WindowDescriptor
Solution
I changed WindowDescriptor to allow initialisation with WM_CLASS and WM_INSTANCE