| #!/bin/sh |
| # |
| # Create menu/desktop entries for an application |
| # This is used by the IShellLink interface |
| # |
| # Copyright 2000 Alexandre Julliard |
| # |
| # This library is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU Lesser General Public |
| # License as published by the Free Software Foundation; either |
| # version 2.1 of the License, or (at your option) any later version. |
| # |
| # This library is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # Lesser General Public License for more details. |
| # |
| # You should have received a copy of the GNU Lesser General Public |
| # License along with this library; if not, write to the Free Software |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| # |
| |
| mode="" |
| args="" |
| menu="" |
| icon="" |
| descr="" |
| link="" |
| path="" |
| workdir="" |
| |
| usage() |
| { |
| cat <<EOF |
| usage: wineshelllink options |
| |
| options: |
| --desktop create a desktop link |
| --menu create a menu entry |
| --path xx path to the application |
| --link xx name of link to create |
| --args xx command-line arguments for the application |
| --icon xx icon to display |
| --workdir xx working directory for the application |
| --descr xx application description |
| |
| EOF |
| exit 1 |
| } |
| |
| if [ $# -eq 0 ] ; then |
| usage |
| fi |
| |
| while [ $# -gt 0 ] |
| do |
| case "$1" in |
| --desktop) mode="desktop"; shift 1 ;; |
| --menu) mode="menu"; shift 1 ;; |
| --path) path="$2"; shift 2 ;; |
| --link) link="$2"; shift 2 ;; |
| --args) args="$2"; shift 2 ;; |
| --icon) icon="$2"; shift 2 ;; |
| --descr) descr="$2"; shift 2 ;; |
| --workdir) workdir="$2"; shift 2 ;; |
| *) usage ;; |
| esac |
| done |
| |
| if [ "$mode" = "" ] ; then |
| echo Either --desktop or --menu required |
| usage |
| fi |
| |
| if [ "$link" = "" ] ; then |
| echo You must specify a link name with --link |
| usage |
| fi |
| |
| kde_entry() |
| { |
| xname=`basename "$link"` |
| cat <<EOF |
| # KDE Config File |
| [KDE Desktop Entry] |
| Name=$xname |
| Exec=wine '$path' -- $args |
| Type=Application |
| Comment=$descr |
| EOF |
| [ -z "$workdir" ] || echo "Path=\"$workdir\"" |
| [ -z "$xpmicon" ] || echo "Icon=$xpmicon" |
| } |
| |
| gnome_entry() |
| { |
| xname=`basename "$link"` |
| cat <<EOF |
| [Desktop Entry] |
| Name=$xname |
| Exec=wine "$path" -- $args |
| Type=Application |
| Comment=$descr |
| EOF |
| [ -z "$workdir" ] || echo "Path=\"$workdir\"" |
| [ -z "$xpmicon" ] || echo "Icon=$xpmicon" |
| } |
| |
| mdk_entry() |
| { |
| base=`basename "$link"` |
| section=`dirname "$link"` |
| [ -z "$icon" ] || xicon="icon=\"$xpmicon\"" |
| echo "?package(local.Wine):needs=x11 section=\"Wine/$section\" title=\"$base\" longtitle=\"$descr\" command=\"wine \\\"$path\\\" -- $args\" $xicon" |
| } |
| |
| # copy the icon file to a specified dir and set xpmicon to the resulting path |
| copy_icon() |
| { |
| dir="$1" |
| mkdir -p "$dir" |
| mkdir -p "$dir/""`dirname "$link"`" || true |
| if [ -f "$icon" ] |
| then |
| cp "$icon" "$dir/$link.xpm" |
| xpmicon="$dir/$link.xpm" |
| else |
| xpmicon="" |
| fi |
| } |
| |
| # Debian/Mandrake |
| |
| which update-menus > /dev/null 2>&1 |
| if [ $? = 0 -a $mode = "menu" ] |
| then |
| iconname="`basename "$link"`.xpm" |
| dir="$HOME/.menu/icons" |
| if [ -f "$icon" ] |
| then |
| mkdir -p "$dir" |
| cp "$icon" "$dir/$iconname" |
| xpmicon="$dir/$iconname" |
| else |
| xpmicon="" |
| fi |
| mdk_entry >> "$HOME/.menu/wine" |
| if [ -d "/usr/lib/menu" ] |
| then |
| mdk_entry >> "/usr/lib/menu/wine" |
| fi |
| update-menus > /dev/null 2>&1 |
| fi |
| |
| # KDE |
| |
| if [ -d "$HOME/.kde" ] |
| then |
| kdeversion=0 |
| if which kde-config >/dev/null 2>&1 |
| then |
| kdeversion=`kde-config -v | grep KDE: | sed -n "s/^KDE: \([^.]*\)\..*$/\1/p"` |
| fi |
| |
| if [ $kdeversion -ge 2 ] |
| then |
| copy_icon "$HOME/.kde/share/applnk/Wine" |
| if [ $mode = "menu" ] |
| then |
| gnome_entry > "$HOME/.kde/share/applnk/Wine/$link.desktop" |
| elif [ -d "$HOME/Desktop" ] |
| then |
| gnome_entry > "$HOME/Desktop/$link.desktop" |
| fi |
| else |
| copy_icon "$HOME/.kde/share/applnk/Wine" |
| if [ $mode = "menu" ] |
| then |
| kde_entry > "$HOME/.kde/share/applnk/Wine/$link.kdelnk" |
| |
| # KDE 1.x kludge. Wake up KDE, if we can find kpanel running |
| which kwmcom >/dev/null 2>/dev/null && \ |
| ps u -C kpanel >/dev/null 2>/dev/null && \ |
| kwmcom kpanel:restart |
| |
| elif [ -d "$HOME/Desktop" ] |
| then |
| kde_entry > "$HOME/Desktop/$link.kdelnk" |
| # KDE 1.x kludge: wake up KDE, if we can find kfm running... |
| which kfmclient >/dev/null 2>/dev/null && \ |
| ps u -C kfm >/dev/null 2>/dev/null && \ |
| kfmclient refreshDesktop |
| fi |
| fi |
| fi |
| |
| if [ -d "$HOME/.kde2" ] |
| then |
| copy_icon "$HOME/.kde2/share/applnk/Wine" |
| if [ $mode = "menu" ] |
| then |
| gnome_entry > "$HOME/.kde2/share/applnk/Wine/$link.desktop" |
| elif [ -d "$HOME/Desktop" ] |
| then |
| gnome_entry > "$HOME/Desktop/$link.desktop" |
| elif [ -d "$HOME/Desktop2" ] |
| then |
| gnome_entry > "$HOME/Desktop2/$link.desktop" |
| fi |
| fi |
| |
| # Gnome |
| |
| if [ -d "$HOME/.gnome" ] |
| then |
| copy_icon "$HOME/.gnome/apps/Wine" |
| if [ $mode = "menu" ] |
| then |
| gnome_entry > "$HOME/.gnome/apps/Wine/$link.desktop" |
| elif [ -d "$HOME/.gnome-desktop" ] |
| then |
| gnome_entry > "$HOME/.gnome-desktop/$link.desktop" |
| fi |
| fi |
| |
| exit 0 |