From f8b7c4b78f41beb30ca19fe357abdec0d98a6434 Mon Sep 17 00:00:00 2001 From: Ulrik de Muelenaere Date: Sat, 27 Jan 2024 21:40:28 -0500 Subject: [PATCH] bugfix: Fix swapped instance and general class names on X11 This let statement swapped the two names, resulting in incorrect behavior since commit d7ec899d. That commit did not actually introduce the swap, but the previous code swapped it again before setting the WM_CLASS property, so no issue was ever observed. It also brings the documentation in line with the implementation since the parent commit, and with the ICCCM standard, which states the following about the WM_CLASS property [1]: The two strings, respectively, are: * A string that names the particular instance of the application [...] * A string that names the general class of applications [...] [1] https://www.x.org/releases/current/doc/xorg-docs/icccm/icccm.html#WM_CLASS_Property --- CHANGELOG.md | 1 + src/platform/x11.rs | 2 +- src/platform_impl/linux/x11/window.rs | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f63cd2b..2fc5f425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Unreleased` header. # Unreleased +- On X11, fix swapped instance and general class names. - **Breaking:** Removed unnecessary generic parameter `T` from `EventLoopWindowTarget`. - On Windows, macOS, X11, Wayland and Web, implement setting images as cursors. See the `custom_cursors.rs` example. - **Breaking:** Remove `Window::set_cursor_icon` diff --git a/src/platform/x11.rs b/src/platform/x11.rs index 442f28f7..7dc3e8cd 100644 --- a/src/platform/x11.rs +++ b/src/platform/x11.rs @@ -143,7 +143,7 @@ pub trait WindowBuilderExtX11 { /// Build window with the given `general` and `instance` names. /// /// The `general` sets general class of `WM_CLASS(STRING)`, while `instance` set the - /// instance part of it. The resulted property looks like `WM_CLASS(STRING) = "general", "instance"`. + /// instance part of it. The resulted property looks like `WM_CLASS(STRING) = "instance", "general"`. /// /// For details about application ID conventions, see the /// [Desktop Entry Spec](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#desktop-file-id) diff --git a/src/platform_impl/linux/x11/window.rs b/src/platform_impl/linux/x11/window.rs index 29789e04..ba417e39 100644 --- a/src/platform_impl/linux/x11/window.rs +++ b/src/platform_impl/linux/x11/window.rs @@ -408,7 +408,7 @@ impl UnownedWindow { // WM_CLASS must be set *before* mapping the window, as per ICCCM! { - let (class, instance) = if let Some(name) = window_attrs.platform_specific.name { + let (instance, class) = if let Some(name) = window_attrs.platform_specific.name { (name.instance, name.general) } else { let class = env::args_os()