call InitDialog() before showing the dialog, not after; also TRUE -> true

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27109 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-05-05 22:46:57 +00:00
parent 395b914eae
commit 044fe836c1

View File

@@ -153,9 +153,9 @@ wxDEFINE_TIED_SCOPED_PTR_TYPE(wxDialogModalData);
void wxDialog::Init() void wxDialog::Init()
{ {
m_oldFocus = (wxWindow *)NULL; m_oldFocus = (wxWindow *)NULL;
m_isShown = FALSE; m_isShown = false;
m_modalData = NULL; m_modalData = NULL;
m_endModalCalled = FALSE; m_endModalCalled = false;
} }
bool wxDialog::Create(wxWindow *parent, bool wxDialog::Create(wxWindow *parent,
@@ -175,14 +175,14 @@ bool wxDialog::Create(wxWindow *parent,
style |= wxTAB_TRAVERSAL; style |= wxTAB_TRAVERSAL;
if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) ) if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) )
return FALSE; return false;
if ( !m_hasFont ) if ( !m_hasFont )
SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
return TRUE; return true;
} }
// deprecated ctor // deprecated ctor
@@ -208,10 +208,10 @@ void wxDialog::SetModal(bool WXUNUSED(flag))
wxDialog::~wxDialog() wxDialog::~wxDialog()
{ {
m_isBeingDeleted = TRUE; m_isBeingDeleted = true;
// this will also reenable all the other windows for a modal dialog // this will also reenable all the other windows for a modal dialog
Show(FALSE); Show(false);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -247,6 +247,9 @@ wxWindow *wxDialog::FindSuitableParent() const
bool wxDialog::Show(bool show) bool wxDialog::Show(bool show)
{ {
if ( show == IsShown() )
return false;
if ( !show && m_modalData ) if ( !show && m_modalData )
{ {
// we need to do this before calling wxDialogBase version because if we // we need to do this before calling wxDialogBase version because if we
@@ -257,13 +260,16 @@ bool wxDialog::Show(bool show)
m_modalData->ExitLoop(); m_modalData->ExitLoop();
} }
// ShowModal() may be called for already shown dialog if ( show )
if ( !wxDialogBase::Show(show) && !(show && IsModal()) )
{ {
// nothing to do // this usually will result in TransferDataToWindow() being called
return FALSE; // which will change the controls values so do it before showing as
// otherwise we could have some flicker
InitDialog();
} }
wxDialogBase::Show(show);
if ( show ) if ( show )
{ {
// dialogs don't get WM_SIZE message after creation unlike most (all?) // dialogs don't get WM_SIZE message after creation unlike most (all?)
@@ -273,12 +279,9 @@ bool wxDialog::Show(bool show)
// NB: normally we should call it just the first time but doing it // NB: normally we should call it just the first time but doing it
// every time is simpler than keeping a flag // every time is simpler than keeping a flag
Layout(); Layout();
// this usually will result in TransferDataToWindow() being called
InitDialog();
} }
return TRUE; return true;
} }
void wxDialog::Raise() void wxDialog::Raise()
@@ -291,7 +294,7 @@ int wxDialog::ShowModal()
{ {
wxASSERT_MSG( !IsModal(), _T("wxDialog::ShowModal() reentered?") ); wxASSERT_MSG( !IsModal(), _T("wxDialog::ShowModal() reentered?") );
m_endModalCalled = FALSE; m_endModalCalled = false;
Show(); Show();
@@ -348,10 +351,10 @@ void wxDialog::EndModal(int retCode)
{ {
wxASSERT_MSG( IsModal(), _T("EndModal() called for non modal dialog") ); wxASSERT_MSG( IsModal(), _T("EndModal() called for non modal dialog") );
m_endModalCalled = TRUE; m_endModalCalled = true;
SetReturnCode(retCode); SetReturnCode(retCode);
Show(FALSE); Show(false);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -427,7 +430,7 @@ void wxDialog::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event))
WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{ {
WXLRESULT rc = 0; WXLRESULT rc = 0;
bool processed = FALSE; bool processed = false;
switch ( message ) switch ( message )
{ {
@@ -441,7 +444,7 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar
{ {
// if we do have a cancel button, do press it // if we do have a cancel button, do press it
btn->MSWCommand(BN_CLICKED, 0 /* unused */); btn->MSWCommand(BN_CLICKED, 0 /* unused */);
processed = TRUE; processed = true;
break; break;
} }
} }
@@ -461,10 +464,10 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar
// help with it - so we have to refresh it manually which certainly // help with it - so we have to refresh it manually which certainly
// creates flicker but at least doesn't show garbage on the screen // creates flicker but at least doesn't show garbage on the screen
rc = wxWindow::MSWWindowProc(message, wParam, lParam); rc = wxWindow::MSWWindowProc(message, wParam, lParam);
processed = TRUE; processed = true;
if ( HasFlag(wxFULL_REPAINT_ON_RESIZE) ) if ( HasFlag(wxFULL_REPAINT_ON_RESIZE) )
{ {
::InvalidateRect(GetHwnd(), NULL, FALSE /* erase bg */); ::InvalidateRect(GetHwnd(), NULL, false /* erase bg */);
} }
break; break;
@@ -484,14 +487,14 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar
// in any case, stop here and don't let wxWindow process this // in any case, stop here and don't let wxWindow process this
// message (it would set the busy cursor) // message (it would set the busy cursor)
processed = TRUE; processed = true;
// but return FALSE to tell the child window (if the event // but return false to tell the child window (if the event
// comes from one of them and not from ourselves) that it can // comes from one of them and not from ourselves) that it can
// set its own cursor if it has one: thus, standard controls // set its own cursor if it has one: thus, standard controls
// (e.g. text ctrl) still have correct cursors in a dialog // (e.g. text ctrl) still have correct cursors in a dialog
// invoked while wxIsBusy() // invoked while wxIsBusy()
rc = FALSE; rc = false;
} }
break; break;
#endif // __WXMICROWIN__ #endif // __WXMICROWIN__