Applied patch [ 858324 ] Calling EndModal inside an EVT_INIT_DIALOG event handler
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25126 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
ab839dff60
commit
1a33ac8fb0
@ -114,7 +114,8 @@ protected:
|
||||
void Init();
|
||||
|
||||
private:
|
||||
wxWindow *m_oldFocus;
|
||||
wxWindow* m_oldFocus;
|
||||
bool m_endModalCalled; // allow for closing within InitDialog
|
||||
|
||||
// this pointer is non-NULL only while the modal event loop is running
|
||||
wxDialogModalData *m_modalData;
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user