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:
@@ -976,6 +976,8 @@ void wxSizer::Layout()
|
|||||||
CalcMin();
|
CalcMin();
|
||||||
|
|
||||||
// Applies the layout and repositions/resizes the items
|
// Applies the layout and repositions/resizes the items
|
||||||
|
wxWindow::ChildrenRepositioningGuard repositionGuard(m_containingWindow);
|
||||||
|
|
||||||
RecalcSizes();
|
RecalcSizes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2610,6 +2610,8 @@ void wxWindowBase::SetConstraintSizes(bool recurse)
|
|||||||
wxLayoutConstraints *constr = GetConstraints();
|
wxLayoutConstraints *constr = GetConstraints();
|
||||||
if ( constr && constr->AreSatisfied() )
|
if ( constr && constr->AreSatisfied() )
|
||||||
{
|
{
|
||||||
|
ChildrenRepositioningGuard repositionGuard(this);
|
||||||
|
|
||||||
int x = constr->left.GetValue();
|
int x = constr->left.GetValue();
|
||||||
int y = constr->top.GetValue();
|
int y = constr->top.GetValue();
|
||||||
int w = constr->width.GetValue();
|
int w = constr->width.GetValue();
|
||||||
|
Reference in New Issue
Block a user