#!/bin/sh
#
# @file
#
# Sun VirtualBox
# X11 guest additions: dynamic display changes
#
# Copyright (C) 2008-2009 Sun Microsystems, Inc.
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
# you can redistribute it and/or modify it under the terms of the GNU
# General Public License (GPL) as published by the Free Software
# Foundation, in version 2 as it comes in the "COPYING" file of the
# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
# Clara, CA 95054 USA or visit http://www.sun.com if you need
# additional information or have any questions.
#

#
# In order to keep things simple, we just call the X11 xrandr application
# when we receive notification of a display change instead of reimplementing
# it inside our Guest Additions client application.  This saves us among
# other things having to find ways to build and link the C code on systems
# which do not support RandR 1.2.  We wrap the call to xrandr in this script
# so that we can make any fiddly adjustments to the call which may be needed.
#

xorgbin=Xorg
found=`which Xorg | grep "no Xorg"`
if test ! -z "$found"; then
    if test -f "/usr/X11/bin/Xorg"; then
        xorgbin=/usr/X11/bin/Xorg
    else
        exit 1
    fi
fi

randrbin=xrandr
found=`which xrandr | grep "no xrandr"`
if test ! -z "$found"; then
    if test -f "/usr/X11/bin/xrandr"; then
        randrbin=/usr/X11/bin/xrandr
    else
        exit 1
    fi
fi

refreshbin=xrefresh
found=`which xrefresh | grep "no xrefresh"`
if test ! -z "$found"; then
    if test -f "/usr/X11/bin/xrefresh"; then
        refreshbin=/usr/X11/bin/xrefresh
    else
        exit 1
    fi
fi

# If we were called with the --test parameter, we check whether the display
# we are running on is really using the VBox video driver (and RandR 1.2),
# and whether we are running on a buggy version of X.Org which might crash
# when we resize.
if test "$1" = "--test"; then
    # Check for buggy X.Org versions
    xout=`$xorgbin -version 2>&1`
    if echo "$xout" | grep "1\.4\.99\.90[12345]" > /dev/null
    then
        echo "Warning: the version of the X Window system on your guest has known"
        echo "problems which prevent dynamic resizing and seamless mode from working."
        echo
        exit 1
    fi
    # Don't write out error information in this case, as this script is also
    # called from the installer, and vboxvideo will not yet be in place yet in
    # that case.
    $randrbin 2> /dev/null | grep VBOX1 > /dev/null
    exit
fi

# Otherwise we just switch the guest display into its preferred resolution,
# which is the one corresponding to the last video mode hint sent by the host.
$randrbin --output VBOX1 --preferred
$refreshbin 2>&1 > /dev/null

