| Index: third_party/xdg-utils/scripts/xdg-desktop-menu
|
| ===================================================================
|
| --- third_party/xdg-utils/scripts/xdg-desktop-menu (revision 0)
|
| +++ third_party/xdg-utils/scripts/xdg-desktop-menu (revision 0)
|
| @@ -0,0 +1,1264 @@
|
| +#!/bin/sh
|
| +#---------------------------------------------
|
| +# xdg-desktop-menu
|
| +#
|
| +# Utility script to install menu items on a Linux desktop.
|
| +# Refer to the usage() function below for usage.
|
| +#
|
| +# Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
|
| +# Copyright 2006, Jeremy White <jwhite@codeweavers.com>
|
| +#
|
| +# LICENSE:
|
| +#
|
| +# Permission is hereby granted, free of charge, to any person obtaining a
|
| +# copy of this software and associated documentation files (the "Software"),
|
| +# to deal in the Software without restriction, including without limitation
|
| +# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
| +# and/or sell copies of the Software, and to permit persons to whom the
|
| +# Software is furnished to do so, subject to the following conditions:
|
| +#
|
| +# The above copyright notice and this permission notice shall be included
|
| +# in all copies or substantial portions of the Software.
|
| +#
|
| +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
| +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
| +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
| +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
| +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
| +# OTHER DEALINGS IN THE SOFTWARE.
|
| +#
|
| +#---------------------------------------------
|
| +
|
| +manualpage()
|
| +{
|
| +cat << _MANUALPAGE
|
| +Name
|
| +
|
| +xdg-desktop-menu - command line tool for (un)installing desktop menu items
|
| +
|
| +Synopsis
|
| +
|
| +xdg-desktop-menu install [--noupdate] [--novendor] [--mode mode] directory-file
|
| +(s) desktop-file(s)
|
| +
|
| +xdg-desktop-menu uninstall [--noupdate] [--mode mode] directory-file(s)
|
| +desktop-file(s)
|
| +
|
| +xdg-desktop-menu forceupdate [--mode mode]
|
| +
|
| +xdg-desktop-menu { --help | --manual | --version }
|
| +
|
| +Description
|
| +
|
| +The xdg-desktop-menu program can be used to install new menu entries to the
|
| +desktop's application menu.
|
| +
|
| +The application menu works according to the XDG Desktop Menu Specification at
|
| +http://www.freedesktop.org/Standards/menu-spec
|
| +
|
| +Commands
|
| +
|
| +install
|
| +
|
| + Install one or more applications in a submenu of the desktop menu system.
|
| +
|
| + desktop-file: A desktop file represents a single menu entry in the menu.
|
| + Desktop files are defined by the freedesktop.org Desktop Entry
|
| + Specification. The most important aspects of *.desktop files are summarized
|
| + below.
|
| +
|
| + Menu entries can be added to the menu system in two different ways. They
|
| + can either be added to a predefined submenu in the menu system based on one
|
| + or more category keywords, or they can be added to a new submenu.
|
| +
|
| + To add a menu entry to a predefined submenu the desktop file that
|
| + represents the menu entry must have a Categories= entry that lists one or
|
| + more keywords. The menu item will be included in an appropriate submenu
|
| + based on the included keywords.
|
| +
|
| + To add menu items to a new submenu the desktop-files must be preceded by a
|
| + directory-file that describes the submenu. If multiple desktop-files are
|
| + specified, all entries will be added to the same menu. If entries are
|
| + installed to a menu that has been created with a previous call to
|
| + xdg-desktop-menu the entries will be installed in addition to any already
|
| + existing entries.
|
| +
|
| + directory-file: The *.directory file indicated by directory-file represents
|
| + a submenu. The directory file provides the name and icon for a submenu. The
|
| + name of the directory file is used to identify the submenu.
|
| +
|
| + If multiple directory files are provided each file will represent a submenu
|
| + within the menu that preceeds it, creating a nested menu hierarchy
|
| + (sub-sub-menus). The menu entries themselves will be added to the last
|
| + submenu.
|
| +
|
| + Directory files follow the syntax defined by the freedesktop.org Desktop
|
| + Entry Specification.
|
| +
|
| +uninstall
|
| +
|
| + Remove applications or submenus from the desktop menu system previously
|
| + installed with xdg-desktop-menu install.
|
| +
|
| + A submenu and the associated directory file is only removed when the
|
| + submenu no longer contains any menu entries.
|
| +
|
| +forceupdate
|
| +
|
| + Force an update of the menu system.
|
| +
|
| + This command is only useful if the last call to xdg-desktop-menu included
|
| + the --noupdate option.
|
| +
|
| +Options
|
| +
|
| +--noupdate
|
| + Postpone updating the menu system. If multiple updates to the menu system
|
| + are made in sequence this flag can be used to indicate that additional
|
| + changes will follow and that it is not necassery to update the menu system
|
| + right away.
|
| +--novendor
|
| +
|
| + Normally, xdg-desktop-menu checks to ensure that any *.directory and
|
| + *.desktop files to be installed has a vendor prefix. This option can be
|
| + used to disable that check.
|
| +
|
| + A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated
|
| + with a dash ("-"). Companies and organizations are encouraged to use a word
|
| + or phrase, preferably the organizations name, for which they hold a
|
| + trademark as their vendor prefix. The purpose of the vendor prefix is to
|
| + prevent name conflicts.
|
| +
|
| +--mode mode
|
| +
|
| + mode can be user or system. In user mode the file is (un)installed for the
|
| + current user only. In system mode the file is (un)installed for all users
|
| + on the system. Usually only root is allowed to install in system mode.
|
| +
|
| + The default is to use system mode when called by root and to use user mode
|
| + when called by a non-root user.
|
| +
|
| +--help
|
| + Show command synopsis.
|
| +--manual
|
| + Show this manualpage.
|
| +--version
|
| + Show the xdg-utils version information.
|
| +
|
| +Desktop Files
|
| +
|
| +An application item in the application menu is represented by a *.desktop file.
|
| +A *.desktop file consists of a [Desktop Entry] header followed by several Key=
|
| +Value lines.
|
| +
|
| +A *.desktop file can provide a name and description for an application in
|
| +several different languages. This is done by adding a language code as used by
|
| +LC_MESSAGES in square brackets behind the Key. This way one can specify
|
| +different values for the same Key depending on the currently selected language.
|
| +
|
| +The following keys are often used:
|
| +
|
| +Value=1.0
|
| + This is a mandatory field to indicate that the *.desktop file follows the
|
| + 1.0 version of the specification.
|
| +Type=Application
|
| + This is a mandatory field that indicates that the *.desktop file describes
|
| + an application launcher.
|
| +Name=Application Name
|
| + The name of the application. For example Mozilla
|
| +GenericName=Generic Name
|
| + A generic description of the application. For example Web Browser
|
| +Comment=Comment
|
| + Optional field to specify a tooltip for the application. For example Visit
|
| + websites on the Internet
|
| +Icon=Icon File
|
| + The icon to use for the application. This can either be an absolute path to
|
| + an image file or an icon-name. If an icon-name is provided an image lookup
|
| + by name is done in the user's current icon theme. The xdg-icon-resource
|
| + command can be used to install image files into icon themes. The advantage
|
| + of using an icon-name instead of an absolute path is that with an icon-name
|
| + the application icon can be provided in several different sizes as well as
|
| + in several differently themed styles.
|
| +Exec=Command Line
|
| + The command line to start the application. If the application can open
|
| + files the %f placeholder should be specified. When a file is dropped on the
|
| + application launcher the %f is replaced with the file path of the dropped
|
| + file. If multiple files can be specified on the command line the %F
|
| + placeholder should be used instead of %f. If the application is able to
|
| + open URLs in addition to local files then %u or %U can be used instead of
|
| + %f or %F.
|
| +Categories=Categories
|
| +
|
| + A list of categories separated by semi-colons. A category is a keyword that
|
| + describes and classifies the application. By default applications are
|
| + organized in the application menu based on category. When menu entries are
|
| + explicitly assigned to a new submenu it is not necassery to list any
|
| + categories.
|
| +
|
| + When using categories it is recommended to include one of the following
|
| + categories: AudioVideo, Development, Education, Game, Graphics, Network,
|
| + Office, Settings, System, Utility.
|
| +
|
| + See Appendix A of the XDG Desktop Menu Specification for information about
|
| + additional categories. http://standards.freedesktop.org/menu-spec/
|
| + menu-spec-1.0.html
|
| +
|
| +MimeType=Mimetypes
|
| + A list of mimetypes separated by semi-colons. This field is used to
|
| + indicate which file types the application is able to open.
|
| +
|
| +For a complete oveview of the *.desktop file format please visit http://
|
| +www.freedesktop.org/wiki/Standards/desktop-entry-spec
|
| +
|
| +Directory Files
|
| +
|
| +The appearance of submenu in the application menu is provided by a *.directory
|
| +file. In particular it provides the title of the submenu and a possible icon. A
|
| +*.directory file consists of a [Desktop Entry] header followed by several Key=
|
| +Value lines.
|
| +
|
| +A *.directory file can provide a title (name) for the submenu in several
|
| +different languages. This is done by adding a language code as used by
|
| +LC_MESSAGES in square brackets behind the Key. This way one can specify
|
| +different values for the same Key depending on the currently selected language.
|
| +
|
| +The following keys are relevqnt for submenus:
|
| +
|
| +Value=1.0
|
| + This is a mandatory field to indicate that the *.directory file follows the
|
| + 1.0 version of the Desktop Entry specification.
|
| +Type=Directory
|
| + This is a mandatory field that indicates that the *.directory file
|
| + describes a submenu.
|
| +Name=Menu Name
|
| + The title of submenu. For example Mozilla
|
| +Comment=Comment
|
| + Optional field to specify a tooltip for the submenu.
|
| +Icon=Icon File
|
| + The icon to use for the submenu. This can either be an absolute path to an
|
| + image file or an icon-name. If an icon-name is provided an image lookup by
|
| + name is done in the user's current icon theme. The xdg-icon-resource
|
| + command can be used to install image files into icon themes. The advantage
|
| + of using an icon-name instead of an absolute path is that with an icon-name
|
| + the submenu icon can be provided in several different sizes as well as in
|
| + several differently themed styles.
|
| +
|
| +Environment Variables
|
| +
|
| +xdg-desktop-menu honours the following environment variables:
|
| +
|
| +XDG_UTILS_DEBUG_LEVEL
|
| + Setting this environment variable to a non-zero numerical value makes
|
| + xdg-desktop-menu do more verbose reporting on stderr. Setting a higher
|
| + value increases the verbosity.
|
| +XDG_UTILS_INSTALL_MODE
|
| + This environment variable can be used by the user or administrator to
|
| + override the installation mode. Valid values are user and system.
|
| +
|
| +Exit Codes
|
| +
|
| +An exit code of 0 indicates success while a non-zero exit code indicates
|
| +failure. The following failure codes can be returned:
|
| +
|
| +1
|
| + Error in command line syntax.
|
| +2
|
| + One of the files passed on the command line did not exist.
|
| +3
|
| + A required tool could not be found.
|
| +4
|
| + The action failed.
|
| +5
|
| + No permission to read one of the files passed on the command line.
|
| +
|
| +See Also
|
| +
|
| +xdg-desktop-icon(1), xdg-icon-resource(1), xdg-mime(1)
|
| +
|
| +Examples
|
| +
|
| +The company ShinyThings Inc. has developed an application named "WebMirror" and
|
| +would like to add it to the application menu. The company will use
|
| +"shinythings" as its vendor id. In order to add the application to the menu
|
| +there needs to be a .desktop file with a suitable Categories entry:
|
| +
|
| +shinythings-webmirror.desktop:
|
| +
|
| + [Desktop Entry]
|
| + Encoding=UTF-8
|
| + Type=Application
|
| +
|
| + Exec=webmirror
|
| + Icon=webmirror
|
| +
|
| + Name=WebMirror
|
| + Name[nl]=WebSpiegel
|
| +
|
| + Categories=Network;WebDevelopment;
|
| +
|
| +Now the xdg-desktop-menu tool can be used to add the
|
| +shinythings-webmirror.desktop file to the desktop application menu:
|
| +
|
| +xdg-desktop-menu install ./shinythings-webmirror.desktop
|
| +
|
| +Note that for the purpose of this example the menu items are available in two
|
| +languages, English and Dutch. The language code for Dutch is nl.
|
| +
|
| +In the next example the company ShinyThings Inc. will add its own submenu to
|
| +the desktop application menu consisting of a "WebMirror" menu item and a
|
| +"WebMirror Admin Tool" menu item.
|
| +
|
| +First the company needs to create two .desktop files that describe the two menu
|
| +items. Since the items are to be added to a new submenu it is not necassery to
|
| +include a Categories= line:
|
| +
|
| +shinythings-webmirror.desktop:
|
| +
|
| + [Desktop Entry]
|
| + Encoding=UTF-8
|
| + Type=Application
|
| +
|
| + Exec=webmirror
|
| + Icon=shinythings-webmirror
|
| +
|
| + Name=WebMirror
|
| + Name[nl]=WebSpiegel
|
| +
|
| +
|
| +shinythings-webmirror-admin.desktop:
|
| +
|
| + [Desktop Entry]
|
| + Encoding=UTF-8
|
| + Type=Application
|
| +
|
| + Exec=webmirror-admintool
|
| + Icon=shinythings-webmirror-admintool
|
| +
|
| + Name=WebMirror Admin Tool
|
| + Name[nl]=WebSpiegel Administratie Tool
|
| +
|
| +In addition a .directory file needs to be created to provide a title and icon
|
| +for the sub-menu itself:
|
| +
|
| +shinythings-webmirror.directory:
|
| +
|
| + [Desktop Entry]
|
| + Encoding=UTF-8
|
| +
|
| + Icon=shinythings-webmirror-menu
|
| +
|
| + Name=WebMirror
|
| + Name[nl]=WebSpiegel
|
| +
|
| +These file can now be installed with:
|
| +
|
| +xdg-desktop-menu install ./shinythings-webmirror.directory \
|
| + ./shinythings-webmirror.desktop ./shinythings-webmirror-admin.desktop
|
| +
|
| +The menu entries could also be installed one by one:
|
| +
|
| +xdg-desktop-menu install --noupdate ./shinythings-webmirror.directory \
|
| + ./shinythings-webmirror.desktop
|
| +xdg-desktop-menu install --noupdate ./shinythings-webmirror.directory \
|
| + ./shinythings-webmirror-admin.desktop
|
| +xdg-desktop-menu forceupdate
|
| +
|
| +Although the result is the same it is slightly more efficient to install all
|
| +files at the same time.
|
| +
|
| +The *.desktop and *.directory files reference icons with the names webmirror,
|
| +webmirror-admin and webmirror-menu which should also be installed. In this
|
| +example the icons are installed in two different sizes, once with a size of
|
| +22x22 pixels and once with a size of 64x64 pixels:
|
| +
|
| +xdg-icon-resource install --size 22 ./wmicon-22.png shinythings-webmirror
|
| +xdg-icon-resource install --size 22 ./wmicon-menu-22.png shinythings-webmirror-menu
|
| +xdg-icon-resource install --size 22 ./wmicon-admin-22.png shinythings-webmirror-admin
|
| +xdg-icon-resource install --size 64 ./wmicon-64.png shinythings-webmirror
|
| +xdg-icon-resource install --size 64 ./wmicon-menu-64.png shinythings-webmirror-menu
|
| +xdg-icon-resource install --size 64 ./wmicon-admin-64.png shinythings-webmirror-admin
|
| +
|
| +_MANUALPAGE
|
| +}
|
| +
|
| +usage()
|
| +{
|
| +cat << _USAGE
|
| +xdg-desktop-menu - command line tool for (un)installing desktop menu items
|
| +
|
| +Synopsis
|
| +
|
| +xdg-desktop-menu install [--noupdate] [--novendor] [--mode mode] directory-file
|
| +(s) desktop-file(s)
|
| +
|
| +xdg-desktop-menu uninstall [--noupdate] [--mode mode] directory-file(s)
|
| +desktop-file(s)
|
| +
|
| +xdg-desktop-menu forceupdate [--mode mode]
|
| +
|
| +xdg-desktop-menu { --help | --manual | --version }
|
| +
|
| +_USAGE
|
| +}
|
| +
|
| +#@xdg-utils-common@
|
| +
|
| +#----------------------------------------------------------------------------
|
| +# Common utility functions included in all XDG wrapper scripts
|
| +#----------------------------------------------------------------------------
|
| +
|
| +DEBUG()
|
| +{
|
| + [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
|
| + [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
|
| + shift
|
| + echo "$@" >&2
|
| +}
|
| +
|
| +#-------------------------------------------------------------
|
| +# Exit script on successfully completing the desired operation
|
| +
|
| +exit_success()
|
| +{
|
| + if [ $# -gt 0 ]; then
|
| + echo "$@"
|
| + echo
|
| + fi
|
| +
|
| + exit 0
|
| +}
|
| +
|
| +
|
| +#-----------------------------------------
|
| +# Exit script on malformed arguments, not enough arguments
|
| +# or missing required option.
|
| +# prints usage information
|
| +
|
| +exit_failure_syntax()
|
| +{
|
| + if [ $# -gt 0 ]; then
|
| + echo "xdg-desktop-menu: $@" >&2
|
| + echo "Try 'xdg-desktop-menu --help' for more information." >&2
|
| + else
|
| + usage
|
| + echo "Use 'man xdg-desktop-menu' or 'xdg-desktop-menu --manual' for additional info."
|
| + fi
|
| +
|
| + exit 1
|
| +}
|
| +
|
| +#-------------------------------------------------------------
|
| +# Exit script on missing file specified on command line
|
| +
|
| +exit_failure_file_missing()
|
| +{
|
| + if [ $# -gt 0 ]; then
|
| + echo "xdg-desktop-menu: $@" >&2
|
| + fi
|
| +
|
| + exit 2
|
| +}
|
| +
|
| +#-------------------------------------------------------------
|
| +# Exit script on failure to locate necessary tool applications
|
| +
|
| +exit_failure_operation_impossible()
|
| +{
|
| + if [ $# -gt 0 ]; then
|
| + echo "xdg-desktop-menu: $@" >&2
|
| + fi
|
| +
|
| + exit 3
|
| +}
|
| +
|
| +#-------------------------------------------------------------
|
| +# Exit script on failure returned by a tool application
|
| +
|
| +exit_failure_operation_failed()
|
| +{
|
| + if [ $# -gt 0 ]; then
|
| + echo "xdg-desktop-menu: $@" >&2
|
| + fi
|
| +
|
| + exit 4
|
| +}
|
| +
|
| +#------------------------------------------------------------
|
| +# Exit script on insufficient permission to read a specified file
|
| +
|
| +exit_failure_file_permission_read()
|
| +{
|
| + if [ $# -gt 0 ]; then
|
| + echo "xdg-desktop-menu: $@" >&2
|
| + fi
|
| +
|
| + exit 5
|
| +}
|
| +
|
| +#------------------------------------------------------------
|
| +# Exit script on insufficient permission to read a specified file
|
| +
|
| +exit_failure_file_permission_write()
|
| +{
|
| + if [ $# -gt 0 ]; then
|
| + echo "xdg-desktop-menu: $@" >&2
|
| + fi
|
| +
|
| + exit 6
|
| +}
|
| +
|
| +check_input_file()
|
| +{
|
| + if [ ! -e "$1" ]; then
|
| + exit_failure_file_missing "file '$1' does not exist"
|
| + fi
|
| + if [ ! -r "$1" ]; then
|
| + exit_failure_file_permission_read "no permission to read file '$1'"
|
| + fi
|
| +}
|
| +
|
| +check_vendor_prefix()
|
| +{
|
| + file_label="$2"
|
| + [ -n "$file_label" ] || file_label="filename"
|
| + file=`basename "$1"`
|
| + case "$file" in
|
| + [a-zA-Z]*-*)
|
| + return
|
| + ;;
|
| + esac
|
| +
|
| + echo "xdg-desktop-menu: $file_label '$file' does not have a proper vendor prefix" >&2
|
| + echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2
|
| + echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2
|
| + echo "Use --novendor to override or 'xdg-desktop-menu --manual' for additional info." >&2
|
| + exit 1
|
| +}
|
| +
|
| +check_output_file()
|
| +{
|
| + # if the file exists, check if it is writeable
|
| + # if it does not exists, check if we are allowed to write on the directory
|
| + if [ -e "$1" ]; then
|
| + if [ ! -w "$1" ]; then
|
| + exit_failure_file_permission_write "no permission to write to file '$1'"
|
| + fi
|
| + else
|
| + DIR=`dirname "$1"`
|
| + if [ ! -w "$DIR" -o ! -x "$DIR" ]; then
|
| + exit_failure_file_permission_write "no permission to create file '$1'"
|
| + fi
|
| + fi
|
| +}
|
| +
|
| +#----------------------------------------
|
| +# Checks for shared commands, e.g. --help
|
| +
|
| +check_common_commands()
|
| +{
|
| + while [ $# -gt 0 ] ; do
|
| + parm="$1"
|
| + shift
|
| +
|
| + case "$parm" in
|
| + --help)
|
| + usage
|
| + echo "Use 'man xdg-desktop-menu' or 'xdg-desktop-menu --manual' for additional info."
|
| + exit_success
|
| + ;;
|
| +
|
| + --manual)
|
| + manualpage
|
| + exit_success
|
| + ;;
|
| +
|
| + --version)
|
| + echo "xdg-desktop-menu 1.0.1"
|
| + exit_success
|
| + ;;
|
| + esac
|
| + done
|
| +}
|
| +
|
| +check_common_commands "$@"
|
| +
|
| +[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
|
| +if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
|
| + # Be silent
|
| + xdg_redirect_output=" > /dev/null 2> /dev/null"
|
| +else
|
| + # All output to stderr
|
| + xdg_redirect_output=" >&2"
|
| +fi
|
| +
|
| +#--------------------------------------
|
| +# Checks for known desktop environments
|
| +# set variable DE to the desktop environments name, lowercase
|
| +
|
| +detectDE()
|
| +{
|
| + if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
|
| + elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
|
| + elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
|
| + fi
|
| +}
|
| +
|
| +#----------------------------------------------------------------------------
|
| +# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4
|
| +# It also always returns 1 in KDE 3.4 and earlier
|
| +# Simply return 0 in such case
|
| +
|
| +kfmclient_fix_exit_code()
|
| +{
|
| + version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep KDE`
|
| + major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'`
|
| + minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'`
|
| + release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
|
| + test "$major" -gt 3 && return $1
|
| + test "$minor" -gt 5 && return $1
|
| + test "$release" -gt 4 && return $1
|
| + return 0
|
| +}
|
| +
|
| +update_desktop_database()
|
| +{
|
| +# echo Update desktop database: $mode
|
| + if [ "$mode" = "system" ] ; then
|
| + for x in `echo $PATH | sed 's/:/ /g'` /opt/gnome/bin; do
|
| + if [ -x $x/update-desktop-database ] ; then
|
| + DEBUG 1 "Running $x/update-desktop-database"
|
| + eval '$x/update-desktop-database'$xdg_redirect_output
|
| + return
|
| + fi
|
| + done
|
| + fi
|
| +}
|
| +
|
| +fixup_mandriva_categories()
|
| +{
|
| + DEBUG 1 "fixup_mandriva_categories $1"
|
| + awk '
|
| +BEGIN {
|
| + xlat["AudioVideo"]="X-Mandrakelinux-Multimedia;X-MandrivaLinux-Multimedia"
|
| + xlat["Development"]="X-Mandrakelinux-MoreApplications-Development;X-MandrivaLinux-MoreApplications-Development"
|
| + xlat["Education"]="X-Mandrakelinux-MoreApplications;X-MandrivaLinux-MoreApplications-Education"
|
| + xlat["Game"]="X-Mandrakelinux-MoreApplications;X-MandrivaLinux-MoreApplications-Games"
|
| + xlat["Graphics"]="X-Mandrakelinux-Multimedia-Graphics"
|
| + xlat["Network"]="X-Mandrakelinux-Internet;X-MandrivaLinux-Internet"
|
| + xlat["Office"]="X-Mandrakelinux-Office;X-MandrivaLinux-Office"
|
| + xlat["System"]="X-Mandrakelinux-System;X-MandrivaLinux-System"
|
| + xlat["Utility"]="X-Mandrakelinux-Office-Accessories;X-MandrivaLinux-Office-Accessories"
|
| +}
|
| +{
|
| + if (match($0,/Categories=/)) {
|
| + split(substr($0,RSTART+11),categories,";")
|
| + result=""
|
| + for (n in categories)
|
| + {
|
| + if (categories[n] in xlat)
|
| + categories[n]=categories[n] ";" xlat[categories[n]]
|
| + if (categories[n])
|
| + result=result categories[n] ";"
|
| + }
|
| + print "Categories=" result
|
| + }
|
| + else
|
| + {
|
| + print $0
|
| + }
|
| +}' $1 > $1.new
|
| + mv $1.new $1
|
| +}
|
| +
|
| +# Make application $1/$2 the default for all the mimetypes it support,
|
| +# iff such mimetype didn't had a default application already.
|
| +# $1 Install dir for desktop file
|
| +# $2 base name of desktop file
|
| +make_lazy_default()
|
| +{
|
| + local mimetypes
|
| + local xdg_user_dir
|
| + local xdg_default_dirs
|
| +
|
| + DEBUG 1 "make_lazy_default $1/$2"
|
| + mimetypes=`awk '
|
| +{
|
| + if (match($0,/MimeType=/)) {
|
| + split(substr($0,RSTART+9),mimetypes,";")
|
| + for (n in mimetypes)
|
| + {
|
| + if (mimetypes[n])
|
| + print mimetypes[n]
|
| + }
|
| + }
|
| +}' "$1/$2" 2> /dev/null`
|
| +
|
| + for MIME in $mimetypes ; do
|
| + xdg_default_dirs="$XDG_DATA_DIRS"
|
| + [ -n "$xdg_default_dirs" ] || xdg_default_dirs=/usr/local/share/:/usr/share/
|
| + if [ x"$mode" = x"user" ] ; then
|
| + xdg_user_dir="$XDG_DATA_HOME"
|
| + [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
|
| + xdg_default_dirs="$xdg_user_dir:$xdg_default_dirs"
|
| + fi
|
| + local default_app
|
| + for x in `echo "$xdg_default_dirs" | sed 's/:/ /g'`; do
|
| + DEBUG 2 "Checking $x/applications/defaults.list"
|
| + default_app=`grep "$MIME=" $x/applications/defaults.list 2> /dev/null | cut -d '=' -f 2`
|
| + if [ -n "$default_app" ] ; then
|
| + DEBUG 2 "Found default apps for $MIME: $default_app"
|
| + default_app="$default_app;"
|
| + break;
|
| + fi
|
| + done
|
| + DEBUG 2 "Current default apps for $MIME: $default_app"
|
| + if echo "$default_app" | grep "$2" > /dev/null 2> /dev/null; then
|
| + # App already listed as default
|
| + continue;
|
| + fi
|
| + default_file="$1/defaults.list"
|
| + DEBUG 1 "Updating $default_file"
|
| + grep -v "$MIME=" $default_file > ${default_file}.new 2> /dev/null
|
| + if ! grep "[Default Applications]" ${default_file}.new > /dev/null; then
|
| + echo "[Default Applications]" >> ${default_file}.new
|
| + fi
|
| + echo $MIME="$default_app$2" >> ${default_file}.new
|
| + mv ${default_file}.new $default_file
|
| + done
|
| +}
|
| +
|
| +update_submenu()
|
| +{
|
| + DEBUG 1 "update_submenu $1"
|
| + menu_file="$1"
|
| +
|
| + xdg_dir_name=menus
|
| + xdg_user_dir="$XDG_CONFIG_HOME"
|
| + [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.config"
|
| + xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
|
| +
|
| + xdg_system_dirs="$XDG_CONFIG_DIRS"
|
| + [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/etc/xdg
|
| + xdg_global_dir=
|
| + for x in `echo $xdg_system_dirs | sed 's/:/ /g'` ; do
|
| + if [ -w $x/$xdg_dir_name ] ; then
|
| + xdg_global_dir="$x/$xdg_dir_name"
|
| + break
|
| + fi
|
| + done
|
| + xdg_user_dir="$xdg_user_dir/applications-merged"
|
| + xdg_global_dir="$xdg_global_dir/applications-merged"
|
| +
|
| + DEBUG 3 "Install locations for *.menu file:"
|
| + DEBUG 3 "xdg_user_dir: $xdg_user_dir"
|
| + DEBUG 3 "xdg_global_dir: $xdg_global_dir"
|
| + DEBUG 3 "kde_user_dir: $kde_user_dir"
|
| + DEBUG 3 "kde_global_dir: $kde_global_dir"
|
| + DEBUG 3 "gnome_user_dir: $gnome_user_dir"
|
| + DEBUG 3 "gnome_global_dir: $gnome_global_dir"
|
| +
|
| + if [ x"$mode" = x"user" ] ; then
|
| + xdg_dir="$xdg_user_dir"
|
| + kde_dir="$kde_user_dir"
|
| + gnome_dir="$gnome_user_dir"
|
| + my_umask=077
|
| + my_chmod=0600
|
| + else
|
| + xdg_dir="$xdg_global_dir"
|
| + kde_dir="$kde_global_dir"
|
| + gnome_dir="$gnome_global_dir"
|
| + my_umask=022
|
| + my_chmod=0644
|
| + if [ -z "${xdg_dir}${kde_dir}${gnome_dir}" ] ; then
|
| + exit_failure_operation_impossible "No writable system menu directory found."
|
| + fi
|
| + fi
|
| +
|
| + if [ -z "$menu_file" ] ; then
|
| + # Work around for SUSE/gnome 2.12 to pick up new ~/.local/share/applications
|
| + save_umask=`umask`
|
| + umask $my_umask
|
| +
|
| + mkdir -p $xdg_dir
|
| + touch $xdg_dir/xdg-desktop-menu-dummy.menu
|
| +
|
| + umask $save_umask
|
| + return
|
| + fi
|
| +
|
| + if [ $action = "install" -a -f "/etc/xdg/menus/gnome-applications.menu" ] ; then
|
| + # Work around for Debian Gnome
|
| + gnome_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/gnome-applications-merged^'`
|
| + if [ ! -e "$gnome_xdg_dir" ] ; then
|
| + DEBUG 1 "Debian Workaround: Link '$xdg_dir' to '$gnome_xdg_dir'"
|
| + mkdir -p `dirname "$gnome_xdg_dir"`
|
| + eval 'ln -s "applications-merged" "$gnome_xdg_dir"'$xdg_redirect_output
|
| + fi
|
| + fi
|
| + if [ $action = "install" -a -f "/etc/mandrake-release" ] ; then
|
| + # Work around for Mandriva 2006
|
| + mandrake_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/applications-mdk-merged^'`
|
| + if [ ! -e "$mandrake_xdg_dir" ] ; then
|
| + DEBUG 1 "Mandriva Workaround: Link '$xdg_dir' to '$mandrake_xdg_dir'"
|
| + mkdir -p `dirname "$mandrake_xdg_dir"`
|
| + eval 'ln -s "applications-merged" "$mandrake_xdg_dir"'$xdg_redirect_output
|
| + fi
|
| + fi
|
| + if [ $action = "install" -a x"$mode" = x"user" -a -d "/etc/xdg/menus/kde-applications-merged" ] ; then
|
| + # Work around for Fedora Core 5 + patched KDE
|
| + kde_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/kde-applications-merged^'`
|
| + if [ ! -e "$kde_xdg_dir" ] ; then
|
| + DEBUG 1 "Fedora Workaround: Link '$xdg_dir' to '$kde_xdg_dir'"
|
| + mkdir -p `dirname "$kde_xdg_dir"`
|
| + eval 'ln -s "applications-merged" "$kde_xdg_dir"'$xdg_redirect_output
|
| + fi
|
| + fi
|
| + if [ $action = "install" -a x"$mode" = x"system" -a -d "/etc/xdg/menus/kde-applications-merged" -a ! -d "/etc/xdg/menus/applications-merged" ] ; then
|
| + # Work around for Kubuntu 6.06
|
| + kde_xdg_dir=`echo "$xdg_dir" | sed -e 's^/applications-merged^/kde-applications-merged^'`
|
| + DEBUG 1 "Kubuntu Workaround: Link '$xdg_dir' to 'kde-applications-merged'"
|
| + eval 'ln -s "kde-applications-merged" "$xdg_dir"'$xdg_redirect_output
|
| + fi
|
| +
|
| + orig_menu_file=$xdg_dir/$menu_file
|
| +
|
| + DEBUG 1 "Updating $orig_menu_file ($action)"
|
| +
|
| + test "${TMPDIR+set}" = set || TMPDIR=/tmp
|
| + tmpfile=`mktemp $TMPDIR/tmp.XXXXXXXXXX`
|
| + orig_desktop_files=
|
| + if [ -r "$orig_menu_file" ] ; then
|
| + awk '
|
| +# List all files within <Filename> tags
|
| +BEGIN {
|
| + RS="<"
|
| +}
|
| +/^Filename/ {
|
| + if (match($0,/>/)) {
|
| + print substr($0,RSTART+1)
|
| + }
|
| +}' $orig_menu_file > $tmpfile
|
| + fi
|
| +
|
| + orig_desktop_files=`cat $tmpfile`
|
| + new_desktop_files=
|
| + if [ $action = "install" ] ; then
|
| + for desktop_file in $desktop_files; do
|
| + basefile=`basename $desktop_file`
|
| + if ! grep '^'$basefile'$' $tmpfile > /dev/null 2> /dev/null ; then
|
| + # Append
|
| + echo "$basefile" >> $tmpfile
|
| + fi
|
| + done
|
| + new_desktop_files=`cat $tmpfile`
|
| + fi
|
| + if [ $action = "uninstall" ] ; then
|
| + echo > $tmpfile
|
| + for desktop_file in $desktop_files; do
|
| + echo "$desktop_file" >> $tmpfile
|
| + done
|
| + # Files to uninstall are listed in $tmpfile
|
| + # Existing files are in $orig_desktop_files
|
| + for desktop_file in $orig_desktop_files; do
|
| + if ! grep '^'$desktop_file'$' $tmpfile > /dev/null 2> /dev/null; then
|
| + # Keep this file, it's not in the uninstall list
|
| + new_desktop_files="$new_desktop_files $desktop_file"
|
| + fi
|
| + done
|
| + fi
|
| + rm -f "$tmpfile"
|
| +
|
| + DEBUG 3 "Files to list in $menu_file: $new_desktop_files"
|
| +
|
| + if [ -n "$new_desktop_files" ] ; then
|
| + # Install/update
|
| + test "${TMPDIR+set}" = set || TMPDIR=/tmp
|
| + tmpfile=`mktemp $TMPDIR/tmp.XXXXXXXXXX`
|
| + (
|
| + echo '<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"'
|
| + echo ' "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">'
|
| + echo '<!-- Do not edit manually - generated and managed by xdg-desktop-menu -->'
|
| + echo '<Menu>'
|
| + echo ' <Name>Applications</Name>'
|
| +
|
| + for desktop_file in $directory_files; do
|
| + basefile=`basename $desktop_file`
|
| + basefilename=`echo "$basefile"|cut -d '.' -f 1`
|
| + echo "<Menu>"
|
| + echo " <Name>$basefilename</Name>"
|
| + echo " <Directory>$basefile</Directory>"
|
| + done
|
| +
|
| + echo " <Include>"
|
| + for desktop_file in $new_desktop_files; do
|
| + echo " <Filename>$desktop_file</Filename>"
|
| + done
|
| + echo " </Include>"
|
| +
|
| + for desktop_file in $directory_files; do
|
| + echo "</Menu>"
|
| + done
|
| +
|
| + echo '</Menu>'
|
| + ) > $tmpfile
|
| + chmod $my_chmod $tmpfile
|
| +
|
| + save_umask=`umask`
|
| + umask $my_umask
|
| +
|
| + mkdir -p $xdg_dir
|
| + eval 'cp $tmpfile $xdg_dir/$menu_file'$xdg_redirect_output
|
| +
|
| + umask $save_umask
|
| + rm -f "$tmpfile"
|
| + else
|
| + # Uninstall
|
| + rm -f $xdg_dir/$menu_file
|
| + fi
|
| +
|
| + # Uninstall .directory files only if no longer referenced
|
| + if [ $action = "uninstall" ] ; then
|
| + test "${TMPDIR+set}" = set || TMPDIR=/tmp
|
| + tmpfile=`mktemp $TMPDIR/tmp.XXXXXXXXXX`
|
| + for menu_file in $xdg_dir/*; do
|
| + if grep 'generated and managed by xdg-desktop-menu' $menu_file > /dev/null 2> /dev/null; then
|
| + awk '
|
| +# List all files within <Directory> tags
|
| +BEGIN {
|
| + RS="<"
|
| +}
|
| +/^Directory/ {
|
| + if (match($0,/>/)) {
|
| + print substr($0,RSTART+1)
|
| + }
|
| +}' $menu_file >> $tmpfile
|
| + fi
|
| + done
|
| + orig_directory_files="$directory_files"
|
| + directory_files=
|
| + for desktop_file in $orig_directory_files; do
|
| + if ! grep '^'$desktop_file'$' $tmpfile > /dev/null 2> /dev/null; then
|
| + # No longer in use, safe to delete
|
| + directory_files="$directory_files $desktop_file"
|
| + fi
|
| + done
|
| + rm -f "$tmpfile"
|
| + fi
|
| +}
|
| +
|
| +
|
| +[ x"$1" != x"" ] || exit_failure_syntax
|
| +
|
| +mode=
|
| +action=
|
| +update=yes
|
| +desktop_files=
|
| +directory_files=
|
| +
|
| +case $1 in
|
| + install)
|
| + action=install
|
| + ;;
|
| +
|
| + uninstall)
|
| + action=uninstall
|
| + ;;
|
| +
|
| + forceupdate)
|
| + action=forceupdate
|
| + ;;
|
| +
|
| + *)
|
| + exit_failure_syntax "unknown command '$1'"
|
| + ;;
|
| +esac
|
| +
|
| +shift
|
| +
|
| +vendor=true
|
| +while [ $# -gt 0 ] ; do
|
| + parm="$1"
|
| + shift
|
| +
|
| + case "$parm" in
|
| + --noupdate)
|
| + update=no
|
| + ;;
|
| +
|
| + --mode)
|
| + if [ -z "$1" ] ; then
|
| + exit_failure_syntax "mode argument missing for --mode"
|
| + fi
|
| + case "$1" in
|
| + user)
|
| + mode="user"
|
| + ;;
|
| +
|
| + system)
|
| + mode="system"
|
| + ;;
|
| +
|
| + *)
|
| + exit_failure_syntax "unknown mode '$1'"
|
| + ;;
|
| + esac
|
| + shift
|
| + ;;
|
| +
|
| + --novendor)
|
| + vendor=false
|
| + ;;
|
| +
|
| + -*)
|
| + exit_failure_syntax "unexpected option '$parm'"
|
| + ;;
|
| +
|
| + *)
|
| + if [ "$action" = "install" ] ; then
|
| + check_input_file "$parm"
|
| + fi
|
| + case "$parm" in
|
| + *.directory)
|
| + if [ -n "$desktop_files" ] ; then
|
| + exit_failure_syntax "'$parm' must preceed any *.desktop file"
|
| + fi
|
| + directory_files="$directory_files $parm"
|
| + ;;
|
| + *.desktop)
|
| + desktop_files="$desktop_files $parm"
|
| + ;;
|
| + *)
|
| + exit_failure_syntax "file to $action must be a *.directory or *.desktop file"
|
| + ;;
|
| + esac
|
| + ;;
|
| + esac
|
| +done
|
| +
|
| +# Shouldn't happen
|
| +if [ -z "$action" ] ; then
|
| + exit_failure_syntax "command argument missing"
|
| +fi
|
| +
|
| +if [ -n "$XDG_UTILS_INSTALL_MODE" ] ; then
|
| + if [ "$XDG_UTILS_INSTALL_MODE" = "system" ] ; then
|
| + mode="system"
|
| + elif [ "$XDG_UTILS_INSTALL_MODE" = "user" ] ; then
|
| + mode="user"
|
| + fi
|
| +fi
|
| +
|
| +if [ -z "$mode" ] ; then
|
| + if [ `whoami` = "root" ] ; then
|
| + mode="system"
|
| + else
|
| + mode="user"
|
| + fi
|
| +fi
|
| +
|
| +if [ x"$action" = x"forceupdate" ] ; then
|
| + update_desktop_database
|
| + exit_success
|
| +fi
|
| +
|
| +if [ -z "$desktop_files" ] ; then
|
| + exit_failure_syntax "desktop-file argument missing"
|
| +fi
|
| +
|
| +menu_name=
|
| +for desktop_file in $directory_files; do
|
| + if [ "$vendor" = "true" -a "$action" = "install" ] ; then
|
| + check_vendor_prefix "$desktop_file"
|
| + fi
|
| +
|
| + basefilename=`basename "$desktop_file"|cut -d '.' -f 1`
|
| + if [ -z "$menu_name" ] ; then
|
| + menu_name="$basefilename"
|
| + else
|
| + menu_name="$menu_name-$basefilename"
|
| + fi
|
| +done
|
| +
|
| +if [ -n "$menu_name" ] ; then
|
| + if [ x"$mode" = x"user" ] ; then
|
| + update_submenu "user-$menu_name.menu"
|
| + else
|
| + update_submenu "$menu_name.menu"
|
| + fi
|
| +else
|
| + # Work around for SUSE/gnome 2.12 to pick up new ~/.local/share/applications
|
| + if [ x"$mode" = x"user" ] ; then
|
| + update_submenu
|
| + fi
|
| +fi
|
| +
|
| +# Install *.directory files
|
| +
|
| +xdg_dir_name=desktop-directories
|
| +
|
| +xdg_user_dir="$XDG_DATA_HOME"
|
| +[ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
|
| +xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
|
| +
|
| +xdg_system_dirs="$XDG_DATA_DIRS"
|
| +[ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/
|
| +xdg_global_dir=
|
| +for x in `echo $xdg_system_dirs | sed 's/:/ /g'` ; do
|
| + if [ -w $x/$xdg_dir_name ] ; then
|
| + xdg_global_dir="$x/$xdg_dir_name"
|
| + break
|
| + fi
|
| +done
|
| +
|
| +DEBUG 3 "Install locations for *.directory files:"
|
| +DEBUG 3 "xdg_user_dir: $xdg_user_dir"
|
| +DEBUG 3 "xdg_global_dir: $xdg_global_dir"
|
| +DEBUG 3 "kde_user_dir: $kde_user_dir"
|
| +DEBUG 3 "kde_global_dir: $kde_global_dir"
|
| +DEBUG 3 "gnome_user_dir: $gnome_user_dir"
|
| +DEBUG 3 "gnome_global_dir: $gnome_global_dir"
|
| +
|
| +if [ x"$mode" = x"user" ] ; then
|
| + xdg_dir="$xdg_user_dir"
|
| + kde_dir="$kde_user_dir"
|
| + gnome_dir="$gnome_user_dir"
|
| + my_umask=077
|
| +else
|
| + xdg_dir="$xdg_global_dir"
|
| + kde_dir="$kde_global_dir"
|
| + gnome_dir="$gnome_global_dir"
|
| + my_umask=022
|
| + if [ -z "${xdg_dir}${kde_dir}${gnome_dir}" ] ; then
|
| + exit_failure_operation_impossible "No writable system menu directory found."
|
| + fi
|
| +fi
|
| +
|
| +for desktop_file in $directory_files; do
|
| + basefile=`basename $desktop_file`
|
| +
|
| + DEBUG 1 "$action $desktop_file in $xdg_dir $kde_dir $gnome_dir"
|
| +
|
| + case $action in
|
| + install)
|
| + save_umask=`umask`
|
| + umask $my_umask
|
| +
|
| + for x in $xdg_dir $kde_dir $gnome_dir ; do
|
| + mkdir -p $x
|
| + eval 'cp $desktop_file $x/$basefile'$xdg_redirect_output
|
| + done
|
| +
|
| + umask $save_umask
|
| + ;;
|
| +
|
| + uninstall)
|
| + for x in $xdg_dir $kde_dir $gnome_dir ; do
|
| + rm -f $x/$basefile
|
| + done
|
| +
|
| + ;;
|
| + esac
|
| +done
|
| +
|
| +# Install *.desktop files
|
| +xdg_dir_name=applications
|
| +
|
| +xdg_user_dir="$XDG_DATA_HOME"
|
| +[ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
|
| +xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
|
| +
|
| +xdg_system_dirs="$XDG_DATA_DIRS"
|
| +[ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/
|
| +xdg_global_dir=
|
| +for x in `echo $xdg_system_dirs | sed 's/:/ /g'` ; do
|
| + if [ -w $x/$xdg_dir_name ] ; then
|
| + xdg_global_dir="$x/$xdg_dir_name"
|
| + break
|
| + fi
|
| +done
|
| +
|
| +kde_user_dir="$HOME/.kde/share/applnk"
|
| +kde_global_dir="/usr/share/applnk"
|
| +[ -w $kde_global_dir ] || kde_global_dir=
|
| +
|
| +gnome_user_dir="$HOME/.gnome/apps"
|
| +gnome_global_dir="/usr/share/gnome/apps"
|
| +[ -w $gnome_global_dir ] || gnome_global_dir=
|
| +
|
| +[ -f /etc/mandriva-release ] && need_mandriva_fix=true
|
| +[ -n "$need_mandriva_fix" ] && DEBUG 1 "Fixing up .desktop categories (Mandriva work around)"
|
| +
|
| +DEBUG 3 "Install locations for *.desktop files:"
|
| +DEBUG 3 "xdg_user_dir: $xdg_user_dir"
|
| +DEBUG 3 "xdg_global_dir: $xdg_global_dir"
|
| +DEBUG 3 "kde_user_dir: $kde_user_dir"
|
| +DEBUG 3 "kde_global_dir: $kde_global_dir"
|
| +DEBUG 3 "gnome_user_dir: $gnome_user_dir"
|
| +DEBUG 3 "gnome_global_dir: $gnome_global_dir"
|
| +
|
| +if [ x"$mode" = x"user" ] ; then
|
| + xdg_dir="$xdg_user_dir"
|
| + kde_dir="$kde_user_dir"
|
| + gnome_dir="$gnome_user_dir"
|
| + my_umask=077
|
| +else
|
| + xdg_dir="$xdg_global_dir"
|
| + kde_dir="$kde_global_dir"
|
| + gnome_dir="$gnome_global_dir"
|
| + my_umask=022
|
| + if [ -z "${xdg_dir}${kde_dir}${gnome_dir}" ] ; then
|
| + exit_failure_operation_impossible "No writable system menu directory found."
|
| + fi
|
| +fi
|
| +
|
| +for desktop_file in $desktop_files; do
|
| + if [ "$vendor" = "true" -a "$action" = "install" ] ; then
|
| + check_vendor_prefix "$desktop_file"
|
| + fi
|
| +
|
| + basefile=`basename $desktop_file`
|
| +
|
| + DEBUG 1 "$action $desktop_file in $xdg_dir $kde_dir $gnome_dir"
|
| +
|
| + case $action in
|
| + install)
|
| + save_umask=`umask`
|
| + umask $my_umask
|
| +
|
| + for x in $xdg_dir $kde_dir $gnome_dir ; do
|
| + mkdir -p $x
|
| + eval 'cp $desktop_file $x/$basefile'$xdg_redirect_output
|
| + done
|
| +
|
| + if [ -n "$need_mandriva_fix" ] ; then
|
| + fixup_mandriva_categories $xdg_dir/$basefile
|
| + fi
|
| +
|
| + if [ -f $kde_dir/$basefile ] ; then
|
| + echo "OnlyShowIn=Old;" >> $kde_dir/$basefile
|
| + fi
|
| +
|
| + if [ -f $gnome_dir/$basefile ] ; then
|
| + echo "OnlyShowIn=Old;" >> $gnome_dir/$basefile
|
| + fi
|
| +
|
| + make_lazy_default "$xdg_dir" "$basefile"
|
| +
|
| + umask $save_umask
|
| + ;;
|
| +
|
| + uninstall)
|
| + for x in $xdg_dir $kde_dir $gnome_dir ; do
|
| + rm -f $x/$basefile
|
| + done
|
| +
|
| + ;;
|
| + esac
|
| +done
|
| +
|
| +if [ x"$update" = x"yes" ] ; then
|
| + update_desktop_database
|
| +fi
|
| +
|
| +exit_success
|
|
|
| Property changes on: third_party/xdg-utils/scripts/xdg-desktop-menu
|
| ___________________________________________________________________
|
| Name: svn:executable
|
| + *
|
|
|
|
|