#!/bin/bash
# Copyright (C) 1999 - 2004 Red Hat, Inc. All rights reserved. This
# copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the
# GNU General Public License version 2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
echo "Xsession argument [$*]"
echo "GDMSESSION [${GDMSESSION}]"

# redirect errors to a file in user's home directory if we can
if [ -z "$GDMSESSION" ]; then
    # GDM redirect output itself in a smarter fashion
    errfile="$HOME/.xsession-errors"
    if cp /dev/null "$errfile" 2> /dev/null ; then
        chmod 600 "$errfile"
        exec > "$errfile" 2>&1
    else
        errfile=$(mktemp -q /tmp/xses-$USER.XXXXXX)
        if [ $? -eq 0 ]; then
            exec > "$errfile" 2>&1
        fi
    fi
fi

#if ! printenv PATH | grep -q /usr/X11R6/bin
#then
#	PATH="${PATH}":/usr/X11R6/bin
#fi

SWITCHDESKPATH=/usr/share/switchdesk

# Mandatorily source xinitrc-common, which is common code shared between the
# Xsession and xinitrc scripts which has been factored out to avoid duplication
. /etc/X11/xinit/xinitrc-common

# Momonga 
. /etc/X11/xinit/xinitrc-momonga

# execute im server
if [ -n "$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 [ -n "$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
user_hook="$HOME/.xinit.d/hook"
if [ -x "$user_hook" ]; then
    . $user_hook
fi

# This Xsession.d implementation, is intended to obsolte and replace the
# various mechanisms present in the 'case' statement which follows, and to
# eventually be able to easily remove all hard coded window manager specific
# content from this script.  See bug #142260 for additional explanation and
# details.  All window manager rpm packages and desktop environment
# packages should be modified to provide the Xsession.d/Xsession.$wm scripts
# to start themselves up.  In the future, the legacy switchdesk mechanisms
# and hard coded window managers and desktop environments will be removed from
# this script. 
XCLIENTS_D=/etc/X11/xinit/Xclients.d
if [ -d "$XCLIENTS_D" -a "$#" -eq 1 -a -x "$XCLIENTS_D/Xclients.$1.sh" ]; then
    exec -l $SHELL -c "$SSH_AGENT $DBUS_LAUNCH $XCLIENTS_D/Xclients.$1.sh"
else
# now, we see if xdm/gdm/kdm has asked for a specific environment
case $# in
1)
    if [ -x "$SWITCHDESKPATH/Xclients.$1" ]; then
       exec -l $SHELL -c "$SWITCHDESKPATH/Xclients.$1";
    fi;

    case "$1" in
    failsafe)
       exec -l $SHELL -c "xterm -geometry 80x24-0-0"
       ;;
    gnome)
       # lack of SSH_AGENT is intentional, see #441123.  though
       # the whole thing should really happen in xinitrc.d anyway.
       exec -l $SHELL -c gnome-session
       exec /bin/sh -c "exec -l $SHELL -c \"gnome-session\""
       ;;
    kde|kde1|kde2)
       exec $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"startkde\""
       ;;
    twm)
        # fall back to twm
       exec $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"twm\""
       ;;
    gnome-session)
       echo "Execute [$SHELL -c \"$SSH_AGENT $SESSION_EXEC\"]"
       exec -l $SHELL -c "$SSH_AGENT $SESSION_EXEC"
       ;;
    startkde)
       echo "Execute [exec -l $SHELL -c \"$SSH_AGENT $SESSION_EXEC\"]"
       exec -l $SHELL -c "$SSH_AGENT $SESSION_EXEC"
       ;;

    *)
       # GDM provies either a command line as the first argument or
       # provides 'failsafe', 'default' or 'custom'.  KDM will do the
       # same at some point
       if [ "$1" != "default" -a "$1" != "custom" ]; then
           echo "Execute [exec -l $SHELL -c \"$SSH_AGENT $1\"]"
           exec -l $SHELL -c "$SSH_AGENT $1"
       fi
       ;;
    esac
esac
fi

# otherwise, take default action
if [ "X${SESSION_EXEC}" != "X" ]; then
    echo "Execute [exec -l $SHELL -c \"$SSH_AGENT $SESSION_EXEC\"]"
    exec -l $SHELL -c "$SSH_AGENT $SESSION_EXEC"
fi
if [ -x "$HOME/.xsession" ]; then
    exec -l $SHELL -c "$SSH_AGENT $HOME/.xsession"
elif [ -x "$HOME/.Xclients" ]; then
    exec -l $SHELL -c "$SSH_AGENT $HOME/.Xclients"
elif [ -x /etc/X11/xinit/Xclients ]; then
    exec -l $SHELL -c "$SSH_AGENT /etc/X11/xinit/Xclients"
else
    # should never get here; failsafe fallback
    exec -l $SHELL -c "xsm"
fi

