[Libreoffice-commits] core.git: Branch 'feature/vclref' - vcl/qa vcl/source

Michael Meeks michael.meeks at collabora.com
Thu Mar 26 14:41:22 PDT 2015


 vcl/qa/cppunit/lifecycle.cxx  |   17 +++++++++++++++++
 vcl/source/window/window2.cxx |   16 ++++++++--------
 2 files changed, 25 insertions(+), 8 deletions(-)

New commits:
commit 12ad7b84dcb07e8bf799bdfaca32279fb1940ec0
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Thu Mar 26 21:45:50 2015 +0000

    Fix LazyDelete crasher, and add & test more post-dispose robustness.
    
    Change-Id: I0e9460cb33b7cb5da9ddb950ff27bac8cbf7fed8

diff --git a/vcl/qa/cppunit/lifecycle.cxx b/vcl/qa/cppunit/lifecycle.cxx
index 8be94a5..12b0a51 100644
--- a/vcl/qa/cppunit/lifecycle.cxx
+++ b/vcl/qa/cppunit/lifecycle.cxx
@@ -30,6 +30,7 @@ public:
     void testIsolatedWidgets();
     void testParentedWidgets();
     void testChildDispose();
+    void testPostDispose();
 
     CPPUNIT_TEST_SUITE(LifecycleTest);
     CPPUNIT_TEST(testCast);
@@ -38,6 +39,7 @@ public:
     CPPUNIT_TEST(testIsolatedWidgets);
     CPPUNIT_TEST(testParentedWidgets);
     CPPUNIT_TEST(testChildDispose);
+    CPPUNIT_TEST(testPostDispose);
     CPPUNIT_TEST_SUITE_END();
 };
 
@@ -125,6 +127,21 @@ void LifecycleTest::testChildDispose()
     xWin->disposeOnce();
 }
 
+void LifecycleTest::testPostDispose()
+{
+    VclPtr<WorkWindow> xWin(new WorkWindow((vcl::Window *)NULL, WB_STDWORK));
+    xWin->disposeOnce();
+
+    // check selected methods continue to work post-dispose
+    CPPUNIT_ASSERT(!xWin->GetParent());
+    xWin->Show();
+    CPPUNIT_ASSERT(!xWin->IsReallyShown());
+    CPPUNIT_ASSERT(!xWin->IsEnabled());
+    CPPUNIT_ASSERT(!xWin->IsInputEnabled());
+    CPPUNIT_ASSERT(!xWin->GetChild(0));
+    CPPUNIT_ASSERT(!xWin->GetWindow(0));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(LifecycleTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx
index 58a2664..b3ee05a 100644
--- a/vcl/source/window/window2.cxx
+++ b/vcl/source/window/window2.cxx
@@ -975,27 +975,27 @@ vcl::Window* Window::ImplGetWindow()
 
 ImplFrameData* Window::ImplGetFrameData()
 {
-    return mpWindowImpl->mpFrameData;
+    return mpWindowImpl ? mpWindowImpl->mpFrameData : NULL;
 }
 
 SalFrame* Window::ImplGetFrame() const
 {
-    return mpWindowImpl->mpFrame;
+    return mpWindowImpl ? mpWindowImpl->mpFrame : NULL;
 }
 
 vcl::Window* Window::ImplGetParent() const
 {
-    return mpWindowImpl->mpParent;
+    return mpWindowImpl ? mpWindowImpl->mpParent.get() : NULL;
 }
 
 vcl::Window* Window::ImplGetClientWindow() const
 {
-    return mpWindowImpl->mpClientWindow;
+    return mpWindowImpl ? mpWindowImpl->mpClientWindow.get() : NULL;
 }
 
 vcl::Window* Window::ImplGetBorderWindow() const
 {
-    return mpWindowImpl->mpBorderWindow;
+    return mpWindowImpl ? mpWindowImpl->mpBorderWindow.get() : NULL;
 }
 
 vcl::Window* Window::ImplGetFirstOverlapWindow()
@@ -1237,7 +1237,7 @@ bool Window::IsReallyVisible() const
 
 bool Window::IsReallyShown() const
 {
-    return mpWindowImpl->mbReallyShown;
+    return mpWindowImpl ? mpWindowImpl->mbReallyShown : false;
 }
 
 bool Window::IsInInitShow() const
@@ -1247,12 +1247,12 @@ bool Window::IsInInitShow() const
 
 bool Window::IsEnabled() const
 {
-    return !mpWindowImpl->mbDisabled;
+    return mpWindowImpl ? !mpWindowImpl->mbDisabled : false;
 }
 
 bool Window::IsInputEnabled() const
 {
-    return !mpWindowImpl->mbInputDisabled;
+    return mpWindowImpl ? !mpWindowImpl->mbInputDisabled : false;
 }
 
 bool Window::IsAlwaysEnableInput() const


More information about the Libreoffice-commits mailing list