X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e441e1f4e8671915ee9bb32049edb4f1d700126e..b5df4fc722412fe5f6764c490925b26293c5f662:/src/msw/dialog.cpp diff --git a/src/msw/dialog.cpp b/src/msw/dialog.cpp index 94cf00190a..9563732e25 100644 --- a/src/msw/dialog.cpp +++ b/src/msw/dialog.cpp @@ -170,11 +170,10 @@ wxDEFINE_TIED_SCOPED_PTR_TYPE(wxDialogModalData); void wxDialog::Init() { m_oldFocus = (wxWindow *)NULL; - m_isShown = FALSE; - m_modalData = NULL; - + m_endModalCalled = FALSE; + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); } @@ -198,8 +197,8 @@ bool wxDialog::Create(wxWindow *parent, if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) ) return FALSE; - - SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); + if (!m_hasFont) + SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); return TRUE; } @@ -369,7 +368,10 @@ bool wxDialog::Show(bool show) InitDialog(); } - if ( show && IsModal() ) + // EndModal may have been called from InitDialog handler, + // which would cause an infinite loop if we didn't take it + // into account + if ( show && IsModal() && !m_endModalCalled ) { // modal dialog needs a parent window, so try to find one if ( !GetParent() ) @@ -391,6 +393,7 @@ void wxDialog::Raise() // a special version for Show(TRUE) for modal dialogs which returns return code int wxDialog::ShowModal() { + m_endModalCalled = FALSE; if ( !IsModal() ) { SetModal(TRUE); @@ -405,6 +408,7 @@ int wxDialog::ShowModal() // dialogs and should work for both of them void wxDialog::EndModal(int retCode) { + m_endModalCalled = TRUE; SetReturnCode(retCode); Show(FALSE);