#!/bin/bash

# first get helper functions (e.g. DEBUG, load_scheme, ...)
. "${0%/*}/scripts/helper_functions"
. "${SCRIPT_DIR}/scripts/x_helper_functions"

# ugly. Do not dpms off the screen if we are only going to sleep state.
case "$1" in
    global.suspend2disk|global.suspend2ram|global.standby)
        SCREENSAVER_DPMS_OFF=no ;;
    *) ;;
esac

# Lock the screen using xlock.
xlock_screen_saver(){
    local LOCK_MODE=""
    DEBUG "process function: xlock_screen_saver" DEBUG

    get_x_user
    [ "$SCREENSAVER_BLANKONLY" == "yes" ] && LOCK_MODE="-mode blank"

    [ -n "$X_USER" -a -n "$DISP" ] && su $X_USER -s /bin/bash -c "$DPMS xlock $LOCK_MODE -display $DISP &"
    if [ $? != "0" ]; then
	DEBUG "xlock failed for user '$X_USER'" DIAG
	return 1
    fi
    return 0
}

#####################################################################
# kde_screen_saver and xscreensaver_screen_saver are no longer used #
# use a graphical frontend like kpowersave instead                  #
# these are only here for your hacking pleasure...                  #
#####################################################################

# for KDE...
kde_screen_saver(){
    local LOCK_MODE=""
    local LOCK_MODE2=""
    DEBUG "process function: kde_screen_saver" DEBUG

    get_x_user
    local KDE_LOCK="DISPLAY=$DISP /opt/kde3/bin/dcop kdesktop KScreensaverIface"
    [ "$SCREENSAVER_BLANKONLY" == "yes" ] && {
        LOCK_MODE="$KDE_LOCK setBlankonly true;"
        LOCK_MODE2="$DEE_LOCK setBlankonly false;"
    }

    [ -n "$X_USER" -a -n "$DISP" ] && su $X_USER -s /bin/bash -c \
        "$DPMS $LOCK_MODE $KDE_LOCK lock; X=\$?; $LOCK_MODE2 exit \$X"
    if [ $? != "0" ]; then
        DEBUG "Could not activate KDE screen saver." DIAG
        return 1;
    fi
    return 0
}

# for GNOME or other xscreensaver-users
xscreensaver_screen_saver(){
    local LOCK_MODE=""
    DEBUG "process function: xscreensaver_screen_saver" DEBUG

    get_x_user
    [ "$SCREENSAVER_BLANKONLY" == "yes" ] && \
        LOCK_MODE="xscreensaver-command -display $DISP -throttle &&"

    [ -n "$X_USER" -a -n "$DISP" ] && su $X_USER -s /bin/bash -c \
        "$DPMS $LOCK_MODE xscreensaver-command -display $DISP -lock"
    if [ $? != "0" ]; then
        DEBUG "Could not activate xscreensaver." DIAG
        return 1;
    fi
    return 0
}

# we already log this at DIAG level in helper_functions
DEBUG "process script: screen_saver" INFO
get_x_users
i=0; ret=0

while [ "${X_USERS[$i]}" ]; do
    X_USER=${X_USERS[$i]}; DISP=${DISPS[$i]};
    # ugly hack
    if [ "$SCREENSAVER_DPMS_OFF" != "no" ]; then
        DPMS="xset -display $DISP dpms force off &"     # asynchronous or it may block
    else
        DPMS=""
    fi
    xlock_screen_saver
    if [ $? != "0" ]; then
       DEBUG "screen_saver failed for user '$X_USER' event ${EVENT_TYPE}${EVENT_SUBTYPE:+_$EVENT_SUBTYPE}${EVENT_EXT:+_$EVENT_EXT}" DIAG
       ret=1
    fi
    let i++
done
$SCRIPT_RETURN $EV_ID $ret "Script screen_saver"
EXIT $ret
