#!/bin/bash

session_dir=/etc/X11/xinit/session.d
xim_dir=/etc/X11/xinit/xim.d
user_session="$HOME/.xinit.d/session"
user_xim="$HOME/.xinit.d/xim"
user_hook="$HOME/.xinit.d/hook"

# check im settings
unset IM
if [ -f "$user_xim" ]; then
	IM=`cat "$user_xim" 2> /dev/null`
	if [ -f "$xim_dir/$IM" ]; then
		echo "Reading $xim_dir/$IM"
		source "$xim_dir/$IM"
	else
		echo "Wrong IM is specified in $user_xim"
	fi
fi

# execute im server
if [ -x "/usr/bin/ximswitch" ]; then
	echo "Executing /usr/bin/ximswitch $IM"
	unset XMODIFIERS
	/usr/bin/ximswitch $IM
elif [ "$IM_EXEC" != "" ]; then
	echo "Executing $IM_EXEC"
	$IM_EXEC &
fi

# wait until IM is ready
unset IM_PROC
if echo "$IM_EXEC" | grep -q "httx" ; then
  # ATOKX
  IM_PROC="LookupAux"
  # SKK
  if echo "$IM_EXEC" | grep -q "skk" ; then
    IM_PROC="PaletteAux"
  fi
  if echo "$IM_EXEC" | grep -q "canna" ; then
    IM_PROC="PaletteAux"
  fi
fi
if [ "$IM_PROC" != "" ]; then
  times=0
  until ps xc | grep -q "$IM_PROC" ; do
    # timeout in 30sec
    if [ $times -ge 30 ]; then break ; fi
    times=$[$times+1]
    sleep 1
  done
  sleep 1
  unset times
fi

# execute user hook
if [ -x "$user_hook" ]; then
	source "$user_hook";
fi

#
if [ "$SESSION_TYPE" = "" -o "$SESSION_TYPE" = "twm" ]; then
        if [ -f "$session_dir/gnome" ]; then
                SESSION_TYPE=gnome
        elif [ -f "$session_dir/kde" ]; then
                SESSION_TYPE=kde
        elif [ -f "$session_dir/xfce4" ]; then
                SESSION_TYPE=xfce4
        fi
fi

# check session settings
if [ -f "$session_dir/$SESSION_TYPE" ]; then
	echo "Reading $session_dir/$SESSION_TYPE"
	source "$session_dir/$SESSION_TYPE"
else
	echo "Wrong session name is specified in $user_session"
	SESSION_EXEC="xterm"
fi

# local dbus session
if [ -x /usr/bin/dbus-launch ]; then
        echo "Starting dbus session"
        eval `dbus-launch --exit-with-session --sh-syntax`
fi

# execute the gnome-setting-daemon if it exists and not KDE or XFce4
if [ "$SESSION_TYPE" != "kde" -a "$SESSION_TYPE" != "xfce4" ]; then
	if [ -x /usr/bin/gnome-settings-daemon ]; then
		echo "Starting gnome-settings-daemon"
		/usr/bin/gnome-settings-daemon &
	fi
fi

# execute the specified session manager
echo "Starting $SESSION_EXEC"
exec $SESSION_EXEC
echo "Failed"

