vclwidget: call disposeOnce from VclPtr::disposeAndClear

Change-Id: Ia8c438984409a7b719f5756f9be30ba9e90c57dc
diff --git a/include/vcl/vclptr.hxx b/include/vcl/vclptr.hxx
index 832d608..b64824b 100644
--- a/include/vcl/vclptr.hxx
+++ b/include/vcl/vclptr.hxx
@@ -179,7 +179,7 @@ public:
        ::rtl::Reference<reference_type> aTmp(m_rInnerRef);
        m_rInnerRef.clear(); // we should use some 'swap' method ideally ;-)
        if (aTmp.get()) {
            aTmp->dispose();
            aTmp->disposeOnce();
        }
    }

diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 5f53a4d..6ee6dc0 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -139,18 +139,15 @@ bool Window::IsDisposed() const

void Window::disposeOnce()
{
    if (!IsDisposed())
        dispose();
    if (!mpWindowImpl || mpWindowImpl->mbInDispose)
        return;
    mpWindowImpl->mbInDispose = true;
    dispose();
}

void Window::dispose()
{
    if (IsDisposed())
        return;

    assert( !mpWindowImpl->mbInDispose && "vcl::Window - already in dispose()" );
    mpWindowImpl->mbInDispose = true;

    assert( mpWindowImpl && mpWindowImpl->mbInDispose ); // should only be called from disposeOnce()
    assert( !mpWindowImpl->mpParent ||
            !mpWindowImpl->mpParent->IsDisposed() ||
            "vcl::Window child should have its parent disposed first" );
@@ -605,8 +602,8 @@ WindowImpl::WindowImpl( WindowType nType )
    mpOverlapWindow                     = NULL;                      // first overlap parent
    mpBorderWindow                      = NULL;                      // Border-Window
    mpClientWindow                      = NULL;                      // Client-Window of a FrameWindow
    mpParent                            = NULL;                      // parent (inkl. BorderWindow)
    mpRealParent                        = NULL;                      // real parent (exkl. BorderWindow)
    mpParent                            = NULL;                      // parent (incl. BorderWindow)
    mpRealParent                        = NULL;                      // real parent (excl. BorderWindow)
    mpFirstChild                        = NULL;                      // first child window
    mpLastChild                         = NULL;                      // last child window
    mpFirstOverlap                      = NULL;                      // first overlap window (only set in overlap windows)