From 221b2e71cd15db009ede6fa87811b956b599accd 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 2e40dfe27..264332f2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Unreleased` header. # Unreleased - On macOS, fix incorrect IME cursor rect origin. +- On X11, fix swapped instance and general class names. - On Windows, fixed a race condition when sending an event through the loop proxy. # 0.29.10 diff --git a/src/platform/x11.rs b/src/platform/x11.rs index 5cbd2fe32..472128234 100644 --- a/src/platform/x11.rs +++ b/src/platform/x11.rs @@ -96,7 +96,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 b5e256bf5..5bd79a6bf 100644 --- a/src/platform_impl/linux/x11/window.rs +++ b/src/platform_impl/linux/x11/window.rs @@ -396,7 +396,7 @@ impl UnownedWindow { // WM_CLASS must be set *before* mapping the window, as per ICCCM! { - let (class, instance) = if let Some(name) = pl_attribs.name { + let (instance, class) = if let Some(name) = pl_attribs.name { (name.instance, name.general) } else { let class = env::args_os()