allow wxDialog::ShowModal() after Show() (see #1416, #4658, #4664)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54328 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-06-22 14:40:25 +00:00
parent 809ca837f6
commit dc28b8564e
4 changed files with 14 additions and 6 deletions

View File

@@ -553,8 +553,15 @@ public:
bool Show(bool show); bool Show(bool show);
/** /**
Shows a modal dialog. Program flow does not return until the dialog has Shows a modal dialog.
been dismissed with EndModal().
Program flow does not return until the dialog has been dismissed with
EndModal().
Notice that it is possible to call ShowModal() for a dialog which had
been previously shown with Show(), this allows to make an existing
modeless dialog modal. However ShowModal() can't be called twice
without intervening EndModal() calls.
@return The value set with SetReturnCode(). @return The value set with SetReturnCode().

View File

@@ -99,7 +99,6 @@ void wxDialog::SetModal( bool WXUNUSED(flag) )
int wxDialog::ShowModal() int wxDialog::ShowModal()
{ {
wxASSERT_MSG( !IsModal(), "ShowModal() can't be called twice" ); wxASSERT_MSG( !IsModal(), "ShowModal() can't be called twice" );
wxASSERT_MSG( !IsShown(), "ShowModal() can't be called after Show()" );
// release the mouse if it's currently captured as the window having it // release the mouse if it's currently captured as the window having it
// will be disabled when this dialog is shown -- but will still keep the // will be disabled when this dialog is shown -- but will still keep the

View File

@@ -283,8 +283,7 @@ void wxDialog::Raise()
// show dialog modally // show dialog modally
int wxDialog::ShowModal() int wxDialog::ShowModal()
{ {
wxASSERT_MSG(!IsShown(), wxASSERT_MSG( !IsModal(), _T("ShowModal() can't be called twice") );
_T("ShowModal() can't be called for an already shown dialog"));
m_endModalCalled = false; m_endModalCalled = false;

View File

@@ -169,6 +169,9 @@ int wxDialog::ShowModal()
if ( !m_isModalStyle ) if ( !m_isModalStyle )
SetModal(true); SetModal(true);
if ( IsShown() )
DoShowModal();
else
Show(true); Show(true);
return GetReturnCode(); return GetReturnCode();