desktop: one name across all three install channels (issue 2075)
The app answered to three different names depending on how it arrived, and the
part that actually hurt was WM_CLASS. Reading tauri-bundler settles what it is:
the generated .desktop template writes StartupWMClass={{exec}} where exec is
main_binary_name, and tao creates its GtkApplication with a NULL app id
(enableGTKAppId defaults off), so GTK falls back to the program name. WM_CLASS
is the binary name, nothing else.
Which inverts this issue's premise. The rename could not break grouping,
because two channels weren't grouping in the first place: pacman ships
/usr/bin/thoughtsync and the AppImage's AppRun execs thoughtsync-desktop, while
all three hand-written entries hardcoded StartupWMClass=ThoughtSync — a string
no binary in any channel has ever reported. Only the .deb worked, and only
because Tauri generates its entry from the binary and never consulted us.
So: thoughtsync everywhere, carried by the build target itself via Cargo [[bin]]
plus mainBinaryName rather than by the install path, since the target name is
what the desktop reads. The pacman package sheds its -desktop suffix and
declares conflict+replaces so an upgrade retires the old one instead of landing
beside it and fighting over /usr/bin/thoughtsync.
The .deb verifier now asserts binary path, Exec and StartupWMClass all agree,
which is the part that keeps this fixed: the .deb's entry is the one no human
writes, so it's the one that drifts silently.
Package: thought-sync stays. tauri-bundler derives it as kebab-case(productName)
with no override, and rewriting a control archive on every build is a poor trade
for one uninstall command.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -236,6 +236,10 @@ if ( cd "$tmp" && "$dest" --appimage-extract .DirIcon >/dev/null 2>&1 ) \
|
||||
fi
|
||||
rm -rf "$tmp/squashfs-root" 2>/dev/null || true
|
||||
|
||||
# StartupWMClass is the BINARY name, not the product name and not the AppImage
|
||||
# filename: the AppImage's AppRun execs usr/bin/thoughtsync, and GTK derives
|
||||
# WM_CLASS from whatever it ends up running. Anything else here means the window
|
||||
# never associates with this entry and the taskbar shows a second, generic icon.
|
||||
cat > "$apps_menu/thoughtsync.desktop" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
@@ -245,7 +249,7 @@ Exec=$dest %U
|
||||
Icon=$icon_ref
|
||||
Terminal=false
|
||||
Categories=Utility;Office;
|
||||
StartupWMClass=ThoughtSync
|
||||
StartupWMClass=thoughtsync
|
||||
EOF
|
||||
|
||||
have update-desktop-database && update-desktop-database "$apps_menu" >/dev/null 2>&1 || true
|
||||
|
||||
Reference in New Issue
Block a user