#!/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 2 } 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 [ -z "$mode" ] ; then echo "Either --desktop or --menu required" usage fi if [ -z "$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" else if [ -d "$HOME/Desktop2" ] then gnome_entry > "$HOME/Desktop2/$link.desktop" fi if [ -d "$HOME/Desktop" ] then gnome_entry > "$HOME/Desktop/$link.desktop" fi fi fi if [ -d "$HOME/.kde3/share/applnk" ] then copy_icon "$HOME/.kde3/share/applnk/Wine" if [ $mode = "menu" ] then gnome_entry > "$HOME/.kde3/share/applnk/Wine/$link.desktop" else if [ -d "$HOME/Desktop3" ] then gnome_entry > "$HOME/Desktop3/$link.desktop" fi if [ -d "$HOME/Desktop2" ] then gnome_entry > "$HOME/Desktop2/$link.desktop" fi if [ -d "$HOME/Desktop" ] then gnome_entry > "$HOME/Desktop/$link.desktop" fi 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