diff --git a/packaging/OpenCADStudio.desktop b/packaging/OpenCADStudio.desktop index 3fe25cbb..404d833c 100644 --- a/packaging/OpenCADStudio.desktop +++ b/packaging/OpenCADStudio.desktop @@ -8,4 +8,4 @@ Type=Application Categories=Graphics;Engineering; MimeType=image/vnd.dwg;image/vnd.dxf; Keywords=CAD;DWG;DXF;drawing;design;engineering;2D;3D; -StartupWMClass=OpenCADStudio +StartupWMClass=io.github.HakanSeven12.OpenCadStudio diff --git a/src/app/mod.rs b/src/app/mod.rs index fa285718..ec37d362 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -2501,6 +2501,17 @@ impl OpenCADStudio { maximized: true, icon: window::icon::from_rgba(build_window_icon(), 32, 32).ok(), exit_on_close_request: false, + // A Wayland compositor has no StartupWMClass to go on: it resolves a + // window's dock icon by matching the window's app_id against the + // basename of an installed .desktop file. iced defaults the id to an + // empty string, so nothing matched and the dock button came up blank + // even though the AppImage ships both the .desktop and the icon. + // (X11 uses the .desktop's StartupWMClass and was unaffected.) + #[cfg(target_os = "linux")] + platform_specific: window::settings::PlatformSpecific { + application_id: crate::io::file_association::APP_ID.to_string(), + ..Default::default() + }, ..Default::default() }); let mut s = state; diff --git a/src/io/file_association.rs b/src/io/file_association.rs index f2a1ee21..6b4eeba6 100644 --- a/src/io/file_association.rs +++ b/src/io/file_association.rs @@ -22,11 +22,12 @@ //! would otherwise block the iced executor; the result is delivered back //! through a oneshot channel that the async wrapper awaits. -/// Reverse-DNS bundle / app id, shared by the macOS handler binding and the -/// Linux desktop-file name. Matches `CFBundleIdentifier` in packaging/Info.plist -/// and the installed `*.desktop` basename. +/// Reverse-DNS bundle / app id, shared by the macOS handler binding, the +/// Linux desktop-file name and the Wayland window app_id. Matches +/// `CFBundleIdentifier` in packaging/Info.plist and the installed `*.desktop` +/// basename. #[cfg(any(target_os = "macos", target_os = "linux"))] -const APP_ID: &str = "io.github.HakanSeven12.OpenCadStudio"; +pub(crate) const APP_ID: &str = "io.github.HakanSeven12.OpenCadStudio"; /// Silently register this app as *a* handler (not necessarily the default) for /// .dwg / .dxf, so it appears in the OS "Open with" list. Unlike