Kaydet (Commit) 5c91c9fe authored tarafından Michael Meeks's avatar Michael Meeks

Fix LazyDelete crasher, and add & test more post-dispose robustness.

Change-Id: I0e9460cb33b7cb5da9ddb950ff27bac8cbf7fed8
üst 7acf94a7
...@@ -30,6 +30,7 @@ public: ...@@ -30,6 +30,7 @@ public:
void testIsolatedWidgets(); void testIsolatedWidgets();
void testParentedWidgets(); void testParentedWidgets();
void testChildDispose(); void testChildDispose();
void testPostDispose();
CPPUNIT_TEST_SUITE(LifecycleTest); CPPUNIT_TEST_SUITE(LifecycleTest);
CPPUNIT_TEST(testCast); CPPUNIT_TEST(testCast);
...@@ -38,6 +39,7 @@ public: ...@@ -38,6 +39,7 @@ public:
CPPUNIT_TEST(testIsolatedWidgets); CPPUNIT_TEST(testIsolatedWidgets);
CPPUNIT_TEST(testParentedWidgets); CPPUNIT_TEST(testParentedWidgets);
CPPUNIT_TEST(testChildDispose); CPPUNIT_TEST(testChildDispose);
CPPUNIT_TEST(testPostDispose);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
}; };
...@@ -125,6 +127,21 @@ void LifecycleTest::testChildDispose() ...@@ -125,6 +127,21 @@ void LifecycleTest::testChildDispose()
xWin->disposeOnce(); 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_TEST_SUITE_REGISTRATION(LifecycleTest);
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -975,27 +975,27 @@ vcl::Window* Window::ImplGetWindow() ...@@ -975,27 +975,27 @@ vcl::Window* Window::ImplGetWindow()
ImplFrameData* Window::ImplGetFrameData() ImplFrameData* Window::ImplGetFrameData()
{ {
return mpWindowImpl->mpFrameData; return mpWindowImpl ? mpWindowImpl->mpFrameData : NULL;
} }
SalFrame* Window::ImplGetFrame() const SalFrame* Window::ImplGetFrame() const
{ {
return mpWindowImpl->mpFrame; return mpWindowImpl ? mpWindowImpl->mpFrame : NULL;
} }
vcl::Window* Window::ImplGetParent() const vcl::Window* Window::ImplGetParent() const
{ {
return mpWindowImpl->mpParent; return mpWindowImpl ? mpWindowImpl->mpParent.get() : NULL;
} }
vcl::Window* Window::ImplGetClientWindow() const vcl::Window* Window::ImplGetClientWindow() const
{ {
return mpWindowImpl->mpClientWindow; return mpWindowImpl ? mpWindowImpl->mpClientWindow.get() : NULL;
} }
vcl::Window* Window::ImplGetBorderWindow() const vcl::Window* Window::ImplGetBorderWindow() const
{ {
return mpWindowImpl->mpBorderWindow; return mpWindowImpl ? mpWindowImpl->mpBorderWindow.get() : NULL;
} }
vcl::Window* Window::ImplGetFirstOverlapWindow() vcl::Window* Window::ImplGetFirstOverlapWindow()
...@@ -1237,7 +1237,7 @@ bool Window::IsReallyVisible() const ...@@ -1237,7 +1237,7 @@ bool Window::IsReallyVisible() const
bool Window::IsReallyShown() const bool Window::IsReallyShown() const
{ {
return mpWindowImpl->mbReallyShown; return mpWindowImpl ? mpWindowImpl->mbReallyShown : false;
} }
bool Window::IsInInitShow() const bool Window::IsInInitShow() const
...@@ -1247,12 +1247,12 @@ bool Window::IsInInitShow() const ...@@ -1247,12 +1247,12 @@ bool Window::IsInInitShow() const
bool Window::IsEnabled() const bool Window::IsEnabled() const
{ {
return !mpWindowImpl->mbDisabled; return mpWindowImpl ? !mpWindowImpl->mbDisabled : false;
} }
bool Window::IsInputEnabled() const bool Window::IsInputEnabled() const
{ {
return !mpWindowImpl->mbInputDisabled; return mpWindowImpl ? !mpWindowImpl->mbInputDisabled : false;
} }
bool Window::IsAlwaysEnableInput() const bool Window::IsAlwaysEnableInput() const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment