#! /bin/bash
#
#  DEFAULT KDE STARTUP SCRIPT ( KDE-2.1 )
#  Modified for Red Hat Linux
#

[ -f /etc/profile.d/lang.sh ] && source /etc/profile.d/lang.sh

function setfont()
{
    # don't use iso8859-15, it looks very bad
    [ "$CHARSET" = "iso8859-15" ] && CHARSET=iso8859-1

    cat >>$HOME/.kde/share/config/kdeglobals <<EOF
[Locale]
Country=$COUNTRY
Language=$LNG
Charset=$CHARSET
[WM]
activeFont=helvetica,12,5,$CHARSET,75,0
EOF

    cat >>$HOME/.kde/share/config/konquerorrc <<EOF
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,0,0
[HTML Settings]
DefaultEncoding=$CHARSET
MinimumFontSize=10
EOF

    cat >>$HOME/.kde/share/config/kdesktoprc <<EOF
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,50,0
EOF
}

# Clean up old kde /tmp files that belong to the user
real_display=`echo $DISPLAY | sed "s/://" | sed "s/\..*//"`
for file in /tmp/kfm_*_$real_display /tmp/kio*_$real_display; do
    if [ -O $file ]; then
        rm -rf $file
    fi
done
rm -f ~/.DCOPserver*
rm -f ~/.dcop*
rm -f ~/.kxmlrpcd-*

# set up user environment if not present
# check for space on /tmp and $HOME and for write access
#  error exit, if not
space_tmp=`df /tmp | xargs | cut -d" " -f11`
space_home=`df $HOME | xargs | cut -d" " -f11`

if [ $space_tmp -lt 50 ]; then
    echo $"Not enough free disk space on /tmp"
    exit 1
fi

if [ $space_home -lt 25 ]; then
    echo $"Not enough free disk space on $HOME"
    exit 1
fi
testfile_tmp=`mktemp /tmp/KDE.startkde.XXXXXX`
testfile_home=`mktemp $HOME/KDE.startkde.XXXXXX`

if ! echo TEST_TEXT >$testfile_tmp 2>/dev/null ; then
    echo $"You don't have write permissions for /tmp"
    exit 1
fi
rm -f $testfile_tmp

if ! echo TEST_TEXT >$testfile_home 2>/dev/null ; then
     echo $"You don't have write permissions for $HOME"
     exit 1
fi
rm -f $testfile_home

[ -d $HOME/.kde/share/config ] || mkdir -p $HOME/.kde/share/config

if [ -e $HOME/.kde/share/config/kpanelrc ]; then
  # Yuck... We're converting from KDE 1.x. Try to preserve settings.
  /usr/bin/desktopconv
fi

# create necessary directories/files
if [ ! -d $HOME/Desktop -a -d /etc/skel/Desktop ]; then
  cp -aR /etc/skel/Desktop $HOME
fi

if [ ! -d $HOME/.kde -a -d /etc/skel/.kde ]; then
  cp -aR /etc/skel/.kde $HOME
fi

if [ ! -e $HOME/.kde/share/config/emaildefaults ]; then
  /usr/bin/mailsettings >$HOME/.kde/share/config/emaildefaults
fi

if [ ! -e $HOME/.kde/share/config/kdeglobals ]; then
  # First startup - as an additional hack, get locales in sync with
  # the system
  # The language is the first part of the locale, e.g. en for en_US
  LNG=`echo $LANG |sed -e "s/@.*//;s/\..*//;s/_.*//"`

  # The country is the second part of the locale (us for en_US); fall
  # back to the first part if necessary (some broken configs use
  # LANG=de instead of LANG=de_DE...)
  COUNTRY=`echo $LANG |sed -e "s/.*_//;s/@.*//;s/\..*//;s/_.*//" |tr A-Z a-z`

  # Some locales require special treatment...
  if [ "$LANG" = "en_US" ]; then
    LNG="C"
  elif [ "$LANG" = "en_GB" ]; then
    LNG="en_GB"
  elif [ "$LANG" = "nn_NO" ]; then
    LNG="no_NY"
  elif [ "$LNG" = "zh" -a "$COUNTRY" = "hk" ]; then
    LNG="zh_TW"
  elif [ "$LNG" = "zh" ]; then
    LNG="$LANG"
  elif [ "$LNG" = "pt" -a "$COUNTRY" = "br" ]; then
    LNG="pt_BR"
  fi

  CHARSET=`locale charmap |sed -e "s/ISO-/ISO/g" |tr A-Z a-z`
  setfont

  # Rearrange icons on first startup.
  # Do this unconditionally just in case someone is using a
  # very low resolution - we might need a second row even
  # without translating.
  [ ! -f $HOME/.first_start_kde ] && >$HOME/.first_start_kde

fi

if [ ! -f $HOME/.kderc -a -e /etc/skel/.kderc ]; then
  cp -a /etc/skel/.kderc $HOME
fi

# Boot sequence:
#
# kdeinit is used to fork off processes which improves memory usage
# and startup time.
#
# * kdeinit starts the dcopserver and klauncher first.
# * Then kded is started. kded is responsible for keeping the sycoca
#   database up to date. When an up to date database is present it goes
#   into the background and the startup continues.
# * Then kdeinit starts kcminit. kcminit performs initialisation of
#   certain devices according to the user's settings
#
# * Then ksmserver is started which in turn starts 
#   1) the window manager (kwin)
#   2) everything in $KDEDIR/share/autostart (kdesktop, kicker, etc.)
#   3) the rest of the session.

# Prevent an ever growing .ICEauthority file, since that will kill application
# startup performance.
rm -f $HOME/.ICEauthority

# Set a left cursor instead of the standard X11 "X" cursor, since I've heard
# from some users that they're confused and don't know what to do. This is
# especially necessary on slow machines, where starting KDE takes one or two
# minutes until anything appears on the screen.
#
# Set the background to what we'll use later.
# The standard X background is nasty, causing moire effects and exploding
# people's heads. We use colours from the standard KDE palette for those with
# palettised displays.

xsetroot -cursor_name left_ptr -solid '#356390'

# The user's personal KDE directory is usually $HOME/.kde, but this setting
# may be overridden by setting KDEHOME.

kdehome=$HOME/.kde
test -n "$KDEHOME" && kdehome=$KDEHOME

# Activate the kde font directories.
#
# There are 4 directories that may be used for supplying fonts for KDE.
#
# There are two system directories. These belong to the administrator.
# There are two user directories, where the user may add her own fonts.
#
# The 'override' versions are for fonts that should come first in the list,
# i.e. if you have a font in your 'override' directory, it will be used in
# preference to any other.
#
# The preference order looks like this:
# user override, system override, X, user, system
#
# Where X is the original font database that was set up before this script
# runs.

usr_odir=$kdehome/share/fonts/override
usr_fdir=$kdehome/share/fonts
if test -n "$KDEDIRS"; then
  kdedirs_first=`echo $KDEDIRS|sed -e 's/:.*//'`
  sys_odir=$kdedirs_first/share/fonts/override
  sys_fdir=$kdedirs_first/share/fonts
else
  sys_odir=$KDEDIR/share/fonts/override
  sys_fdir=$KDEDIR/share/fonts
fi

# We run mkfontdir on the user's font dirs (if we have permission) to pick
# up any new fonts they may have installed. If mkfontdir fails, we still
# add the user's dirs to the font path, as they might simply have been made
# read-only by the administrator, for whatever reason.

test -d $usr_odir && (mkfontdir $usr_odir ; xset +fp $usr_odir)
test -d $sys_odir && xset +fp $sys_odir
test -d $usr_fdir && (mkfontdir $usr_fdir ; xset fp+ $usr_fdir)
test -d $sys_fdir && xset fp+ $sys_fdir

# Ask X11 to rebuild its font list.
xset fp rehash

# Link "tmp" resource to directory in /tmp
# Creates a directory /tmp/kde-$USER and links $KDEHOME/tmp-$HOSTNAME to it.
lnusertemp tmp >/dev/null

# Link "socket" resource to directory in /tmp
# Creates a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
lnusertemp socket >/dev/null

# the splashscreen and progress indicator
ksplash

# We set LD_BIND_NOW to increase the efficiency of kdeinit.
# kdeinit unsets this variable before loading applications.
LD_BIND_NOW=true kdeinit +kcminit

# The notification daemon. Not started with kdeinit because it uses threads
# and kdeinit doesn't.
knotify

# finally, give the session control to the session manager
# Syntax:   ksmserver [--restore] [--windowmanager <wm>]
# if no windowmanager is specified, ksmserver will ensure kwin is started.
# [--restore] should be controlled by kdm
exec ksmserver --restore
