X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/743e24aa72ed41a56884698802e3b31ca9f26b31..7ea1c917764fb2588fe1aadc75c49ba300f8cb2f:/src/os2/toplevel.cpp diff --git a/src/os2/toplevel.cpp b/src/os2/toplevel.cpp index e45bedf8a9..0bd4b9e388 100644 --- a/src/os2/toplevel.cpp +++ b/src/os2/toplevel.cpp @@ -34,6 +34,7 @@ #include "wx/frame.h" #include "wx/control.h" #include "wx/containr.h" // wxSetFocusToChild() + #include "wx/settings.h" #endif //WX_PRECOMP #include "wx/module.h" // wxSetFocusToChild() @@ -407,7 +408,7 @@ bool wxTopLevelWindowOS2::CreateDialog( ULONG ulDlgTemplate, nX = (vSizeDpy.x - nWidth) / 2; nY = (vSizeDpy.y - nHeight) / 2; } - m_backgroundColour.Set(wxString(wxT("LIGHT GREY"))); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); LONG lColor = (LONG)m_backgroundColour.GetPixel(); @@ -420,6 +421,9 @@ bool wxTopLevelWindowOS2::CreateDialog( ULONG ulDlgTemplate, return false; } + // Convert to OS/2 coordinates + nY = GetOS2ParentHeight(pParent) - nY - nHeight; + ::WinSetWindowPos( GetHwnd() ,HWND_TOP ,nX @@ -502,7 +506,7 @@ bool wxTopLevelWindowOS2::CreateFrame( const wxString& rsTitle, wxAssociateWinWithHandle(m_hWnd, this); wxAssociateWinWithHandle(m_hFrame, this); - m_backgroundColour.Set(wxString(wxT("MEDIUM GREY"))); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE)); LONG lColor = (LONG)m_backgroundColour.GetPixel(); @@ -529,17 +533,49 @@ bool wxTopLevelWindowOS2::CreateFrame( const wxString& rsTitle, // Now size everything. If adding a menu the client will need to be resized. // - if (pParent) + if (!OS2GetCreateWindowCoords( rPos + ,rSize + ,nX + ,nY + ,nWidth + ,nHeight + )) { - nY = pParent->GetSize().y - (nY + nHeight); + nX = nWidth = (int)CW_USEDEFAULT; } - else + + // + // We can't use CW_USEDEFAULT here as we're not calling CreateWindow() + // and passing CW_USEDEFAULT to MoveWindow() results in resizing the + // window to (0, 0) size which breaks quite a lot of things, e.g. the + // sizer calculation in wxSizer::Fit() + // + if (nWidth == (int)CW_USEDEFAULT) { - RECTL vRect; + // + // The exact number doesn't matter, the dialog will be resized + // again soon anyhow but it should be big enough to allow + // calculation relying on "totalSize - clientSize > 0" work, i.e. + // at least greater than the title bar height + // + nWidth = nHeight = 100; + } + if (nX == (int)CW_USEDEFAULT) + { + // + // Centre it on the screen for now - what else can we do? + // TODO: We could try FCF_SHELLPOSITION but it will require moving + // things around a bit. + // + wxSize vSizeDpy = wxGetDisplaySize(); - ::WinQueryWindowRect(HWND_DESKTOP, &vRect); - nY = vRect.yTop - (nY + nHeight); + nX = (vSizeDpy.x - nWidth) / 2; + nY = (vSizeDpy.y - nHeight) / 2; } + + // Convert to OS/2 coordinates + nY = GetOS2ParentHeight(pParent) - nY - nHeight; + if (!::WinSetWindowPos( m_hFrame ,HWND_TOP ,nX @@ -602,7 +638,7 @@ bool wxTopLevelWindowOS2::Create( if (GetExtraStyle() & wxTOPLEVEL_EX_DIALOG) { // - // We have different dialog templates to allows creation of dialogs + // We have different dialog templates to allow creation of dialogs // with & without captions under OS2indows, resizeable or not (but a // resizeable dialog always has caption - otherwise it would look too // strange) @@ -752,10 +788,6 @@ bool wxTopLevelWindowOS2::Show( bool bShow ) ::WinQueryWindowPos(m_hWnd, &vSwp); ::WinEnableWindow(m_hFrame, TRUE); - // - // Deal with children - // - MoveChildren(m_vSwpClient.cy - vSwp.cy); vEvent.SetEventObject(this); GetEventHandler()->ProcessEvent(vEvent); }