From ca67f0d85925332847b79a8215514fd2d4034f3c Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 18 Jan 2010 00:28:53 +0000 Subject: [PATCH] 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 --- src/common/toplvcmn.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/common/toplvcmn.cpp b/src/common/toplvcmn.cpp index c45dd1d55e..ceee633abf 100644 --- a/src/common/toplvcmn.cpp +++ b/src/common/toplvcmn.cpp @@ -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 -- 2.47.2