|  | #!/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" | 
|  | 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 |