Kaydet (Commit) 115671bf authored tarafından Michael Meeks's avatar Michael Meeks

tdf#101327 - tolerate exceptions during window construction better.

It appears we can end up being a frame window, which is not added
into the list of frames; so tolerate that.

Change-Id: I7696e79636f7794f327027f0ca73363eef1937e5
Reviewed-on: https://gerrit.libreoffice.org/31235Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMichael Meeks <michael.meeks@collabora.com>
Tested-by: 's avatarMichael Meeks <michael.meeks@collabora.com>
üst 84c59993
...@@ -535,12 +535,22 @@ void Window::dispose() ...@@ -535,12 +535,22 @@ void Window::dispose()
pSVData->maWinData.mpFirstFrame = mpWindowImpl->mpFrameData->mpNextFrame; pSVData->maWinData.mpFirstFrame = mpWindowImpl->mpFrameData->mpNextFrame;
else else
{ {
sal_Int32 nWindows = 0;
vcl::Window* pSysWin = pSVData->maWinData.mpFirstFrame; vcl::Window* pSysWin = pSVData->maWinData.mpFirstFrame;
while ( pSysWin->mpWindowImpl->mpFrameData->mpNextFrame.get() != this ) while ( pSysWin && pSysWin->mpWindowImpl->mpFrameData->mpNextFrame.get() != this )
{
pSysWin = pSysWin->mpWindowImpl->mpFrameData->mpNextFrame; pSysWin = pSysWin->mpWindowImpl->mpFrameData->mpNextFrame;
nWindows++;
}
assert (mpWindowImpl->mpFrameData->mpNextFrame.get() != pSysWin); if ( pSysWin )
pSysWin->mpWindowImpl->mpFrameData->mpNextFrame = mpWindowImpl->mpFrameData->mpNextFrame; {
assert (mpWindowImpl->mpFrameData->mpNextFrame.get() != pSysWin);
pSysWin->mpWindowImpl->mpFrameData->mpNextFrame = mpWindowImpl->mpFrameData->mpNextFrame;
}
else // if it is not in the list, we can't remove it.
SAL_WARN("vcl", "Window " << this << " marked as frame window, "
"is missing from list of " << nWindows << " frames");
} }
mpWindowImpl->mpFrame->SetCallback( nullptr, nullptr ); mpWindowImpl->mpFrame->SetCallback( nullptr, nullptr );
pSVData->mpDefInst->DestroyFrame( mpWindowImpl->mpFrame ); pSVData->mpDefInst->DestroyFrame( mpWindowImpl->mpFrame );
......
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