#!/bin/sh
#
#  SuSE KDE STARTUP SCRIPT
#  based on
#  DEFAULT KDE STARTUP SCRIPT ( KDE-3.0 )
#

# 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.

# 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 plain grey.
# 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.

#
# The user's personal KDE directory is usually $HOME/.kde3, but this setting
# may be overridden by setting KDEHOME.
#
#KDEMAINDIR=/opt/kde3/
export QTDIR=/usr/lib/qt3
export KDEDIRS=/opt/kde3:/etc/X11/kde3
export KDEMAINDIR=/opt/kde3/
[ "$KDEHOME" ]     || export KDEHOME=$HOME/.kde
[ -z "$KDEROOTHOME" -a "$UID" == "0" ] && export KDEROOTHOME=$HOME/.kde
echo "$PATH" | grep -q "${KDEMAINDIR}bin" || export PATH=${KDEMAINDIR}bin:$PATH

#
# Is this the first KDE 3 start with that KDEHOME ?
#
if [ -e $HOME/.kde2 -a ! -e $HOME/.skel/kdebase3 ]; then
   [ "$USER" == "root" ] && xsetroot -cursor_name left_ptr -solid "#bd0000" \
                         || xsetroot -cursor_name left_ptr -solid "#ACB29C"
   $KDEMAINDIR/bin/updatedialog
   S="$?"
   if [ "$S" == "0" -o "$S" == "1" ]; then
      if [ -e "$KDEHOME" -a ! -e "$HOME/.kde1" ]; then
         mv "$KDEHOME" "$HOME/.kde1"
      fi
      rm -rf "$HOME/.kde"
      if [ "$S" == "0" ]; then
	 mkdir -p "$HOME/.kde" "$HOME/Desktop/"
	 cd $HOME/.kde2/
	 tar cfp - --exclude=thumbnails --exclude=cache --exclude=socket-\* \
	           --exclude=tmp-\* * | tar xfv - -C "$KDEHOME"
	 for i in share/config/* ; do
	   sed -e 's,/opt/kde2/,/opt/kde3/,g' -e "s!$HOME/.kde2!$HOME/.kde!g" \
	          "$i" > "$HOME/.kde/$i"
	 done
	 sed -e 's,^Wallpaper=SuSE-Desktop_\(.*\).png,Wallpaper=SuSE-Desktop_\1.jpeg,' \
	          "share/config/kdesktoprc" > "$HOME/.kde/share/config/kdesktoprc"
	 cd -
	 [ "`du -ms $HOME/KDesktop/|awk '{ print $1 }'`" -lt 15 ] \
	   && cp -a "$HOME/KDesktop/*" "$HOME/Desktop/" \
	   || mv    "$HOME/KDesktop/*" "$HOME/Desktop/"
      fi
   fi
   mkdir -p $HOME/.skel/
   touch $HOME/.skel/kdebase3
fi

#
# The user's personal KDE directory is usually $HOME/.kde3, but this setting
# may be overridden by setting KDEHOME.
#
[ -e "${kdehome}/share/config/kdesktoprc" ] && \
  color="`sed -n '/^Color1=/ s/Color1=//p' "${kdehome}/share/config/kdesktoprc" | head -1 | awk -F \, '{ printf("#%02x%02x%02x",$1,$2,$3) }' -`"
[ -z "$color" -a "$USER" == "root" ] && color="#bd0000"
[ -z "$color" -a "$USER" != "root" ] && color="#ACB29C"
xsetroot -cursor_name left_ptr -solid "$color"

if [ -r /etc/sysconfig/windowmanager ]; then
  # Do the user want the SuSE theme ?
  source /etc/sysconfig/windowmanager

  # Should we really enable FAM support for KDE ?
  export USE_FAM

  # Should we use the fast malloc function from kdecore ?
  case $KDE_USE_FAST_MALLOC in
    yes|YES|1) export KDE_MALLOC=1 ;;
  esac
else
  if [ -r /etc/rc.config ]; then
    # Do the user want the SuSE theme ?
    INSTALL_DESKTOP_EXTENSIONS=`bash -c "source /etc/rc.config && echo \\$INSTALL_DESKTOP_EXTENSIONS"`

    # Should we really enable FAM support for KDE ?
    USE_FAM=`bash -c "source /etc/rc.config && echo \\$KDE_USE_FAM"`
    export USE_FAM
  fi

  # Should we use the fast malloc function from kdecore ?
  KDE_USE_FAST_MALLOC=`bash -c "source /etc/rc.config && echo \\$KDE_USE_FAST_MALLOC"`
  case $KDE_USE_FAST_MALLOC in
    yes|YES|1) export KDE_MALLOC=1 ;;
  esac
fi


#
# use optimized libs, if your CPU has the needed support
# (kdemultimedia package has some SSE optimized libs)
[ -z "$LD_HWCAP_MASK" ]    && export LD_HWCAP_MASK=0x20000000

#
# create SuSE defaults
#
if [ "$INSTALL_DESKTOP_EXTENSIONS" == "yes" ]; then
  if [ "$USER" == "root" ]; then
     if [ ! -e "$HOME/.skel/kdebase3" -a ! -e "${kdehome}" ]; then
        if [ -e "/opt/kde3/bin/startkde.theme" ]; then
           . /opt/kde3/bin/startkde.theme
        fi
        copy_default_root "${kdehome}"
     fi
  else
      if [ ! -e "$HOME/.skel/kdebase3" -a ! -e "${kdehome}" ]; then
         if [ -e "/opt/kde3/bin/startkde.theme" ]; then
           . /opt/kde3/bin/startkde.theme
         fi
         copy_default_user "${kdehome}"
         create_default_desktop "$HOME/Desktop/"
      fi
  fi
fi

# 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
sys_odir=$KDEMAINDIR/share/fonts/override
sys_fdir=$KDEMAINDIR/share/fonts

# 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

#
# Add any user-installed font directories to the X font path
kde_fontsdir=$kdehome/share/fonts
kde_fontpaths=$kde_fontsdir/fontpaths
if test -r $kde_fontpaths ; then
    for fpath in `cat $kde_fontpaths | grep -v '#'` ; do
        if test -s $fpath/fonts.dir ; then
            xset fp+ $fpath
        fi
    done
fi

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

#
# Get Ghostscript to look into user's KDE fonts dir for additional Fontmap
if test -n "$GS_LIB" ; then
    GS_LIB=$kde_fontsdir:$GS_LIB
    export GS_LIB
else
    GS_LIB=$kde_fontsdir
    export GS_LIB
fi

#
# shutdown possible running dcopserver, which cause a login failure
# Link "tmp" and "socket" resource to directory in /tmp
# Creates a directory /tmp/kde-$USER and links $KDEHOME/tmp-$HOSTNAME to it.
dcopserver_shutdown
rm -rf "/tmp/ksocket-$USER" "/tmp/kde-$USER"
rm -rf "$KDEHOME/tmp-$HOSTNAME" "$KDEHOME/socket-$HOSTNAME"
lnusertemp tmp >/dev/null
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 +knotify

#
# do we have a configured provider ?
#
if [ -x /${KDEMAINDIR}/bin/kinternet ]; then
   /${KDEMAINDIR}/bin/kinternet --quiet --kicker &
fi

# 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
# kwrapper is used to reduce startup time and memory usage
kwrapper ksmserver --restore

# Clean up
kdeinit_shutdown
dcopserver_shutdown
