-#if wxUSE_DISPLAY
- const int nDisplay = wxDisplay::GetFromWindow(this);
- if ( nDisplay != wxNOT_FOUND )
- {
- rectCentre = wxDisplay(nDisplay).GetGeometry();
- }
- else
-#endif // wxUSE_DISPLAY
+ rectParent = rectDisplay;
+ }
+
+ // centering maximized window on screen is no-op
+ if((rectParent == rectDisplay) && IsMaximized())
+ return;
+
+ // the new window rect candidate
+ wxRect rect = GetRect().CentreIn(rectParent, dir);
+
+ // we don't want to place the window off screen if Centre() is called as
+ // this is (almost?) never wanted and it would be very difficult to prevent
+ // it from happening from the user code if we didn't check for it here
+ if ( rectDisplay.Inside(rect.GetTopLeft()) )
+ {
+ if ( !rectDisplay.Inside(rect.GetBottomRight()) )