Use deferred window positioning in wxWindow::Layout() in wxMSW.

Ensure that {Begin,End}RepositioningChildren() are called before/after
changing the positions of multiple children, whether we're using sizers or
constraints.

This fixes display corruption which could happen under Windows 7 and a child
resized first became bigger, pushing off the children resized later.

Closes #15214.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74067 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2013-05-31 23:21:06 +00:00
parent 1a986642f5
commit ff3493c0ce
2 changed files with 4 additions and 0 deletions

View File

@ -976,6 +976,8 @@ void wxSizer::Layout()
CalcMin();
// Applies the layout and repositions/resizes the items
wxWindow::ChildrenRepositioningGuard repositionGuard(m_containingWindow);
RecalcSizes();
}

View File

@ -2610,6 +2610,8 @@ void wxWindowBase::SetConstraintSizes(bool recurse)
wxLayoutConstraints *constr = GetConstraints();
if ( constr && constr->AreSatisfied() )
{
ChildrenRepositioningGuard repositionGuard(this);
int x = constr->left.GetValue();
int y = constr->top.GetValue();
int w = constr->width.GetValue();