toolkit: first cut at switching to VclPtr.

Toolkit has traditionally had a very odd lifecycle relationship
with VCL - start to fix that; first partial cut.

Change-Id: I77e5e62ebde101d32746d12d83dae92c49970001
diff --git a/include/toolkit/awt/vclxaccessiblecomponent.hxx b/include/toolkit/awt/vclxaccessiblecomponent.hxx
index 62d167b..d168ee1 100644
--- a/include/toolkit/awt/vclxaccessiblecomponent.hxx
+++ b/include/toolkit/awt/vclxaccessiblecomponent.hxx
@@ -33,6 +33,7 @@
#include <comphelper/accessiblecomponenthelper.hxx>

#include <tools/link.hxx>
#include <vcl/vclptr.hxx>

namespace vcl { class Window; }
class VCLXWindow;
@@ -83,7 +84,7 @@ public:
    virtual ~VCLXAccessibleComponent();

    VCLXWindow*    GetVCLXWindow() const { return mpVCLXindow; }
    vcl::Window*        GetWindow() const;
    VclPtr<vcl::Window> GetWindow() const;

    virtual void SAL_CALL disposing() SAL_OVERRIDE;

diff --git a/include/toolkit/awt/vclxdevice.hxx b/include/toolkit/awt/vclxdevice.hxx
index 61d5689..751ffd82 100644
--- a/include/toolkit/awt/vclxdevice.hxx
+++ b/include/toolkit/awt/vclxdevice.hxx
@@ -27,43 +27,40 @@
#include <cppuhelper/weak.hxx>
#include <osl/mutex.hxx>
#include <vcl/virdev.hxx>
#include <vcl/vclptr.hxx>

#include <com/sun/star/awt/XUnitConversion.hpp>

class OutputDevice;
class VirtualDevice;


//  class VCLXDevice


// For using nDummy, no incompatible update, add a sal_Bool bCreatedWithToolkitMember later...
#define FLAGS_CREATEDWITHTOOLKIT    0x00000001

class TOOLKIT_DLLPUBLIC VCLXDevice :    public ::com::sun::star::awt::XDevice,
/// An UNO wrapper for the VCL OutputDevice
class TOOLKIT_DLLPUBLIC VCLXDevice :
                    public ::com::sun::star::awt::XDevice,
                    public ::com::sun::star::lang::XTypeProvider,
                    public ::com::sun::star::lang::XUnoTunnel,
                    public ::com::sun::star::awt::XUnitConversion,
                    public ::cppu::OWeakObject
{
    friend class VCLXGraphics;
    friend class VCLXVirtualDevice;

private:
    OutputDevice*           mpOutputDevice;
    VclPtr<OutputDevice>    mpOutputDevice;

public:
    void*                   pDummy;
    sal_uInt32              nFlags;

protected:
    void                    DestroyOutputDevice();

public:
                            VCLXDevice();
                            virtual ~VCLXDevice();

    void                    SetOutputDevice( OutputDevice* pOutDev ) { mpOutputDevice = pOutDev; }
    OutputDevice*           GetOutputDevice() const { return mpOutputDevice; }
    void                    SetOutputDevice( VclPtr<OutputDevice> pOutDev ) { mpOutputDevice = pOutDev; }
    VclPtr<OutputDevice>    GetOutputDevice() const { return mpOutputDevice; }

    void                    SetCreatedWithToolkit( bool bCreatedWithToolkit );

diff --git a/include/toolkit/awt/vclxwindow.hxx b/include/toolkit/awt/vclxwindow.hxx
index 6306ce6..dfc42aa 100644
--- a/include/toolkit/awt/vclxwindow.hxx
+++ b/include/toolkit/awt/vclxwindow.hxx
@@ -128,8 +128,12 @@ public:
    VCLXWindow( bool bWithDefaultProps = false );
    virtual ~VCLXWindow();

    virtual void    SetWindow( vcl::Window* pWindow );
    vcl::Window*    GetWindow() const { return static_cast<vcl::Window*>(GetOutputDevice()); }
    virtual void        SetWindow( VclPtr<vcl::Window> pWindow );
    template< class derived_type > VclPtr< derived_type > GetAs() const {
        return VclPtr< derived_type >( static_cast< derived_type * >( GetOutputDevice().get() ) ); }
    template< class derived_type > VclPtr< derived_type > GetAsDynamic() const {
        return VclPtr< derived_type >( dynamic_cast< derived_type * >( GetOutputDevice().get() ) ); }
    VclPtr<vcl::Window> GetWindow() const { return GetAs<vcl::Window>(); }

    void    suspendVclEventListening( );
    void    resumeVclEventListening( );
diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx
index 71ff494..d30b5ee 100644
--- a/sfx2/source/view/viewprn.cxx
+++ b/sfx2/source/view/viewprn.cxx
@@ -209,7 +209,7 @@ Sequence< beans::PropertyValue > SfxPrinterController::getMergedOptions() const
    {
        mpLastPrinter = xPrinter.get();
        VCLXDevice* pXDevice = new VCLXDevice();
        pXDevice->SetOutputDevice( mpLastPrinter );
        pXDevice->SetOutputDevicePtr( mpLastPrinter );
        mxDevice = Reference< awt::XDevice >( pXDevice );
    }

diff --git a/toolkit/source/awt/animatedimagespeer.cxx b/toolkit/source/awt/animatedimagespeer.cxx
index 13da483..b9215fc 100644
--- a/toolkit/source/awt/animatedimagespeer.cxx
+++ b/toolkit/source/awt/animatedimagespeer.cxx
@@ -182,8 +182,8 @@ namespace toolkit

        void lcl_updateImageList_nothrow( AnimatedImagesPeer_Data& i_data )
        {
            Throbber* pThrobber = dynamic_cast< Throbber* >( i_data.rAntiImpl.GetWindow() );
            if ( pThrobber == NULL )
            VclPtr<Throbber> pThrobber = i_data.rAntiImpl.GetAsDynamic<Throbber>();
            if ( !pThrobber )
                return;

            try
@@ -308,40 +308,37 @@ namespace toolkit
    }


    void SAL_CALL AnimatedImagesPeer::startAnimation(  ) throw (RuntimeException, std::exception)
    void SAL_CALL AnimatedImagesPeer::startAnimation() throw (RuntimeException, std::exception)
    {
        SolarMutexGuard aGuard;
        Throbber* pThrobber( dynamic_cast< Throbber* >( GetWindow() ) );
        if ( pThrobber != NULL)
        VclPtr<Throbber> pThrobber = GetAsDynamic<Throbber>();
        if (pThrobber)
            pThrobber->start();
    }


    void SAL_CALL AnimatedImagesPeer::stopAnimation(  ) throw (RuntimeException, std::exception)
    void SAL_CALL AnimatedImagesPeer::stopAnimation() throw (RuntimeException, std::exception)
    {
        SolarMutexGuard aGuard;
        Throbber* pThrobber( dynamic_cast< Throbber* >( GetWindow() ) );
        if ( pThrobber != NULL)
        VclPtr<Throbber> pThrobber = GetAsDynamic<Throbber>();
        if (pThrobber)
            pThrobber->stop();
    }


    sal_Bool SAL_CALL AnimatedImagesPeer::isAnimationRunning(  ) throw (RuntimeException, std::exception)
    sal_Bool SAL_CALL AnimatedImagesPeer::isAnimationRunning() throw (RuntimeException, std::exception)
    {
        SolarMutexGuard aGuard;
        Throbber* pThrobber( dynamic_cast< Throbber* >( GetWindow() ) );
        if ( pThrobber != NULL)
        VclPtr<Throbber> pThrobber = GetAsDynamic<Throbber>();
        if (pThrobber)
            return pThrobber->isRunning();
        return sal_False;
    }


    void SAL_CALL AnimatedImagesPeer::setProperty( const OUString& i_propertyName, const Any& i_value ) throw(RuntimeException, std::exception)
    {
        SolarMutexGuard aGuard;

        Throbber* pThrobber( dynamic_cast< Throbber* >( GetWindow() ) );
        if ( pThrobber == NULL )
        VclPtr<Throbber> pThrobber = GetAsDynamic<Throbber>();
        if ( pThrobber )
        {
            VCLXWindow::setProperty( i_propertyName, i_value );
            return;
@@ -368,11 +365,9 @@ namespace toolkit
            case BASEPROPERTY_IMAGE_SCALE_MODE:
            {
                sal_Int16 nScaleMode( ImageScaleMode::ANISOTROPIC );
                ImageControl* pImageControl = dynamic_cast< ImageControl* >( GetWindow() );
                VclPtr<ImageControl> pImageControl = GetAsDynamic< ImageControl >();
                if ( pImageControl && ( i_value >>= nScaleMode ) )
                {
                    pImageControl->SetScaleMode( nScaleMode );
                }
            }
            break;

@@ -389,8 +384,8 @@ namespace toolkit

        Any aReturn;

        Throbber* pThrobber( dynamic_cast< Throbber* >( GetWindow() ) );
        if ( pThrobber == NULL )
        VclPtr<Throbber> pThrobber = GetAsDynamic<Throbber>();
        if ( !pThrobber )
            return VCLXWindow::getProperty( i_propertyName );

        const sal_uInt16 nPropertyId = GetPropertyId( i_propertyName );
@@ -406,7 +401,7 @@ namespace toolkit

        case BASEPROPERTY_IMAGE_SCALE_MODE:
            {
                ImageControl const* pImageControl = dynamic_cast< ImageControl* >( GetWindow() );
                VclPtr<ImageControl> pImageControl = GetAsDynamic<ImageControl>();
                aReturn <<= ( pImageControl ? pImageControl->GetScaleMode() : ImageScaleMode::ANISOTROPIC );
            }
            break;
diff --git a/toolkit/source/awt/vclxaccessiblecomponent.cxx b/toolkit/source/awt/vclxaccessiblecomponent.cxx
index b1f3386..1dcb9b8 100644
--- a/toolkit/source/awt/vclxaccessiblecomponent.cxx
+++ b/toolkit/source/awt/vclxaccessiblecomponent.cxx
@@ -356,14 +356,15 @@ void VCLXAccessibleComponent::disposing()
    mpVCLXindow = NULL;
}

vcl::Window* VCLXAccessibleComponent::GetWindow() const
VclPtr<vcl::Window> VCLXAccessibleComponent::GetWindow() const
{
    return GetVCLXWindow() ? GetVCLXWindow()->GetWindow() : NULL;
    return GetVCLXWindow() ? GetVCLXWindow()->GetWindow()
                           : VclPtr<vcl::Window>();
}

void VCLXAccessibleComponent::FillAccessibleRelationSet( utl::AccessibleRelationSetHelper& rRelationSet )
{
    vcl::Window* pWindow = GetWindow();
    VclPtr<vcl::Window> pWindow = GetWindow();
    if ( pWindow )
    {
        vcl::Window *pLabeledBy = pWindow->GetAccessibleRelationLabeledBy();
@@ -394,7 +395,7 @@ void VCLXAccessibleComponent::FillAccessibleRelationSet( utl::AccessibleRelation

void VCLXAccessibleComponent::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
{
    vcl::Window* pWindow = GetWindow();
    VclPtr<vcl::Window> pWindow = GetWindow();
    if ( pWindow )
    {
        if ( pWindow->IsVisible() )
@@ -433,7 +434,7 @@ void VCLXAccessibleComponent::FillAccessibleStateSet( utl::AccessibleStateSetHel
            rStateSet.AddState( accessibility::AccessibleStateType::MOVEABLE );
        if( pWindow->IsDialog() )
        {
            Dialog *pDlg = static_cast< Dialog* >( pWindow );
            Dialog *pDlg = static_cast< Dialog* >( pWindow.get() );
            if( pDlg->IsInExecute() )
                rStateSet.AddState( accessibility::AccessibleStateType::MODAL );
        }
@@ -442,26 +443,26 @@ void VCLXAccessibleComponent::FillAccessibleStateSet( utl::AccessibleStateSetHel
        if( pWindow && pWindow->GetType() == WINDOW_COMBOBOX )
        {
            if( !( pWindow->GetStyle() & WB_READONLY) ||
                !static_cast<Edit*>(pWindow)->IsReadOnly() )
                !static_cast<Edit*>(pWindow.get())->IsReadOnly() )
                    rStateSet.AddState( accessibility::AccessibleStateType::EDITABLE );
        }

        vcl::Window* pChild = pWindow->GetWindow( WINDOW_FIRSTCHILD );
        VclPtr<vcl::Window> pChild = pWindow->GetWindow( WINDOW_FIRSTCHILD );

        while( pWindow && pChild )
        {
            vcl::Window* pWinTemp = pChild->GetWindow( WINDOW_FIRSTCHILD );
            VclPtr<vcl::Window> pWinTemp = pChild->GetWindow( WINDOW_FIRSTCHILD );
            if( pWinTemp && pWinTemp->GetType() == WINDOW_EDIT )
            {
                if( !( pWinTemp->GetStyle() & WB_READONLY) ||
                    !static_cast<Edit*>(pWinTemp)->IsReadOnly() )
                    !static_cast<Edit*>(pWinTemp.get())->IsReadOnly() )
                    rStateSet.AddState( accessibility::AccessibleStateType::EDITABLE );
                break;
            }
            if( pChild->GetType() == WINDOW_EDIT )
            {
                if( !( pChild->GetStyle() & WB_READONLY) ||
                    !static_cast<Edit*>(pChild)->IsReadOnly())
                    !static_cast<Edit*>(pChild.get())->IsReadOnly())
                    rStateSet.AddState( accessibility::AccessibleStateType::EDITABLE );
                break;
            }
diff --git a/toolkit/source/awt/vclxdevice.cxx b/toolkit/source/awt/vclxdevice.cxx
index 57cd040..e464d72 100644
--- a/toolkit/source/awt/vclxdevice.cxx
+++ b/toolkit/source/awt/vclxdevice.cxx
@@ -43,8 +43,7 @@
//  class VCLXDevice

VCLXDevice::VCLXDevice()
    : mpOutputDevice(NULL)
    , pDummy(NULL)
    : pDummy(NULL)
    , nFlags(0)
{
}
@@ -53,12 +52,6 @@ VCLXDevice::~VCLXDevice()
{
}

void VCLXDevice::DestroyOutputDevice()
{
    delete mpOutputDevice;
    mpOutputDevice = NULL;
}

void VCLXDevice::SetCreatedWithToolkit( bool bCreatedWithToolkit )
{
    if ( bCreatedWithToolkit )
@@ -129,14 +122,14 @@ IMPL_XTYPEPROVIDER_END
        OutDevType eDevType = mpOutputDevice->GetOutDevType();
        if ( eDevType == OUTDEV_WINDOW )
        {
            aDevSz = static_cast<vcl::Window*>(mpOutputDevice)->GetSizePixel();
            static_cast<vcl::Window*>(mpOutputDevice)->GetBorder( aInfo.LeftInset, aInfo.TopInset, aInfo.RightInset, aInfo.BottomInset );
            aDevSz = static_cast<vcl::Window*>(mpOutputDevice.get())->GetSizePixel();
            static_cast<vcl::Window*>(mpOutputDevice.get())->GetBorder( aInfo.LeftInset, aInfo.TopInset, aInfo.RightInset, aInfo.BottomInset );
        }
        else if ( eDevType == OUTDEV_PRINTER )
        {
            aDevSz = static_cast<Printer*>(mpOutputDevice)->GetPaperSizePixel();
            aDevSz = static_cast<Printer*>(mpOutputDevice.get())->GetPaperSizePixel();
            Size aOutSz = mpOutputDevice->GetOutputSizePixel();
            Point aOffset = static_cast<Printer*>(mpOutputDevice)->GetPageOffset();
            Point aOffset = static_cast<Printer*>(mpOutputDevice.get())->GetPageOffset();
            aInfo.LeftInset = aOffset.X();
            aInfo.TopInset = aOffset.Y();
            aInfo.RightInset = aDevSz.Width() - aOutSz.Width() - aOffset.X();
@@ -228,19 +221,15 @@ IMPL_XTYPEPROVIDER_END
    return xDBmp;
}


VCLXVirtualDevice::~VCLXVirtualDevice()
{
    SolarMutexGuard aGuard;

    DestroyOutputDevice();
    mpOutputDevice.disposeAndClear();
}



// Interface implementation of ::com::sun::star::awt::XUnitConversion


::com::sun::star::awt::Point SAL_CALL VCLXDevice::convertPointToLogic( const ::com::sun::star::awt::Point& aPoint, ::sal_Int16 TargetUnit ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
{
    (void)aPoint;
diff --git a/toolkit/source/awt/vclxspinbutton.cxx b/toolkit/source/awt/vclxspinbutton.cxx
index b3ab308..2488359 100644
--- a/toolkit/source/awt/vclxspinbutton.cxx
+++ b/toolkit/source/awt/vclxspinbutton.cxx
@@ -199,7 +199,7 @@ namespace toolkit
    {
        SolarMutexClearableGuard aGuard;
        Reference< XSpinValue > xKeepAlive( this );
        SpinButton* pSpinButton = static_cast< SpinButton* >( GetWindow() );
        VclPtr<SpinButton> pSpinButton = GetAs<SpinButton>();
        if ( !pSpinButton )
            return;

diff --git a/toolkit/source/awt/vclxtabpagecontainer.cxx b/toolkit/source/awt/vclxtabpagecontainer.cxx
index b0e0ef1..7eb39fa 100644
--- a/toolkit/source/awt/vclxtabpagecontainer.cxx
+++ b/toolkit/source/awt/vclxtabpagecontainer.cxx
@@ -57,7 +57,7 @@ VCLXTabPageContainer::~VCLXTabPageContainer()
void SAL_CALL VCLXTabPageContainer::draw( sal_Int32 nX, sal_Int32 nY ) throw(RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
    TabControl* pTabControl = static_cast<TabControl*>(GetWindow());
    VclPtr<TabControl> pTabControl = GetAs<TabControl>();
    if ( pTabControl )
    {
        TabPage *pTabPage = pTabControl->GetTabPage( sal::static_int_cast< sal_uInt16 >(  pTabControl->GetCurPageId( ) ) );
@@ -86,37 +86,40 @@ void SAL_CALL VCLXTabPageContainer::draw( sal_Int32 nX, sal_Int32 nY ) throw(Run
void SAL_CALL VCLXTabPageContainer::setProperty(const OUString& PropertyName,   const Any& Value ) throw(RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    TabControl* pTabPage = static_cast<TabControl*>(GetWindow());
    VclPtr<TabControl> pTabPage = GetAs<TabControl>();
    if ( pTabPage )
    {
        VCLXWindow::setProperty( PropertyName, Value );
    }
}

::sal_Int16 SAL_CALL VCLXTabPageContainer::getActiveTabPageID() throw (RuntimeException, std::exception)
{
    TabControl* pTabCtrl = static_cast<TabControl*>(GetWindow());
    return pTabCtrl != NULL ? pTabCtrl->GetCurPageId( ) : 0;
    VclPtr<TabControl> pTabCtrl = GetAs<TabControl>();
    return pTabCtrl ? pTabCtrl->GetCurPageId( ) : 0;
}

void SAL_CALL VCLXTabPageContainer::setActiveTabPageID( ::sal_Int16 _activetabpageid ) throw (RuntimeException, std::exception)
{
    TabControl* pTabCtrl = static_cast<TabControl*>(GetWindow());
    VclPtr<TabControl> pTabCtrl = GetAs<TabControl>();
    if ( pTabCtrl )
        pTabCtrl->SelectTabPage(_activetabpageid);
}

::sal_Int16 SAL_CALL VCLXTabPageContainer::getTabPageCount(  ) throw (RuntimeException, std::exception)
{
    TabControl* pTabCtrl = static_cast<TabControl*>(GetWindow());
    return pTabCtrl != NULL ? pTabCtrl->GetPageCount() : 0;
    VclPtr<TabControl> pTabCtrl = GetAs<TabControl>();
    return pTabCtrl ? pTabCtrl->GetPageCount() : 0;
}

sal_Bool SAL_CALL VCLXTabPageContainer::isTabPageActive( ::sal_Int16 tabPageIndex ) throw (RuntimeException, std::exception)
{
    return (getActiveTabPageID() == tabPageIndex);
}

Reference< ::com::sun::star::awt::tab::XTabPage > SAL_CALL VCLXTabPageContainer::getTabPage( ::sal_Int16 tabPageIndex ) throw (RuntimeException, std::exception)
{
    return (tabPageIndex >= 0 && tabPageIndex < static_cast<sal_Int16>(m_aTabPages.size())) ? m_aTabPages[tabPageIndex] : NULL;
}

Reference< ::com::sun::star::awt::tab::XTabPage > SAL_CALL VCLXTabPageContainer::getTabPageByID( ::sal_Int16 tabPageID ) throw (RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
@@ -135,10 +138,12 @@ Reference< ::com::sun::star::awt::tab::XTabPage > SAL_CALL VCLXTabPageContainer:
    }
    return xTabPage;
}

void SAL_CALL VCLXTabPageContainer::addTabPageContainerListener( const Reference< ::com::sun::star::awt::tab::XTabPageContainerListener >& listener ) throw (RuntimeException, std::exception)
{
    m_aTabPageListeners.addInterface( listener );
}

void SAL_CALL VCLXTabPageContainer::removeTabPageContainerListener( const Reference< ::com::sun::star::awt::tab::XTabPageContainerListener >& listener ) throw (RuntimeException, std::exception)
{
    m_aTabPageListeners.removeInterface( listener );
@@ -147,7 +152,7 @@ void SAL_CALL VCLXTabPageContainer::removeTabPageContainerListener( const Refere
void VCLXTabPageContainer::ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent )
{
    SolarMutexClearableGuard aGuard;
    TabControl* pTabControl = static_cast< TabControl* >( GetWindow() );
    VclPtr<TabControl> pTabControl = GetAs<TabControl>();
    if ( pTabControl )
    {
        switch ( _rVclWindowEvent.GetId() )
@@ -172,7 +177,7 @@ void SAL_CALL VCLXTabPageContainer::disposing( const ::com::sun::star::lang::Eve
void SAL_CALL VCLXTabPageContainer::elementInserted( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
    TabControl* pTabCtrl = static_cast<TabControl*>(GetWindow());
    VclPtr<TabControl> pTabCtrl = GetAs<TabControl>();
    Reference< ::com::sun::star::awt::tab::XTabPage > xTabPage(Event.Element,uno::UNO_QUERY);
    if ( pTabCtrl && xTabPage.is() )
    {
@@ -196,7 +201,7 @@ void SAL_CALL VCLXTabPageContainer::elementInserted( const ::com::sun::star::con
void SAL_CALL VCLXTabPageContainer::elementRemoved( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
    TabControl* pTabCtrl = static_cast<TabControl*>(GetWindow());
    VclPtr<TabControl> pTabCtrl = GetAs<TabControl>();
    Reference< ::com::sun::star::awt::tab::XTabPage > xTabPage(Event.Element,uno::UNO_QUERY);
    if ( pTabCtrl && xTabPage.is() )
    {
diff --git a/toolkit/source/awt/vclxwindow.cxx b/toolkit/source/awt/vclxwindow.cxx
index 3d7a22d..84a1d75 100644
--- a/toolkit/source/awt/vclxwindow.cxx
+++ b/toolkit/source/awt/vclxwindow.cxx
@@ -366,7 +366,7 @@ void VCLXWindow::ImplExecuteAsyncWithoutSolarLock( const Callback& i_callback )
    return mpImpl->getAccessibleFactory().getFactory();
}

void VCLXWindow::SetWindow( vcl::Window* pWindow )
void VCLXWindow::SetWindow( VclPtr<vcl::Window> pWindow )
{
    if ( GetWindow() )
    {
@@ -922,10 +922,10 @@ void VCLXWindow::dispose(  ) throw(::com::sun::star::uno::RuntimeException, std:

        if ( GetWindow() )
        {
            OutputDevice* pOutDev = GetOutputDevice();
            VclPtr<OutputDevice> pOutDev = GetOutputDevice();
            SetWindow( NULL );  // so that handlers are logged off, if necessary (virtual)
            SetOutputDevice( pOutDev );
            DestroyOutputDevice();
            SetOutputDevice( NULL );
            pOutDev.disposeAndClear();
        }

        // #i14103# dispose the accessible context after the window has been destroyed,
@@ -1921,7 +1921,7 @@ void VCLXWindow::setProperty( const OUString& PropertyName, const ::com::sun::st
        {
            case BASEPROPERTY_REFERENCE_DEVICE:
            {
                Control* pControl = dynamic_cast< Control* >( GetWindow() );
                VclPtr<Control> pControl = GetAsDynamic<Control >();
                OSL_ENSURE( pControl, "VCLXWindow::setProperty( RefDevice ): need a Control for this!" );
                if ( !pControl )
                    break;
diff --git a/toolkit/source/awt/vclxwindows.cxx b/toolkit/source/awt/vclxwindows.cxx
index a30695d..b3c07eb 100644
--- a/toolkit/source/awt/vclxwindows.cxx
+++ b/toolkit/source/awt/vclxwindows.cxx
@@ -215,7 +215,7 @@ void VCLXGraphicControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
void VCLXGraphicControl::ImplSetNewImage()
{
    OSL_PRECOND( GetWindow(), "VCLXGraphicControl::ImplSetNewImage: window is required to be not-NULL!" );
    Button* pButton = static_cast< Button* >( GetWindow() );
    VclPtr< Button > pButton = GetAsDynamic< Button >();
    pButton->SetModeImage( GetImage() );
}

@@ -236,8 +236,10 @@ void VCLXGraphicControl::setProperty( const OUString& PropertyName, const ::com:
{
    SolarMutexGuard aGuard;

    if ( !GetWindow() )
    VclPtr< Button > pButton = GetAs< Button >();
    if ( !pButton )
        return;

    sal_uInt16 nPropType = GetPropertyId( PropertyName );
    switch ( nPropType )
    {
@@ -310,7 +312,8 @@ void VCLXGraphicControl::setProperty( const OUString& PropertyName, const ::com:
                || ( eType == WINDOW_CHECKBOX )
                )
            {
                 aProp <<= ::toolkit::getCompatibleImageAlign( static_cast< Button* >( GetWindow() )->GetImageAlign() );
                 aProp <<= ::toolkit::getCompatibleImageAlign(
                                GetAs<Button>()->GetImageAlign() );
            }
        }
        break;
@@ -322,7 +325,8 @@ void VCLXGraphicControl::setProperty( const OUString& PropertyName, const ::com:
                || ( eType == WINDOW_CHECKBOX )
                )
            {
                aProp <<= ::toolkit::translateImagePosition( static_cast< Button* >( GetWindow() )->GetImageAlign() );
                aProp <<= ::toolkit::translateImagePosition(
                        GetAs< Button >()->GetImageAlign() );
            }
        }
        break;
@@ -444,7 +448,7 @@ void VCLXButton::setActionCommand( const OUString& rCommand ) throw(::com::sun::
    SolarMutexGuard aGuard;

    Size aSz;
    PushButton* pButton = static_cast<PushButton*>(GetWindow());
    VclPtr< PushButton > pButton = GetAs< PushButton >();
    if ( pButton )
        aSz = pButton->CalcMinimumSize();
    return AWTSize(aSz);
@@ -463,7 +467,7 @@ void VCLXButton::setActionCommand( const OUString& rCommand ) throw(::com::sun::
    SolarMutexGuard aGuard;

    Size aSz = VCLSize(rNewSize);
    PushButton* pButton = static_cast<PushButton*>( GetWindow() );
    VclPtr< PushButton > pButton = GetAs< PushButton >();
    if ( pButton )
    {
        Size aMinSz = pButton->CalcMinimumSize();
@@ -490,7 +494,7 @@ void VCLXButton::setProperty( const OUString& PropertyName, const ::com::sun::st
{
    SolarMutexGuard aGuard;

    Button* pButton = static_cast<Button*>(GetWindow());
    VclPtr< Button > pButton = GetAs< Button >();
    if ( pButton )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -519,7 +523,7 @@ void VCLXButton::setProperty( const OUString& PropertyName, const ::com::sun::st
                {
                    sal_Int16 n = sal_Int16();
                    if ( Value >>= n )
                        static_cast<PushButton*>(pButton)->SetState( (TriState)n );
                        static_cast<PushButton*>(pButton.get())->SetState( (TriState)n );
                }
            }
            break;
@@ -536,7 +540,7 @@ void VCLXButton::setProperty( const OUString& PropertyName, const ::com::sun::st
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Any aProp;
    Button* pButton = static_cast<Button*>(GetWindow());
    VclPtr< Button > pButton = GetAs< Button >();
    if ( pButton )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -559,7 +563,7 @@ void VCLXButton::setProperty( const OUString& PropertyName, const ::com::sun::st
            {
                if ( GetWindow()->GetType() == WINDOW_PUSHBUTTON )
                {
                     aProp <<= (sal_Int16)static_cast<PushButton*>(pButton)->GetState();
                     aProp <<= (sal_Int16)static_cast<PushButton*>(pButton.get())->GetState();
                }
            }
            break;
@@ -658,7 +662,7 @@ VCLXImageControl::~VCLXImageControl()
void VCLXImageControl::ImplSetNewImage()
{
    OSL_PRECOND( GetWindow(), "VCLXImageControl::ImplSetNewImage: window is required to be not-NULL!" );
    ImageControl* pControl = static_cast< ImageControl* >( GetWindow() );
    VclPtr<ImageControl> pControl = GetAs< ImageControl >();
    pControl->SetImage( GetImage() );
}

@@ -694,7 +698,7 @@ void VCLXImageControl::setProperty( const OUString& PropertyName, const ::com::s
{
    SolarMutexGuard aGuard;

    ImageControl* pImageControl = static_cast<ImageControl*>(GetWindow());
    VclPtr< ImageControl > pImageControl = GetAs< ImageControl >();

    sal_uInt16 nPropType = GetPropertyId( PropertyName );
    switch ( nPropType )
@@ -731,7 +735,7 @@ void VCLXImageControl::setProperty( const OUString& PropertyName, const ::com::s
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Any aProp;
    ImageControl* pImageControl = static_cast<ImageControl*>(GetWindow());
    VclPtr< ImageControl > pImageControl = GetAs< ImageControl >();
    sal_uInt16 nPropType = GetPropertyId( PropertyName );

    switch ( nPropType )
@@ -863,7 +867,7 @@ void VCLXCheckBox::setState( short n ) throw(::com::sun::star::uno::RuntimeExcep
{
    SolarMutexGuard aGuard;

    CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
    VclPtr< CheckBox> pCheckBox = GetAs< CheckBox >();
    if ( pCheckBox)
    {
        TriState eState;
@@ -892,7 +896,7 @@ short VCLXCheckBox::getState() throw(::com::sun::star::uno::RuntimeException, st
    SolarMutexGuard aGuard;

    short nState = -1;
    CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
    VclPtr< CheckBox > pCheckBox = GetAs< CheckBox >();
    if ( pCheckBox )
    {
        switch ( pCheckBox->GetState() )
@@ -911,23 +915,23 @@ void VCLXCheckBox::enableTriState( sal_Bool b ) throw(::com::sun::star::uno::Run
{
    SolarMutexGuard aGuard;

    CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
    VclPtr< CheckBox > pCheckBox = GetAs< CheckBox >();
    if ( pCheckBox)
        pCheckBox->EnableTriState( b );
}

::com::sun::star::awt::Size VCLXCheckBox::getMinimumSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
::com::sun::star::awt::Size VCLXCheckBox::getMinimumSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    Size aSz;
    CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
    VclPtr< CheckBox > pCheckBox = GetAs< CheckBox >();
    if ( pCheckBox )
        aSz = pCheckBox->CalcMinimumSize();
    return AWTSize(aSz);
}

::com::sun::star::awt::Size VCLXCheckBox::getPreferredSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
::com::sun::star::awt::Size VCLXCheckBox::getPreferredSize() throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    return getMinimumSize();
}
@@ -937,7 +941,7 @@ void VCLXCheckBox::enableTriState( sal_Bool b ) throw(::com::sun::star::uno::Run
    SolarMutexGuard aGuard;

    Size aSz = VCLSize(rNewSize);
    CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
    VclPtr< CheckBox > pCheckBox = GetAs< CheckBox >();
    if ( pCheckBox )
    {
        Size aMinSz = pCheckBox->CalcMinimumSize();
@@ -953,7 +957,7 @@ void VCLXCheckBox::setProperty( const OUString& PropertyName, const ::com::sun::
{
    SolarMutexGuard aGuard;

    CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
    VclPtr< CheckBox > pCheckBox = GetAs< CheckBox >();
    if ( pCheckBox )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -990,7 +994,7 @@ void VCLXCheckBox::setProperty( const OUString& PropertyName, const ::com::sun::
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Any aProp;
    CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
    VclPtr< CheckBox > pCheckBox = GetAs< CheckBox >();
    if ( pCheckBox )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -1025,7 +1029,7 @@ void VCLXCheckBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
                // in during the listener call. To prevent the resulting crashs, we keep us
                // alive as long as we're here

            CheckBox* pCheckBox = static_cast<CheckBox*>(GetWindow());
            VclPtr< CheckBox > pCheckBox = GetAs< CheckBox >();
            if ( pCheckBox )
            {
                if ( maItemListeners.getLength() )
@@ -1125,7 +1129,7 @@ void VCLXRadioButton::setProperty( const OUString& PropertyName, const ::com::su
{
    SolarMutexGuard aGuard;

    RadioButton* pButton = static_cast<RadioButton*>(GetWindow());
    VclPtr< RadioButton > pButton = GetAs< RadioButton >();
    if ( pButton )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -1168,7 +1172,7 @@ void VCLXRadioButton::setProperty( const OUString& PropertyName, const ::com::su
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Any aProp;
    RadioButton* pButton = static_cast<RadioButton*>(GetWindow());
    VclPtr< RadioButton > pButton = GetAs< RadioButton >();
    if ( pButton )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -1235,7 +1239,7 @@ void VCLXRadioButton::setState( sal_Bool b ) throw(::com::sun::star::uno::Runtim
{
    SolarMutexGuard aGuard;

    RadioButton* pRadioButton = static_cast<RadioButton*>(GetWindow());
    VclPtr< RadioButton > pButton = GetAs< RadioButton >();
    if ( pRadioButton)
    {
        pRadioButton->Check( b );
@@ -1254,7 +1258,7 @@ sal_Bool VCLXRadioButton::getState() throw(::com::sun::star::uno::RuntimeExcepti
{
    SolarMutexGuard aGuard;

    RadioButton* pRadioButton = static_cast<RadioButton*>(GetWindow());
    VclPtr< RadioButton > pButton = GetAs< RadioButton >();
    return pRadioButton ? pRadioButton->IsChecked() : sal_False;
}

@@ -1263,7 +1267,7 @@ sal_Bool VCLXRadioButton::getState() throw(::com::sun::star::uno::RuntimeExcepti
    SolarMutexGuard aGuard;

    Size aSz;
    RadioButton* pRadioButton = static_cast<RadioButton*>(GetWindow());
    VclPtr< RadioButton > pButton = GetAs< RadioButton >();
    if ( pRadioButton )
        aSz = pRadioButton->CalcMinimumSize();
    return AWTSize(aSz);
@@ -1279,7 +1283,7 @@ sal_Bool VCLXRadioButton::getState() throw(::com::sun::star::uno::RuntimeExcepti
    SolarMutexGuard aGuard;

    Size aSz = VCLSize(rNewSize);
    RadioButton* pRadioButton = static_cast<RadioButton*>(GetWindow());
    VclPtr< RadioButton > pButton = GetAs< RadioButton >();
    if ( pRadioButton )
    {
        Size aMinSz = pRadioButton->CalcMinimumSize();
@@ -1325,7 +1329,7 @@ void VCLXRadioButton::ImplClickedOrToggled( bool bToggled )
{
    // In the formulars, RadioChecked is not enabled, call itemStateChanged only for click
    // In the dialog editor, RadioChecked is enabled, call itemStateChanged only for bToggled
    RadioButton* pRadioButton = static_cast<RadioButton*>(GetWindow());
    VclPtr< RadioButton > pButton = GetAs< RadioButton >();
    if ( pRadioButton && ( pRadioButton->IsRadioCheckEnabled() == bToggled ) && ( bToggled || pRadioButton->IsStateChanged() ) && maItemListeners.getLength() )
    {
        ::com::sun::star::awt::ItemEvent aEvent;
@@ -1381,7 +1385,7 @@ void VCLXSpinField::up() throw(::com::sun::star::uno::RuntimeException, std::exc
{
    SolarMutexGuard aGuard;

    SpinField* pSpinField = static_cast<SpinField*>(GetWindow());
    VclPtr< SpinField > pSpinField = GetAs< SpinField >();
    if ( pSpinField )
        pSpinField->Up();
}
@@ -1390,7 +1394,7 @@ void VCLXSpinField::down() throw(::com::sun::star::uno::RuntimeException, std::e
{
    SolarMutexGuard aGuard;

    SpinField* pSpinField = static_cast<SpinField*>(GetWindow());
    VclPtr< SpinField > pSpinField = GetAs< SpinField >();
    if ( pSpinField )
        pSpinField->Down();
}
@@ -1399,7 +1403,7 @@ void VCLXSpinField::first() throw(::com::sun::star::uno::RuntimeException, std::
{
    SolarMutexGuard aGuard;

    SpinField* pSpinField = static_cast<SpinField*>(GetWindow());
    VclPtr< SpinField > pSpinField = GetAs< SpinField >();
    if ( pSpinField )
        pSpinField->First();
}
@@ -1408,7 +1412,7 @@ void VCLXSpinField::last() throw(::com::sun::star::uno::RuntimeException, std::e
{
    SolarMutexGuard aGuard;

    SpinField* pSpinField = static_cast<SpinField*>(GetWindow());
    VclPtr< SpinField > pSpinField = GetAs< SpinField >();
    if ( pSpinField )
        pSpinField->Last();
}
@@ -1549,8 +1553,7 @@ void VCLXListBox::removeActionListener( const ::com::sun::star::uno::Reference< 
void VCLXListBox::addItem( const OUString& aItem, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        pBox->InsertEntry( aItem, nPos );
}
@@ -1558,8 +1561,7 @@ void VCLXListBox::addItem( const OUString& aItem, sal_Int16 nPos ) throw(::com::
void VCLXListBox::addItems( const ::com::sun::star::uno::Sequence< OUString>& aItems, sal_Int16 nPos ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
    {
        sal_uInt16 nP = nPos;
@@ -1582,8 +1584,7 @@ void VCLXListBox::addItems( const ::com::sun::star::uno::Sequence< OUString>& aI
void VCLXListBox::removeItems( sal_Int16 nPos, sal_Int16 nCount ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
    {
        for ( sal_uInt16 n = nCount; n; )
@@ -1595,7 +1596,7 @@ sal_Int16 VCLXListBox::getItemCount() throw(::com::sun::star::uno::RuntimeExcept
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    return pBox ? pBox->GetEntryCount() : 0;
}

@@ -1604,7 +1605,7 @@ OUString VCLXListBox::getItem( sal_Int16 nPos ) throw(::com::sun::star::uno::Run
    SolarMutexGuard aGuard;

    OUString aItem;
    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        aItem = pBox->GetEntry( nPos );
    return aItem;
@@ -1615,7 +1616,7 @@ OUString VCLXListBox::getItem( sal_Int16 nPos ) throw(::com::sun::star::uno::Run
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Sequence< OUString> aSeq;
    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
    {
        sal_uInt16 nEntries = pBox->GetEntryCount();
@@ -1632,8 +1633,7 @@ OUString VCLXListBox::getItem( sal_Int16 nPos ) throw(::com::sun::star::uno::Run
sal_Int16 VCLXListBox::getSelectedItemPos() throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    return pBox ? pBox->GetSelectEntryPos() : 0;
}

@@ -1642,7 +1642,7 @@ sal_Int16 VCLXListBox::getSelectedItemPos() throw(::com::sun::star::uno::Runtime
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Sequence<sal_Int16> aSeq;
    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
    {
        sal_uInt16 nSelEntries = pBox->GetSelectEntryCount();
@@ -1658,7 +1658,7 @@ OUString VCLXListBox::getSelectedItem() throw(::com::sun::star::uno::RuntimeExce
    SolarMutexGuard aGuard;

    OUString aItem;
    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        aItem = pBox->GetSelectEntry();
    return aItem;
@@ -1669,7 +1669,7 @@ OUString VCLXListBox::getSelectedItem() throw(::com::sun::star::uno::RuntimeExce
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Sequence< OUString> aSeq;
    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
    {
        sal_uInt16 nSelEntries = pBox->GetSelectEntryCount();
@@ -1684,7 +1684,7 @@ void VCLXListBox::selectItemPos( sal_Int16 nPos, sal_Bool bSelect ) throw(::com:
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox && ( pBox->IsEntryPosSelected( nPos ) != bool(bSelect) ) )
    {
        pBox->SelectEntryPos( nPos, bSelect );
@@ -1703,7 +1703,7 @@ void VCLXListBox::selectItemsPos( const ::com::sun::star::uno::Sequence<sal_Int1
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
    {
        bool bChanged = false;
@@ -1734,7 +1734,7 @@ void VCLXListBox::selectItem( const OUString& rItemText, sal_Bool bSelect ) thro
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
    {
        OUString aItemText( rItemText );
@@ -1742,12 +1742,10 @@ void VCLXListBox::selectItem( const OUString& rItemText, sal_Bool bSelect ) thro
    }
}


void VCLXListBox::setDropDownLineCount( sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        pBox->SetDropDownLineCount( nLines );
}
@@ -1757,7 +1755,7 @@ sal_Int16 VCLXListBox::getDropDownLineCount() throw(::com::sun::star::uno::Runti
    SolarMutexGuard aGuard;

    sal_Int16 nLines = 0;
    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        nLines = pBox->GetDropDownLineCount();
    return nLines;
@@ -1766,9 +1764,8 @@ sal_Int16 VCLXListBox::getDropDownLineCount() throw(::com::sun::star::uno::Runti
sal_Bool VCLXListBox::isMutipleMode() throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    bool bMulti = false;
    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        bMulti = pBox->IsMultiSelectionEnabled();
    return bMulti;
@@ -1777,8 +1774,7 @@ sal_Bool VCLXListBox::isMutipleMode() throw(::com::sun::star::uno::RuntimeExcept
void VCLXListBox::setMultipleMode( sal_Bool bMulti ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        pBox->EnableMultiSelection( bMulti );
}
@@ -1786,8 +1782,7 @@ void VCLXListBox::setMultipleMode( sal_Bool bMulti ) throw(::com::sun::star::uno
void VCLXListBox::makeVisible( sal_Int16 nEntry ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pBox = GetAs< ListBox >();
    if ( pBox )
        pBox->SetTopEntry( nEntry );
}
@@ -1803,8 +1798,7 @@ void VCLXListBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
    {
        case VCLEVENT_LISTBOX_SELECT:
        {
            ListBox* pListBox = static_cast<ListBox*>(GetWindow());

            VclPtr< ListBox > pBox = GetAs< ListBox >();
            if( pListBox )
            {
                bool bDropDown = ( pListBox->GetStyle() & WB_DROPDOWN ) ? sal_True : sal_False;
@@ -1830,7 +1824,7 @@ void VCLXListBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
            {
                ::com::sun::star::awt::ActionEvent aEvent;
                aEvent.Source = (::cppu::OWeakObject*)this;
                aEvent.ActionCommand = static_cast<ListBox*>(GetWindow())->GetSelectEntry();
                aEvent.ActionCommand = GetAs<ListBox>()->GetSelectEntry();
                maActionListeners.actionPerformed( aEvent );
            }
            break;
@@ -1851,8 +1845,7 @@ void VCLXListBox::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
void VCLXListBox::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -1928,9 +1921,8 @@ void VCLXListBox::setProperty( const OUString& PropertyName, const ::com::sun::s
::com::sun::star::uno::Any VCLXListBox::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ::com::sun::star::uno::Any aProp;
    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox )
    {
        sal_uInt16 nPropType = GetPropertyId( PropertyName );
@@ -1982,9 +1974,8 @@ void VCLXListBox::setProperty( const OUString& PropertyName, const ::com::sun::s
::com::sun::star::awt::Size VCLXListBox::getMinimumSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    Size aSz;
    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox )
        aSz = pListBox->CalcMinimumSize();
    return AWTSize(aSz);
@@ -1993,9 +1984,8 @@ void VCLXListBox::setProperty( const OUString& PropertyName, const ::com::sun::s
::com::sun::star::awt::Size VCLXListBox::getPreferredSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    Size aSz;
    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox )
    {
        aSz = pListBox->CalcMinimumSize();
@@ -2008,9 +1998,8 @@ void VCLXListBox::setProperty( const OUString& PropertyName, const ::com::sun::s
::com::sun::star::awt::Size VCLXListBox::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    Size aSz = VCLSize(rNewSize);
    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox )
        aSz = pListBox->CalcAdjustedSize( aSz );
    return AWTSize(aSz);
@@ -2019,9 +2008,8 @@ void VCLXListBox::setProperty( const OUString& PropertyName, const ::com::sun::s
::com::sun::star::awt::Size VCLXListBox::getMinimumSize( sal_Int16 nCols, sal_Int16 nLines ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    Size aSz;
    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox )
        aSz = pListBox->CalcBlockSize( nCols, nLines );
    return AWTSize(aSz);
@@ -2030,9 +2018,8 @@ void VCLXListBox::setProperty( const OUString& PropertyName, const ::com::sun::s
void VCLXListBox::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    nCols = nLines = 0;
    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox )
    {
        sal_uInt16 nC, nL;
@@ -2044,7 +2031,7 @@ void VCLXListBox::getColumnsAndLines( sal_Int16& nCols, sal_Int16& nLines ) thro

void VCLXListBox::ImplCallItemListeners()
{
    ListBox* pListBox = static_cast<ListBox*>(GetWindow());
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    if ( pListBox && maItemListeners.getLength() )
    {
        ::com::sun::star::awt::ItemEvent aEvent;
@@ -2083,8 +2070,7 @@ namespace
void SAL_CALL VCLXListBox::listItemInserted( const ItemListEvent& i_rEvent ) throw (RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
    VclPtr< ListBox > pListBox = GetAs< ListBox >();

    ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemInserted: no ListBox?!" );
    ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition <= sal_Int32( pListBox->GetEntryCount() ) ),
@@ -2098,8 +2084,7 @@ void SAL_CALL VCLXListBox::listItemInserted( const ItemListEvent& i_rEvent ) thr
void SAL_CALL VCLXListBox::listItemRemoved( const ItemListEvent& i_rEvent ) throw (RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
    VclPtr< ListBox > pListBox = GetAs< ListBox >();

    ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemRemoved: no ListBox?!" );
    ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pListBox->GetEntryCount() ) ),
@@ -2111,8 +2096,7 @@ void SAL_CALL VCLXListBox::listItemRemoved( const ItemListEvent& i_rEvent ) thro
void SAL_CALL VCLXListBox::listItemModified( const ItemListEvent& i_rEvent ) throw (RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
    VclPtr< ListBox > pListBox = GetAs< ListBox >();

    ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" );
    ENSURE_OR_RETURN_VOID( ( i_rEvent.ItemPosition >= 0 ) && ( i_rEvent.ItemPosition < sal_Int32( pListBox->GetEntryCount() ) ),
@@ -2131,7 +2115,7 @@ void SAL_CALL VCLXListBox::allItemsRemoved( const EventObject& i_rEvent ) throw 
{
    SolarMutexGuard aGuard;

    ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" );

    pListBox->Clear();
@@ -2143,7 +2127,7 @@ void SAL_CALL VCLXListBox::itemListChanged( const EventObject& i_rEvent ) throw 
{
    SolarMutexGuard aGuard;

    ListBox* pListBox = dynamic_cast< ListBox* >( GetWindow() );
    VclPtr< ListBox > pListBox = GetAs< ListBox >();
    ENSURE_OR_RETURN_VOID( pListBox, "VCLXListBox::listItemModified: no ListBox?!" );

    pListBox->Clear();
@@ -2233,8 +2217,7 @@ OUString VCLXMessageBox::getCaptionText() throw(::com::sun::star::uno::RuntimeEx
void VCLXMessageBox::setMessageText( const OUString& rText ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    MessBox* pBox = static_cast<MessBox*>(GetWindow());
    VclPtr< MessBox > pBox = GetAs< MessBox >();
    if ( pBox )
        pBox->SetMessText( rText );
}
@@ -2242,9 +2225,8 @@ void VCLXMessageBox::setMessageText( const OUString& rText ) throw(::com::sun::s
OUString VCLXMessageBox::getMessageText() throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    OUString aText;
    MessBox* pBox = static_cast<MessBox*>(GetWindow());
    VclPtr< MessBox > pBox = GetAs< MessBox >();
    if ( pBox )
        aText = pBox->GetMessText();
    return aText;
@@ -2253,8 +2235,7 @@ OUString VCLXMessageBox::getMessageText() throw(::com::sun::star::uno::RuntimeEx
sal_Int16 VCLXMessageBox::execute() throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    MessBox* pBox = static_cast<MessBox*>(GetWindow());
    VclPtr< MessBox > pBox = GetAs< MessBox >();
    return pBox ? pBox->Execute() : 0;
}

@@ -2301,8 +2282,7 @@ IMPL_XTYPEPROVIDER_END
void SAL_CALL VCLXDialog::endDialog( ::sal_Int32 i_result ) throw (RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    Dialog* pDialog = dynamic_cast< Dialog* >( GetWindow() );
    VclPtr<Dialog> pDialog = GetAsDynamic< Dialog >();
    if ( pDialog )
        pDialog->EndDialog( i_result );
}
@@ -2310,8 +2290,7 @@ void SAL_CALL VCLXDialog::endDialog( ::sal_Int32 i_result ) throw (RuntimeExcept
void SAL_CALL VCLXDialog::setHelpId( const OUString& rId ) throw (RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
        pWindow->SetHelpId( OUStringToOString( rId, RTL_TEXTENCODING_UTF8 ) );
}
@@ -2319,8 +2298,7 @@ void SAL_CALL VCLXDialog::setHelpId( const OUString& rId ) throw (RuntimeExcepti
void VCLXDialog::setTitle( const OUString& Title ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;

    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
        pWindow->SetText( Title );
}
@@ -2330,7 +2308,7 @@ OUString VCLXDialog::getTitle() throw(::com::sun::star::uno::RuntimeException, s
    SolarMutexGuard aGuard;

    OUString aTitle;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
        aTitle = pWindow->GetText();
    return aTitle;
@@ -2376,7 +2354,7 @@ void VCLXDialog::endExecute() throw(::com::sun::star::uno::RuntimeException, std
void SAL_CALL VCLXDialog::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();

    if ( pWindow )
    {
@@ -2510,7 +2488,7 @@ void SAL_CALL VCLXMultiPage::draw( sal_Int32 nX, sal_Int32 nY )
throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();

    if ( pWindow )
    {
@@ -2787,7 +2765,7 @@ void SAL_CALL VCLXTabPage::draw( sal_Int32 nX, sal_Int32 nY )
throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();

    if ( pWindow )
    {
@@ -2973,7 +2951,7 @@ OUString VCLXFixedHyperlink::getText() throw(::com::sun::star::uno::RuntimeExcep
    SolarMutexGuard aGuard;

    OUString aText;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
        aText = pWindow->GetText();
    return aText;
@@ -3003,7 +2981,7 @@ void VCLXFixedHyperlink::setAlignment( short nAlign ) throw(::com::sun::star::un
{
    SolarMutexGuard aGuard;

    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        WinBits nNewBits = 0;
@@ -3025,7 +3003,7 @@ short VCLXFixedHyperlink::getAlignment() throw(::com::sun::star::uno::RuntimeExc
    SolarMutexGuard aGuard;

    short nAlign = 0;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        WinBits nStyle = pWindow->GetStyle();
@@ -3225,7 +3203,7 @@ void VCLXFixedText::setText( const OUString& Text ) throw(::com::sun::star::uno:
{
    SolarMutexGuard aGuard;

    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
        pWindow->SetText( Text );
}
@@ -3235,7 +3213,7 @@ OUString VCLXFixedText::getText() throw(::com::sun::star::uno::RuntimeException,
    SolarMutexGuard aGuard;

    OUString aText;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
        aText = pWindow->GetText();
    return aText;
@@ -3245,7 +3223,7 @@ void VCLXFixedText::setAlignment( short nAlign ) throw(::com::sun::star::uno::Ru
{
    SolarMutexGuard aGuard;

    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        WinBits nNewBits = 0;
@@ -3267,7 +3245,7 @@ short VCLXFixedText::getAlignment() throw(::com::sun::star::uno::RuntimeExceptio
    SolarMutexGuard aGuard;

    short nAlign = 0;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        WinBits nStyle = pWindow->GetStyle();
@@ -3506,7 +3484,7 @@ void VCLXScrollBar::setOrientation( sal_Int32 n ) throw(::com::sun::star::uno::R
{
    SolarMutexGuard aGuard;

    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        WinBits nStyle = pWindow->GetStyle();
@@ -3526,7 +3504,7 @@ sal_Int32 VCLXScrollBar::getOrientation() throw(::com::sun::star::uno::RuntimeEx
    SolarMutexGuard aGuard;

    sal_Int32 n = 0;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        WinBits nStyle = pWindow->GetStyle();
@@ -3913,7 +3891,7 @@ OUString VCLXEdit::getText() throw(::com::sun::star::uno::RuntimeException, std:
    SolarMutexGuard aGuard;

    OUString aText;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
        aText = pWindow->GetText();
    return aText;
@@ -4816,7 +4794,7 @@ VCLXDateField::~VCLXDateField()
//change the window type here to match the role
::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXDateField::CreateAccessibleContext()
{
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        pWindow->SetType( WINDOW_DATEFIELD );
@@ -5164,7 +5142,7 @@ VCLXTimeField::~VCLXTimeField()
//change the window type here to match the role
::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXTimeField::CreateAccessibleContext()
{
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();
    if ( pWindow )
    {
        pWindow->SetType( WINDOW_TIMEFIELD );
@@ -6608,7 +6586,7 @@ void SAL_CALL VCLXFrame::draw( sal_Int32 nX, sal_Int32 nY )
throw(::com::sun::star::uno::RuntimeException, std::exception)
{
    SolarMutexGuard aGuard;
    vcl::Window* pWindow = GetWindow();
    VclPtr< vcl::Window > pWindow = GetWindow();

    if ( pWindow )
    {