#!/bin/bash
### 利用するファイルマネージャの設定について
#   ※ $HOME/.fvwm/vine/fmname をエディタで書き換えれば利用するファイル
#      マネージャを変更可能。
#      zenity の entrybox にドラッグ＆ドロップが可能なファイルマネージャ
#      として確認出来たのは今の所 nautilus と rox のみ (thunar、pcmanfm
#      はドラッグ＆ドロップ不可) だが、将来的には利用可能ファイルマネー
#      ジャは増えるかもしれない。

### ファイルマネージャ・ウィンドウを閉じる
fm_close()
{
    if [ -n "$fileman" ]; then
	if [ -n "$wallpaperdir" ]; then
            # 使用したファイルマネージャを終了
	    if [ "$fileman" == "rox" ]; then
                # rox の場合は -D オプションで、開かれてるウィンドウを閉じる
		echo `dirname "$wallpaperdir"`
		rox -D `dirname "$wallpaperdir"`
	    else
                # その他の場合
                # ファイルマネージャ起動時のコマンドラインの pid を指定して kill
		kill `ps fx | grep "$fileman $wpd" | cut -d" " -f 1` 2> /dev/null
	    fi
	fi
    fi
}

### 初期メッセージを表示
init_msg()
{
    zenity --info --text="<b><b>FVWM 壁紙設定ユーティリ  ティへようこそ！</b></b>\n\n・nautilus 又は rox-filer がインストールされている場合は\n  それらのファイルマネージャが呼び出され、エントリスペー\n  スにドラッグ＆ドロップ可能です。\n・どちらもインストール済みの時は、より軽量な  rox が優先\n  されます。\n・各ファイルマネージャでの画像サムネール表示がお薦めです。\n・\$HOME/.fvwm/vine/fmname の内容を nautilus 又は\n  rox にする事で、使用ファイルマネー  ジャの変更が可能です。\n\n・それ以外の場合はエントリスペースに画像の場所を入力して\n  下さい。\n\n(このメッセージは、初回起動時のみ表示されます)"
}

### start --------------------------------------------------

export LANG=ja_JP.UTF-8
fileman=""
if [ ! -d $HOME/.fvwm/vine ]; then
    ### 初期ファイルマネージャ設定
    mkdir $HOME/.fvwm/vine
    touch $HOME/.fvwm/vine/fmname
    [ -x /usr/bin/nautilus ] && echo "nautilus" > \
        $HOME/.fvwm/vine/fmname
    [ -x /usr/bin/rox ] && echo "rox" > $HOME/.fvwm/vine/fmname
    ### 初期メッセージ表示
    init_msg
fi

### ファイルマネージャ名読み込み
read fileman <$HOME/.fvwm/vine/fmname
[ "$fileman" == "nautilus" ] && fileman="nautilus --no-desktop"

### 初期壁紙ディレクトリ名設定
if [ ! -f $HOME/.fvwm/vine/wallpaperdir ]; then
    cat<<EOF>$HOME/.fvwm/vine/wallpaperdir
wallpaperdir=/usr/share/fvwm/backgrounds
EOF
fi

### 前回の(又は初期の)壁紙ディレクトリの読み込み
. "$HOME/.fvwm/vine/wallpaperdir"

### メッセージを設定し、利用可能ファイルマネージャが有る場合は起動する
if [ -n "$fileman" ]; then
    # 利用可能ファイルマネージャが有る場合
    msg="ここに壁紙用の画像ファイルを
ドラッグ＆ドロップして下さい"
    "$fileman" "$wallpaperdir" &
    wpd="$wallpaperdir" # ファイルマネージャ起動時のディレクトリ名を保持
else
    # 利用可能ファイルマネージャが無い場合
    msg="ここに壁紙用の画像ファイルのパスを
記入して下さい"
fi

ans=0

while [ $ans == 0 ]; do
    # 壁紙指定ダイアログ
    filename=`zenity --entry --text="$msg" --title=壁紙設定`
    if [ -z "$filename" ]; then
	zenity --info --text="壁紙ファイル名は設定されませんでした。\n(２秒後自動的に終了します)" --timeout=2
        break
    fi

    ### 行頭の 'file://' と行末の '\r' を取り除く(nautilus への対応)
    filename=`echo "$filename" | sed 's/file\:\/\///' | tr -d '\r'`

    ### 画像ファイルかどうかをチェック
    identify "$filename" > /dev/null
    if [ $? == 1 ]; then
        # 指定ファイルが壁紙として不適合だった時の警告
        zenity --question  --title="警告" --text="壁紙に設定で来ませんでした。\n\nさらに壁紙を設定しますか？"
        ans=$?
    else
        ### ディレクトリ名保存
        echo "wallpaperdir=`dirname $filename`" > $HOME/.fvwm/vine/wallpaperdir

	### 壁紙ファイル名保存
        echo "$filename" > $HOME/.fvwm/vine/wallpapername

        ### 壁紙描画
        feh --bg-scale "$filename"

        # 壁紙の可否確認
        zenity --question  --title="確認" --text="壁紙を設定しました。\n\nこの壁紙でよろしいですか？\\n(よければ [OK]、他を選ぶなら[キャンセル])"
        if [ $? == 0 ]; then
	    ### OK なら終了
	    echo "$filename" > $HOME/.fvwm/wallpapername
            ans=1
        fi
   fi
done

### ファイルマネージャウィンドウを閉じて終了
fm_close
