#!/bin/sh
#
#  DEFAULT KDE STARTUP SCRIPT ( KDE-3.2 )
#  Modified for Momonga Linux
#
#  first release 2002/07/14 by yosshy <yosshy@momonga-linux.org>
#
#  revised for KDE-3.2 2004/03/12 by nosanosa <nosanosa@momonga-linux.org>
#

# When the X server dies we get a HUP signal from xinit. We must ignore it
# because we still need to do some cleanup.
trap 'echo GOT SIGHUP' HUP

# we have to unset this for Darwin since it will screw up KDE's dynamic-loading
unset DYLD_FORCE_FLAT_NAMESPACE

# Clean up old kde /tmp files that belong to the user
real_display=`echo $DISPLAY | sed "s/://" | sed "s/\..*//"`
rm -f ~/.DCOPserver-`/bin/hostname`_$DISPLAY
for i in /tmp/.ICE-unix/* /tmp/.ICE-unix/.[a-zA-Z0-9]*; do
	[ -O $i ] && rm -f $i
done

## FIX ME!
## this disk space checking code seems to make no sense because valuables 
## space_tmp and space_home are percentage like "50%", 
## so commented out temporary

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

## this is obsolete now (no more /usr/bin/desktopconv)
#if [ -e "$HOME"/.kde/share/config/kpanelrc ]; then
#  # Yuck... We're converting from KDE 1.x. Try to preserve settings.
#  /usr/bin/desktopconv
#fi

## this is obsolete now (no more /etc/skel now)
## create necessary directories/files
#if [ ! -d "$HOME"/Desktop -a -d /etc/skel/Desktop ]; then
#  ( cd /etc/skel && tar cpf - Desktop ) | ( cd "$HOME" && tar xpf - )
#fi

## this is obsolete now (no more /etc/skel now)
#if [ ! -d "$HOME"/.kde -a -d /etc/skel/.kde ]; then
#  ( cd /etc/skel && tar cpf - .kde ) | ( cd "$HOME" && tar xpf - )
#fi

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

if [ ! -e "$HOME"/.kde/share/config/kcmlaptoprc -a -e /proc/apm ]; then
  # Try to figure out if we're on a laptop
  if ! /bin/cat /proc/apm |grep -q "?"; then
    # We appear to be on a laptop with battery status notification
    cat >"$HOME"/.kde/share/config/kcmlaptoprc <<EOF
[BatteryDefault]
Enable=true
EOF
  fi
fi

if [ ! -e "$HOME"/.kde/share/config/kdeglobals ]; then
  # 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
  cp /usr/share/config/kdeglobals.ja $HOME/.kde/share/config/kdeglobals
fi
## this is obsolete now (no more /etc/skel now)
#if [ ! -f "$HOME"/.kderc -a -e /etc/skel/.kderc ]; then
#  cp /etc/skel/.kderc "$HOME"
#  chmod 0600 "$HOME"/.kderc
#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.

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

kdehome=$HOME/.kde
test -n "$KDEHOME" && kdehome=`echo "$KDEHOME"|sed "s,^\~/,$HOME/,"`

# 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=$HOME/.fonts/kde-override
usr_fdir=$HOME/.fonts

# Add any user-installed font directories to the X font path
kde_fontpaths=$usr_fdir/fontpaths
do_usr_fdir=1
do_usr_odir=1
if test -r "$kde_fontpaths" ; then
    savifs=$IFS
    IFS=$'\n'
    for fpath in `grep -v '^[   ]*#' < "$kde_fontpaths"` ; do
        rfpath=`echo $fpath | sed s:\~:$HOME:g`
        if test -s "$rfpath"/fonts.dir; then
            xset fp+ "$rfpath"
            if test "$rfpath" = "$usr_fdir"; then
                do_usr_fdir=0
            fi
            if test "$rfpath" = "$usr_odir"; then
                do_usr_odir=0
            fi
        fi
    done
    IFS=$savifs
fi

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.

# Only do usr_fdir and usr_odir if they are *not* listed in fontpaths
test -d "$sys_odir" && xset +fp "$sys_odir"
test $do_usr_odir -eq 1 && test -d "$usr_odir" && (mkfontdir "$usr_odir" ; xset +fp "$usr_odir")
test $do_usr_fdir -eq 1 && 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

# if the user has overwritten fonts, the cursor font may be different now
# so don't move this up

# 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 the Red Hat default blue
# 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.

#test "$XDM_MANAGED" || bkg="-solid #C0C0C0"
test "$XDM_MANAGED" || bkg="-solid #356390"
xsetroot -cursor_name left_ptr $bkg

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

# 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

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

# In case of dcop sockets left by a previous session, cleanup
dcopserver_shutdown

echo 'startkde: Starting up...'  1>&2

# run KPersonalizer before the session, if this is the first login
if kreadconfig --file kpersonalizerrc --group General --key FirstLogin --default true --type bool; then
    # start only dcopserver, don't start whole kdeinit (takes too long)
    echo 'startkde: Running kpersonalizer...'  1>&2
    dcopserver
    kwin --lock &
    kpersonalizer --before-session
    # handle kpersonalizer restarts (language change)
    while test $? -eq 1; do
        kpersonalizer --r --before-session
    done
    dcopserver_shutdown
    # shutdown will also make kwin quit, give it time to do so
    sleep 1
fi

# the splashscreen and progress indicator
ksplash --nodcop

# kdeinit, the mother of all KDE programs, is started with the user's shell
# so that all environment variables are set correctly (when starting it from
# xdm/kdm, the interactive flag is set, so that it reads .<session>rc)
# We set LD_BIND_NOW to increase the efficiency of kdeinit.
# kdeinit unsets this variable before loading applications.

## FIX ME!
## Which is proper, original or momonga-traditional?

## This is original code in startkde in kdebase-3.2.1
#LD_BIND_NOW=true kdeinit +kcminit +knotify
#if test $? -ne 0; then
#  # Startup error
#  echo 'startkde: Could not start kdeinit. Check your installation.'  1>&2
#  xmessage -geometry 500x100 "Could not start kdeinit. Check your installation."
#fi
## This is modified (momonga-traditional) code inherited from old startkde.momonga 
tty -s; if test $? -eq 1; then opt="-i"; fi
case "$SHELL" in
    *csh) exportc="setenv LD_BIND_NOW true;" ;;
    *) exportc="LD_BIND_NOW=true; export LD_BIND_NOW;" ;;
esac
$SHELL $opt -c "$exportc kdeinit +kcminit +knotify" || \
  xmessage -geometry 500x100 "Couldn't start kdeinit. Check your installation."

# finally, give the session control to the session manager
# if the KDEWM environment variable has been set, then it will be used as KDE's
# window manager instead of kwin.
# if KDEWM is not set, ksmserver will ensure kwin is started.
# kwrapper is used to reduce startup time and memory usage
# kwrapper does not return usefull error codes such as the exit code of ksmserver.
# We only check for 255 which means that the ksmserver process could not be 
# started, any problems thereafter, e.g. ksmserver failing to initialize, 
# will remain undetected.
test -n "$KDEWM" && KDEWM="--windowmanager $KDEWM"
kwrapper ksmserver $KDEWM 
if test $? -eq 255; then
  # Startup error
  echo 'startkde: Could not start ksmserver. Check your installation.'  1>&2
  xmessage -geometry 500x100 "Could not start ksmserver. Check your installation."
fi

echo 'startkde: Shutting down...'  1>&2

# Clean up
kdeinit_shutdown
dcopserver_shutdown
artsshell -q terminate

echo 'startkde: Running shutdown scripts...'  1>&2

# Run scripts found in $KDEDIRS/shutdown
for prefix in `kde-config --path exe| sed -e 's^bin/^shutdown/^g;s^:^ ^g'`
do 
  for file in $prefix/*
  do 
    if test -f $file
    then 
       $file
    fi
  done
done

echo 'startkde: Done.'  1>&2

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

    if xdpyinfo | grep RENDER >& /dev/null ; then
      AA="true"
    else
      AA="false"
    fi

    if [ "$LANG" = "ja_JP.EUC-JP" -o "$LANG" = "ja_JP.eucJP" ]; then
      if [ "$AA" = "true" ]; then
        # ugly but it's working
        FONTALIAS="Sans"
      else
        FONTALIAS="alias-variable"
      fi
    else
      FONTALIAS="alias-variable"
    fi

    cat >>$HOME/.kderc <<EOF
[General]
activeFont=$FONTALIAS,12,5,17,75,0
background=220,220,220
fixed=$FONTALIAS,10,5,17,50,0
font=$FONTALIAS,12,5,17,50,0
foreground=0,0,0
menuFont=$FONTALIAS,12,5,17,50,0
selectBackground=10,95,137
selectForeground=255,255,255
taskbarFont=$FONTALIAS,11,5,17,50,0
toolBarFont=$FONTALIAS,12,5,17,50,0
windowBackground=255,255,255
windowForeground=0,0,0
EOF

    cat >>$HOME/.kde/share/config/kdeglobals <<EOF
[KDE]
AntiAliasing=$AA

[Locale]
Country=$COUNTRY
Language=$LNG
Charset=$CHARSET

[General]
fixed=$FONTALIAS,9,5,17,50,0
fixedCharset=$CHARSET
font=$FONTALIAS,11,5,17,50,0
fontCharset=$CHARSET
menuFont=$FONTALIAS,11,5,17,50,0
menuFontCharset=$CHARSET
taskbarFont=$FONTALIAS,11,5,17,50,0
taskbarFontCharset=$CHARSET
toolBarFont=$FONTALIAS,11,5,17,50,0
toolBarFontCharset=$CHARSET

[PanelIcons]
Size=32

[WM]
activeFont=$FONTALIAS,12,5,17,75,0
activeFontCharset=$CHARSET
EOF

    cat >>$HOME/.kde/share/config/konquerorrc <<EOF
[FMSettings]
StandardFont=$FONTALIAS,12,5,17,0,0
StandardFontCharset=$CHARSET

[HTML Settings]
DefaultEncoding=$CHARSET
MinimumFontSize=10
EOF

    cat >>$HOME/.kde/share/config/kdesktoprc <<EOF
[Desktop0]
BackgroundMode=VerticalGradient
BlendBalance=100
BlendMode=NoBlending
ChangeInterval=60
Color1=30,114,160
Color2=192,192,192
CurrentWallpaper=0
LastChange=0
MultiWallpaperMode=NoMulti
Pattern=
Program=
ReverseBlending=false
Wallpaper=/usr/share/config/mo_1024x768.png
WallpaperList=
WallpaperMode=Scaled

[FMSettings]
StandardFont=$FONTALIAS,12,5,17,0,0
StandardFontCharset=$CHARSET
EOF

    cat >>$HOME/.kde/share/config/kpersonalizerrc <<EOF
[General]
FirstLogin=false
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

# create necessary directories/files
if [ -d /usr/share/kde/Desktop ]; then
  cp -aR /usr/share/kde/Desktop $HOME
fi

if [ ! -d $HOME/.kde -a -d /usr/share/kde/.kde ]; then
  cp -aR /usr/share/kde/.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`
  # Some locales require special treatment...
  if [ "$LANG" = "ja_JP.EUC-JP" -o "$LANG" = "ja_JP.eucJP" ]; then
    CHARSET="jisx0208.1983-0"
  fi
  setfont
fi

# ugly, however it's working. sometimes kdeinit left core...
if [ -f $HOME/core ] ; then
  rm $HOME/core
fi
