Better fix for modal/modeless wizards.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35725 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba 2005-09-26 13:30:54 +00:00
parent dfdc483a23
commit 94c09a19ec
2 changed files with 15 additions and 17 deletions

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
// Name: generic/wizard.h
// Name: wx/generic/wizard.h
// Purpose: declaration of generic wxWizard class
// Author: Vadim Zeitlin
// Modified by: Robert Vazan (sizers)
@ -113,6 +113,9 @@ private:
// Whether RunWizard() was called
bool m_started;
// Whether was modal (modeless has to be destroyed on finish or cancel)
bool m_wasModal;
// Page area sizer will be inserted here with padding
wxBoxSizer *m_sizerBmpAndPage;

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////
// Name: generic/wizard.cpp
// Name: src/generic/wizard.cpp
// Purpose: generic implementation of wxWizard class
// Author: Vadim Zeitlin
// Modified by: Robert Cavanaugh
@ -263,10 +263,6 @@ wxSize wxWizardSizer::SiblingSize(wxSizerItem *child)
// generic wxWizard implementation
// ----------------------------------------------------------------------------
// FIXME: this is a hack
WX_DEFINE_ARRAY_PTR(wxWizard *, wxModelessWizards);
static wxModelessWizards modelessWizards;
void wxWizard::Init()
{
m_posWizard = wxDefaultPosition;
@ -278,7 +274,7 @@ void wxWizard::Init()
m_calledSetBorder = false;
m_border = 0;
m_started = false;
modelessWizards.Add(this);
m_wasModal = false;
}
bool wxWizard::Create(wxWindow *parent,
@ -661,7 +657,7 @@ bool wxWizard::RunWizard(wxWizardPage *firstPage)
// can't return false here because there is no old page
(void)ShowPage(firstPage, true /* forward */);
modelessWizards.Remove(this);
m_wasModal = true;
return ShowModal() == wxID_OK;
}
@ -805,14 +801,13 @@ void wxWizard::OnWizEvent(wxWizardEvent& event)
}
}
if ( ( modelessWizards.Index(this) != wxNOT_FOUND ) &&
if ( ( !m_wasModal ) &&
event.IsAllowed() &&
( event.GetEventType() == wxEVT_WIZARD_FINISHED ||
event.GetEventType() == wxEVT_WIZARD_CANCEL
)
)
{
modelessWizards.Remove(this);
Destroy();
}
}