diff --git a/bin/omarchy-remove-launcher-entry b/bin/omarchy-remove-launcher-entry index 2e18f3a3..a833de0f 100755 --- a/bin/omarchy-remove-launcher-entry +++ b/bin/omarchy-remove-launcher-entry @@ -20,12 +20,14 @@ if [[ $desktop_file_name != *.desktop ]]; then desktop_file_name="$desktop_file_name.desktop" fi +user_desktop_dirs=() desktop_dirs=() if [[ -n ${XDG_DATA_HOME-} ]]; then - desktop_dirs+=("$XDG_DATA_HOME/applications") + user_desktop_dirs+=("$XDG_DATA_HOME/applications") else - desktop_dirs+=("$HOME/.local/share/applications") + user_desktop_dirs+=("$HOME/.local/share/applications") fi +desktop_dirs+=("${user_desktop_dirs[@]}") if [[ -n ${XDG_DATA_DIRS-} ]]; then IFS=: read -ra data_dirs <<<"$XDG_DATA_DIRS" @@ -50,17 +52,35 @@ if [[ -z $desktop_file ]]; then exit 1 fi +is_user_desktop_file() { + local dir desktop_dir + + desktop_dir="${desktop_file%/*}" + for dir in "${user_desktop_dirs[@]}"; do + [[ $desktop_dir == $dir ]] && return 0 + done + + return 1 +} + desktop_name="${desktop_file##*/}" desktop_name="${desktop_name%.desktop}" exec_line="$(sed -n 's/^Exec=//p' "$desktop_file" | head -1)" if [[ $exec_line =~ omarchy-launch-webapp|omarchy-webapp-handler ]]; then - omarchy-webapp-remove "$desktop_name" + OMARCHY_REMOVE_NOTIFY=false omarchy-webapp-remove "$desktop_name" exit 0 fi if [[ $exec_line =~ (^|[[:space:]])(\$TERMINAL|xdg-terminal-exec)[[:space:]].*-e([[:space:]]|$) ]]; then - omarchy-tui-remove "$desktop_name" + OMARCHY_REMOVE_NOTIFY=false omarchy-tui-remove "$desktop_name" + exit 0 +fi + +if is_user_desktop_file; then + display_name="${entry_name:-$desktop_name}" + rm -f "$desktop_file" + update-desktop-database "${desktop_file%/*}" &>/dev/null || true exit 0 fi diff --git a/bin/omarchy-tui-remove b/bin/omarchy-tui-remove index c2c39d07..87dab9b8 100755 --- a/bin/omarchy-tui-remove +++ b/bin/omarchy-tui-remove @@ -36,4 +36,6 @@ fi icon_name=$(printf '%s\n' "$APP_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^[:alnum:]]\+/-/g; s/^-//; s/-$//') rm -f "$DESKTOP_DIR/$APP_NAME.desktop" rm -f "$ICON_DIR/$icon_name.png" "$ICON_DIR/$APP_NAME.png" "$OLD_ICON_DIR/$APP_NAME.png" -omarchy-notification-send -g  "TUI removed" "$APP_NAME" +if [[ ${OMARCHY_REMOVE_NOTIFY:-true} != "false" ]]; then + omarchy-notification-send -g  "TUI removed" "$APP_NAME" +fi diff --git a/bin/omarchy-webapp-remove b/bin/omarchy-webapp-remove index 92283286..9cf72c38 100755 --- a/bin/omarchy-webapp-remove +++ b/bin/omarchy-webapp-remove @@ -37,5 +37,7 @@ icon_name=$(printf '%s\n' "$APP_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^[: rm -f "$DESKTOP_DIR/$APP_NAME.desktop" rm -f "$ICON_DIR/$icon_name.png" "$ICON_DIR/$APP_NAME.png" "$OLD_ICON_DIR/$APP_NAME.png" -omarchy-notification-send -g  "Web app removed" "$APP_NAME" +if [[ ${OMARCHY_REMOVE_NOTIFY:-true} != "false" ]]; then + omarchy-notification-send -g  "Web app removed" "$APP_NAME" +fi update-desktop-database "$DESKTOP_DIR" &>/dev/null diff --git a/shell/plugins/launcher/Launcher.qml b/shell/plugins/launcher/Launcher.qml index 930b304f..a724a3d8 100644 --- a/shell/plugins/launcher/Launcher.qml +++ b/shell/plugins/launcher/Launcher.qml @@ -276,7 +276,6 @@ Item { var desktopId = String(entry.id || "") var name = root.entryName(entry) root.cancelDelete() - root.dismiss() Quickshell.execDetached([root.omarchyPath + "/bin/omarchy-remove-launcher-entry", desktopId, name]) } diff --git a/test/shell.d/launcher-remove-test.sh b/test/shell.d/launcher-remove-test.sh index 7eb93f6a..1025c19b 100755 --- a/test/shell.d/launcher-remove-test.sh +++ b/test/shell.d/launcher-remove-test.sh @@ -7,7 +7,7 @@ source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" tmp_dir="$(mktemp -d)" trap 'rm -rf "$tmp_dir"' EXIT -mkdir -p "$tmp_dir/data/applications" "$tmp_dir/bin" +mkdir -p "$tmp_dir/data/applications" "$tmp_dir/system/applications" "$tmp_dir/bin" write_fake_command() { local name="$1" @@ -15,7 +15,7 @@ write_fake_command() { cat >"$tmp_dir/bin/$name" <