#!/bin/sh
# $XConsortium: Xsession /main/10 1995/12/18 18:21:28 gildea $

case $# in
1)
	case $1 in
	failsafe)
		exec xterm -geometry 80x24+0+0
		;;
	esac
esac

# Note: ~/.xsession-errors is now done in the daemon so that it
# works for ALL sessions (except ones named 'Failsafe')

# clean up after xbanner
if which freetemp 2> /dev/null ; then
	freetemp
fi

startup=$HOME/.xsession

userresources=$HOME/.Xresources 
usermodmap=$HOME/.Xmodmap 
userxkbmap=$HOME/.Xkbmap

sysresources=/etc/X11/Xresources 
sysmodmap=/etc/X11/Xmodmap 
sysxkbmap=/etc/X11/Xkbmap

rh6sysresources=/etc/X11/xinit/Xresources 
rh6sysmodmap=/etc/X11/xinit/Xmodmap 


# merge in defaults
if [ -f "$rh6sysresources" ]; then
    xrdb -merge "$rh6sysresources"
fi

if [ -f "$sysresources" ]; then
    xrdb -merge "$sysresources"
fi

if [ -f "$userresources" ]; then
    xrdb -merge "$userresources"
fi

# merge in keymaps
if [ -f "$sysxkbmap" ]; then
    setxkbmap `cat "$sysxkbmap"`
    XKB_IN_USE=yes
fi

if [ -f "$userxkbmap" ]; then
    setxkbmap `cat "$userxkbmap"`
    XKB_IN_USE=yes
fi

#
# Eeek, this seems like too much magic here
#
if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then
    if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then
       xkbsymbols=`sed -n -e 's/^[     ]*XkbSymbols[   ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`
       if [ -n "$xkbsymbols" ]; then
           setxkbmap -symbols "$xkbsymbols"
           XKB_IN_USE=yes
       fi
    fi
fi

# xkb and xmodmap don't play nice together
if [ -z "$XKB_IN_USE" ]; then
    if [ -f "$rh6sysmodmap" ]; then
       xmodmap "$rh6sysmodmap"
    fi

    if [ -f "$sysmodmap" ]; then
       xmodmap "$sysmodmap"
    fi

    if [ -f "$usermodmap" ]; then
       xmodmap "$usermodmap"
    fi
fi

unset XKB_IN_USE

# Normalize languages, some places/distros screw us up in /etc/profile,
# so in case the user did select a language
if [ -n "$GDM_LANG" ]; then
  LANG=$GDM_LANG
  export LANG

  if [ -n "$LC_ALL" ]; then
    if [ "$LC_ALL" != "$LANG" ]; then
      LC_ALL=$LANG
    fi
  else
    unset LC_ALL
  fi

  if [ -n "$LANGUAGE" ]; then
    if [ "$LANGUAGE" != "$LANG" ]; then
      LANGUAGE=$LANG
    fi
  else
    unset LANGUAGE
  fi

  if [ -n "$LINGUAS" ]; then
    if [ "$LINGUAS" != "$LANG" ]; then
      LINGUAS=$LANG
    fi
  else
    unset LINGUAS
  fi
fi

# run all system xinitrc shell scripts.
if [ -d /etc/X11/xinit/xinitrc.d ]; then
    for i in /etc/X11/xinit/xinitrc.d/* ; do
        if [ -x "$i" ]; then
	    . "$i"
        fi
    done
fi

# now, we see if xdm/gdm/kdm has asked for a specific environment
case $# in
1)
    if [ -x "/usr/share/apps/switchdesk/Xclients.$1" ]; then
       exec /bin/sh "/usr/share/apps/switchdesk/Xclients.$1";
    fi;

    case $1 in
    failsafe)
       exec xterm -geometry 80x24+0+0
       ;;
    gnome)
       exec -l $SHELL -c "gnome-session"
       if [ -x "$HOME/.gnomerc" ]; then
	   exec $HOME/.gnomerc
       elif [ -x /opt/gnome/etc/gdm/gnomerc ]; then
	   exec /opt/gnome/etc/gdm/gnomerc
       else
	   # as fallback in case the config is screwed
	   exec gnome-session
       fi
       ;;
    kde|kde1|kde2)
       if [ -x "/usr/share/apps/switchdesk/Xclients.kde" ]; then
           exec "/usr/share/apps/switchdesk/Xclients.kde"
       else
           #fallback for non-redhat
           exec startkde
       fi
       ;;
    twm)
       # fall back to twm
       if [ -x "/usr/share/apps/switchdesk/Xclients.twm" ]; then
           exec "/usr/share/apps/switchdesk/Xclients.twm"
       else
           #fallback for non-redhat
           exec twm
       fi
       ;;
    esac
esac

if [ -x "$startup" ]; then
	exec "$startup"
elif [ -x "$HOME/.Xclients" ]; then
	exec "$HOME/.Xclients"
elif [ -x /etc/X11/xinit/Xclients ]; then
	exec /etc/X11/xinit/Xclients
elif [ -x /etc/X11/Xclients ]; then
	exec /etc/X11/Xclients
else
	exec xsm
fi
