X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad4e3f7be6f20d5a164a608b44c51056231ddad9..5bf3f27fc91ff3288000c0134ac4bdfdf2e7db4f:/src/os2/toplevel.cpp diff --git a/src/os2/toplevel.cpp b/src/os2/toplevel.cpp index 25196f3b23..e076e50197 100644 --- a/src/os2/toplevel.cpp +++ b/src/os2/toplevel.cpp @@ -24,9 +24,10 @@ #pragma hdrstop #endif +#include "wx/toplevel.h" + #ifndef WX_PRECOMP #include "wx/app.h" - #include "wx/toplevel.h" #include "wx/dialog.h" #include "wx/string.h" #include "wx/log.h" @@ -35,9 +36,9 @@ #include "wx/control.h" #include "wx/containr.h" // wxSetFocusToChild() #include "wx/settings.h" + #include "wx/module.h" // wxSetFocusToChild() #endif //WX_PRECOMP -#include "wx/module.h" // wxSetFocusToChild() #include "wx/os2/private.h" // ---------------------------------------------------------------------------- @@ -234,7 +235,7 @@ WXDWORD wxTopLevelWindowOS2::OS2GetStyle( lMsflags |= FCF_MINBUTTON; if (lStyle & wxMAXIMIZE_BOX) lMsflags |= FCF_MAXBUTTON; - if (lStyle & wxTHICK_FRAME) + if (lStyle & wxRESIZE_BORDER) lMsflags |= FCF_DLGBORDER; if (lStyle & wxSYSTEM_MENU) lMsflags |= FCF_SYSMENU; @@ -250,7 +251,7 @@ WXDWORD wxTopLevelWindowOS2::OS2GetStyle( if (lStyle & wxTINY_CAPTION_HORIZ) lMsflags |= FCF_TASKLIST; - if ((lStyle & wxTHICK_FRAME) == 0) + if ((lStyle & wxRESIZE_BORDER) == 0) lMsflags |= FCF_BORDER; if (lStyle & wxFRAME_TOOL_WINDOW) *pdwExflags = kFrameToolWindow; @@ -421,6 +422,9 @@ bool wxTopLevelWindowOS2::CreateDialog( ULONG ulDlgTemplate, return false; } + // Convert to OS/2 coordinates + nY = GetOS2ParentHeight(pParent) - nY - nHeight; + ::WinSetWindowPos( GetHwnd() ,HWND_TOP ,nX @@ -480,8 +484,8 @@ bool wxTopLevelWindowOS2::CreateFrame( const wxString& rsTitle, hFrame = ::WinCreateStdWindow( hParent ,ulStyleFlags // frame-window style ,(PULONG)&lFlags // window style - ,(PSZ)wxFrameClassName // class name - ,(PSZ)rsTitle.c_str() // window title + ,wxFrameClassName // class name + ,rsTitle.c_str() // window title ,0L // default client style ,NULLHANDLE // resource in executable file ,0 // resource id @@ -530,17 +534,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 @@ -753,10 +789,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); } @@ -963,13 +995,6 @@ bool wxTopLevelWindowOS2::ShowFullScreen( bool bShow, // wxTopLevelWindowOS2 misc // ---------------------------------------------------------------------------- -void wxTopLevelWindowOS2::SetIcon( - const wxIcon& rIcon -) -{ - SetIcons(wxIconBundle(rIcon)); -} // end of wxTopLevelWindowOS2::SetIcon - void wxTopLevelWindowOS2::SetIcons( const wxIconBundle& rIcons ) @@ -979,9 +1004,9 @@ void wxTopLevelWindowOS2::SetIcons( // wxTopLevelWindowBase::SetIcons(rIcons); - const wxIcon& vIcon = rIcons.GetIcon(wxSize(32, 32)); + const wxIcon& vIcon = rIcons.GetIconOfExactSize(32); - if (vIcon.Ok() && vIcon.GetWidth() == 32 && vIcon.GetHeight() == 32) + if (vIcon.Ok()) { ::WinSendMsg( m_hFrame ,WM_SETICON