AppImage: leave the menu entry to launchers that set DESKTOPINTEGRATION (#1635)

Thanks @lasselian.
This commit is contained in:
Lasse Lian authored and GitHub committed 2026-10-16 03:26:09 -04:00
1 parent 9422853cf9
commit 18ec44d773
2 files changed
+17 -3

No files matched your search

+15 -2
View File
@@ -11,7 +11,9 @@
# the launch untouched. Opt out with SOLIDCRAFT_NO_DESKTOP_INTEGRATION=1 (the pre-rename
# SOLVECRAFT_NO_DESKTOP_INTEGRATION still works: compatibility shim, docs/compatibility.md),
# or for good with an empty file $XDG_DATA_HOME/solidcraft/no-desktop-integration. Nothing is
# installed either when appimaged (go-appimage) already made an entry for this AppImage.
# installed either when appimaged (go-appimage) already made an entry for this AppImage, or when
# a launcher that manages AppImages (Gear Lever, AppImageLauncher) started it: it sets
# DESKTOPINTEGRATION and owns the menu entry.
set -u
@@ -42,10 +44,21 @@ integrate() {
src_desktop="$APPDIR/usr/share/applications/$DESK_ID.desktop"
[ -f "$src_desktop" ] || return 0
apps="$data/applications"
# Gear Lever and AppImageLauncher write their own entry and start the AppImage with
# DESKTOPINTEGRATION set; treat that like appimaged: no entry from here, and drop the one
# this script wrote earlier (it would otherwise come back after the launcher's is removed).
if [ -n "${DESKTOPINTEGRATION:-}" ]; then
mine="$apps/$DESK_ID.desktop"
if [ -f "$mine" ] && grep -q '^Exec="' "$mine"; then
rm -f "$mine"
command -v update-desktop-database >/dev/null 2>&1 && update-desktop-database "$apps" >/dev/null 2>&1
fi
return 0
fi
# appimaged integrates AppImages itself (appimagekit_<hash>-<name>.desktop, Exec= this file):
# a second entry from here would show the app twice, so drop an entry this script wrote earlier
# (only one it wrote: it points Exec at a path in quotes) and leave the rest to appimaged.
apps="$data/applications"
for other in "$apps"/appimagekit_*.desktop; do
if ! { [ -f "$other" ] && grep -qF "$appimage" "$other" 2>/dev/null; }; then
continue