diff options
author | Noel Grandin <noel@peralex.com> | 2015-03-13 13:42:34 +0200 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2015-04-10 10:56:19 +0100 |
commit | 6cb33f4dd9967e1793ec2547fc3b7f9a3bc969d8 (patch) | |
tree | 705c6ddefd7cefb8dcc3ad3a7ad5166c8dccaa49 | |
parent | d7a84ce8406096b455d81f50cd50ca2e877adc06 (diff) |
vclwidget: call disposeOnce from VclPtr::disposeAndClear
Change-Id: Ia8c438984409a7b719f5756f9be30ba9e90c57dc
-rw-r--r-- | include/vcl/vclptr.hxx | 2 | ||||
-rw-r--r-- | vcl/source/window/window.cxx | 17 |
2 files changed, 8 insertions, 11 deletions
diff --git a/include/vcl/vclptr.hxx b/include/vcl/vclptr.hxx index 832d608b686f..b64824b871bf 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 5f53a4d25326..6ee6dc001d3f 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) |