Correct test for parent being on screen in wxTLW::DoCentre().
The old test was needlessly complicated, didn't take all cases into account and had a typo in it which prevented it from working in half of the cases which it did [try to] take into account. Correct this by simply checking if the parent rectangle intersects the visible display area at all. Also simplify the code a little by checking for the window being maximized from the beginning as centering a maximized window on either screen or parent is a no-op. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63171 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
f19259fce0
commit
ca67f0d859
@ -226,7 +226,10 @@ void wxTopLevelWindowBase::DoCentre(int dir)
|
||||
{
|
||||
// on some platforms centering top level windows is impossible
|
||||
// because they are always maximized by guidelines or limitations
|
||||
if(IsAlwaysMaximized())
|
||||
//
|
||||
// and centering a maximized window doesn't make sense as its position
|
||||
// can't change
|
||||
if ( IsAlwaysMaximized() || IsMaximized() )
|
||||
return;
|
||||
|
||||
// we need the display rect anyhow so store it first: notice that we should
|
||||
@ -248,25 +251,19 @@ void wxTopLevelWindowBase::DoCentre(int dir)
|
||||
// parent frame under Mac but could happen elsewhere too if the frame
|
||||
// was hidden/moved away for some reason), don't use it as otherwise
|
||||
// this window wouldn't be visible at all
|
||||
if ( !rectDisplay.Contains(rectParent.GetTopLeft()) &&
|
||||
!rectParent.Contains(rectParent.GetBottomRight()) )
|
||||
if ( !rectParent.Intersects(rectDisplay) )
|
||||
{
|
||||
// this is enough to make IsEmpty() test below pass
|
||||
rectParent.width = 0;
|
||||
// just centre on screen then
|
||||
rectParent = rectDisplay;
|
||||
}
|
||||
}
|
||||
|
||||
if ( rectParent.IsEmpty() )
|
||||
else
|
||||
{
|
||||
// we were explicitly asked to centre this window on the entire screen
|
||||
// or if we have no parent anyhow and so can't centre on it
|
||||
rectParent = rectDisplay;
|
||||
}
|
||||
|
||||
// centering maximized window on screen is no-op
|
||||
if((rectParent == rectDisplay) && IsMaximized())
|
||||
return;
|
||||
|
||||
if ( !(dir & wxBOTH) )
|
||||
dir |= wxBOTH; // if neither is specified, center in both directions
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user