diff --git a/src/osx/nonownedwnd_osx.cpp b/src/osx/nonownedwnd_osx.cpp index 213188d146..5ed6cdf443 100644 --- a/src/osx/nonownedwnd_osx.cpp +++ b/src/osx/nonownedwnd_osx.cpp @@ -115,14 +115,26 @@ bool wxNonOwnedWindow::Create(wxWindow *parent, m_isShown = false; // use the appropriate defaults for the position and size if necessary - wxPoint pos(posOrig); - if ( !pos.IsFullySpecified() ) - pos.SetDefaults(wxGetClientDisplayRect().GetPosition()); - wxSize size(sizeOrig); if ( !size.IsFullySpecified() ) size.SetDefaults(wxTopLevelWindow::GetDefaultSize()); + wxPoint pos(posOrig); + if ( !pos.IsFullySpecified() ) + { + wxRect rectWin = wxRect(size).CentreIn(wxGetClientDisplayRect()); + + // The size of the window is often not really known yet, TLWs are often + // created with some small initial size and later are fitted to contain + // their children so centering the window will show it too much to the + // right and bottom, adjust for it by putting it more to the left and + // center. + rectWin.x /= 2; + rectWin.y /= 2; + + pos.SetDefaults(rectWin.GetPosition()); + } + // create frame. m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow (