Attempt to fix MSW Cancel-still-validates bug.

Fixes: lp:1805361
* https://bugs.launchpad.net/kicad/+bug/1805361
This commit is contained in:
Jeff Young 2018-11-27 17:08:11 +00:00
parent 8cf9ab5a4c
commit 72f17ad7f0
1 changed files with 16 additions and 8 deletions

View File

@ -92,17 +92,25 @@ void UNIT_BINDER::onSetFocus( wxFocusEvent& aEvent )
void UNIT_BINDER::onKillFocus( wxFocusEvent& aEvent )
{
auto textEntry = dynamic_cast<wxTextEntry*>( m_value );
if( m_allowEval && textEntry )
if( aEvent.GetWindow() && aEvent.GetWindow()->GetId() == wxID_CANCEL )
{
if( m_eval.Process( textEntry->GetValue() ) )
textEntry->ChangeValue( m_eval.Result() );
m_needsEval = false;
// Don't eval or validate when focus lost due to Cancel. While most platforms
// suppress KillFocus events after a Cancel, MSW (at least) does not.
}
else
{
auto textEntry = dynamic_cast<wxTextEntry*>( m_value );
Validate( true );
if( m_allowEval && textEntry )
{
if( m_eval.Process( textEntry->GetValue() ) )
textEntry->ChangeValue( m_eval.Result() );
m_needsEval = false;
}
Validate( true );
}
aEvent.Skip();
}