Allow dialogs to have no parent.

Fixes: lp:1782661
* https://bugs.launchpad.net/kicad/+bug/1782661
This commit is contained in:
Jeff Young 2018-07-20 00:06:53 +01:00
parent 3c1dc9e5c6
commit da35b16392
1 changed files with 23 additions and 13 deletions

View File

@ -57,27 +57,37 @@ public:
DIALOG_SHIM::DIALOG_SHIM( wxWindow* aParent, wxWindowID id, const wxString& title, DIALOG_SHIM::DIALOG_SHIM( wxWindow* aParent, wxWindowID id, const wxString& title,
const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : const wxPoint& pos, const wxSize& size, long style, const wxString& name ) :
wxDialog( aParent, id, title, pos, size, style, name ), wxDialog( aParent, id, title, pos, size, style, name ),
KIWAY_HOLDER( 0 ), KIWAY_HOLDER( nullptr ),
m_units( MILLIMETRES ),
m_firstPaintEvent( true ), m_firstPaintEvent( true ),
m_initialFocusTarget( nullptr ), m_initialFocusTarget( nullptr ),
m_qmodal_loop( 0 ), m_qmodal_loop( nullptr ),
m_qmodal_showing( false ), m_qmodal_showing( false ),
m_qmodal_parent_disabler( 0 ) m_qmodal_parent_disabler( nullptr )
{ {
KIWAY_HOLDER* h = dynamic_cast<KIWAY_HOLDER*>( aParent ); KIWAY_HOLDER* kiwayHolder = nullptr;
while( !h && aParent->GetParent() )
if( aParent )
{ {
aParent = aParent->GetParent(); kiwayHolder = dynamic_cast<KIWAY_HOLDER*>( aParent );
h = dynamic_cast<KIWAY_HOLDER*>( aParent );
while( !kiwayHolder && aParent->GetParent() )
{
aParent = aParent->GetParent();
kiwayHolder = dynamic_cast<KIWAY_HOLDER*>( aParent );
}
wxASSERT_MSG( kiwayHolder, "Dialog parent is not a KIWAY_HOLDER" );
} }
wxASSERT_MSG( h, "Dialog parent is not a KIWAY_HOLDER" ); if( kiwayHolder )
{
// Inherit units from parent
m_units = kiwayHolder->GetUserUnits();
// Inherit units from parent // Set up the message bus
m_units = h->GetUserUnits(); SetKiway( this, &kiwayHolder->Kiway() );
}
// Set up the message bus
SetKiway( this, &h->Kiway() );
Bind( wxEVT_CLOSE_WINDOW, &DIALOG_SHIM::OnCloseWindow, this ); Bind( wxEVT_CLOSE_WINDOW, &DIALOG_SHIM::OnCloseWindow, this );
Bind( wxEVT_BUTTON, &DIALOG_SHIM::OnButton, this ); Bind( wxEVT_BUTTON, &DIALOG_SHIM::OnButton, this );