Give up on KillFocus validation.
wxWidgets sends the KillFocus event before the Cancel button event, and it sets the receiving-focus window pointer to NULL (so you can't even check for it being the Cancel button. Last time around (with the UNIT_BINDER) I also tried a bunch of hacks for whether the window pointer is NULL, etc., but they aren't discriminatory either. Fixes: lp:1834975 * https://bugs.launchpad.net/kicad/+bug/1834975 Fixes: lp:1834966 * https://bugs.launchpad.net/kicad/+bug/1834966
This commit is contained in:
parent
109c21aad4
commit
1c30f3d9a9
|
@ -496,14 +496,15 @@ void DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DRow( wxCommandEvent& )
|
||||||
|
|
||||||
bool DIALOG_FOOTPRINT_FP_EDITOR::checkFootprintName( const wxString& aFootprintName )
|
bool DIALOG_FOOTPRINT_FP_EDITOR::checkFootprintName( const wxString& aFootprintName )
|
||||||
{
|
{
|
||||||
if( aFootprintName.IsEmpty() || !MODULE::IsLibNameValid( aFootprintName ) )
|
if( aFootprintName.IsEmpty() )
|
||||||
{
|
{
|
||||||
if( aFootprintName.IsEmpty() )
|
m_delayedErrorMessage = _( "Footprint must have a name." );
|
||||||
m_delayedErrorMessage = _( "Footprint must have a name." );
|
return false;
|
||||||
else
|
}
|
||||||
m_delayedErrorMessage.Printf( _( "Footprint name may not contain \"%s\"." ),
|
else if( !MODULE::IsLibNameValid( aFootprintName ) )
|
||||||
MODULE::StringLibNameInvalidChars( true ) );
|
{
|
||||||
|
m_delayedErrorMessage.Printf( _( "Footprint name may not contain \"%s\"." ),
|
||||||
|
MODULE::StringLibNameInvalidChars( true ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -705,25 +706,6 @@ void DIALOG_FOOTPRINT_FP_EDITOR::OnFootprintNameText( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_FOOTPRINT_FP_EDITOR::OnFootprintNameKillFocus( wxFocusEvent& event )
|
|
||||||
{
|
|
||||||
// Only warn once on KillFocus for each error value; after that it just gets annoying.
|
|
||||||
// This also fixes a bug where we endlessly cycle in some edge cases.
|
|
||||||
static wxString lastValue = wxEmptyString;
|
|
||||||
wxString valueNow = m_FootprintNameCtrl->GetValue();
|
|
||||||
|
|
||||||
if( !m_delayedFocusCtrl && valueNow != lastValue && !checkFootprintName( valueNow ) )
|
|
||||||
{
|
|
||||||
m_delayedFocusCtrl = m_FootprintNameCtrl;
|
|
||||||
m_delayedFocusPage = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
lastValue = valueNow;
|
|
||||||
|
|
||||||
event.Skip();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_FOOTPRINT_FP_EDITOR::OnAddField( wxCommandEvent& event )
|
void DIALOG_FOOTPRINT_FP_EDITOR::OnAddField( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
if( !m_itemsGrid->CommitPendingChanges() )
|
if( !m_itemsGrid->CommitPendingChanges() )
|
||||||
|
|
|
@ -83,7 +83,6 @@ private:
|
||||||
void OnAdd3DRow( wxCommandEvent& event ) override;
|
void OnAdd3DRow( wxCommandEvent& event ) override;
|
||||||
void Cfg3DPath( wxCommandEvent& event ) override;
|
void Cfg3DPath( wxCommandEvent& event ) override;
|
||||||
void OnGridSize( wxSizeEvent& event ) override;
|
void OnGridSize( wxSizeEvent& event ) override;
|
||||||
void OnFootprintNameKillFocus( wxFocusEvent& event ) override;
|
|
||||||
void OnFootprintNameText( wxCommandEvent& event ) override;
|
void OnFootprintNameText( wxCommandEvent& event ) override;
|
||||||
void OnGridCellChanging( wxGridEvent& event );
|
void OnGridCellChanging( wxGridEvent& event );
|
||||||
void OnAddField( wxCommandEvent& event ) override;
|
void OnAddField( wxCommandEvent& event ) override;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Dec 1 2018)
|
// C++ code generated with wxFormBuilder (version Dec 30 2017)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
@ -82,7 +82,7 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::DIALOG_FOOTPRINT_FP_EDITOR_BASE( wxWindow* pare
|
||||||
wxBoxSizer* bButtonSize;
|
wxBoxSizer* bButtonSize;
|
||||||
bButtonSize = new wxBoxSizer( wxHORIZONTAL );
|
bButtonSize = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
m_bpAdd = new wxBitmapButton( sbSizerTexts->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
m_bpAdd = new wxBitmapButton( sbSizerTexts->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_bpAdd->SetMinSize( wxSize( 30,29 ) );
|
m_bpAdd->SetMinSize( wxSize( 30,29 ) );
|
||||||
|
|
||||||
bButtonSize->Add( m_bpAdd, 0, wxRIGHT, 5 );
|
bButtonSize->Add( m_bpAdd, 0, wxRIGHT, 5 );
|
||||||
|
@ -90,7 +90,7 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::DIALOG_FOOTPRINT_FP_EDITOR_BASE( wxWindow* pare
|
||||||
|
|
||||||
bButtonSize->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
bButtonSize->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_bpDelete = new wxBitmapButton( sbSizerTexts->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
m_bpDelete = new wxBitmapButton( sbSizerTexts->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_bpDelete->SetMinSize( wxSize( 30,29 ) );
|
m_bpDelete->SetMinSize( wxSize( 30,29 ) );
|
||||||
|
|
||||||
bButtonSize->Add( m_bpDelete, 0, wxRIGHT|wxLEFT, 5 );
|
bButtonSize->Add( m_bpDelete, 0, wxRIGHT|wxLEFT, 5 );
|
||||||
|
@ -347,16 +347,16 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::DIALOG_FOOTPRINT_FP_EDITOR_BASE( wxWindow* pare
|
||||||
wxBoxSizer* bSizer3DButtons;
|
wxBoxSizer* bSizer3DButtons;
|
||||||
bSizer3DButtons = new wxBoxSizer( wxHORIZONTAL );
|
bSizer3DButtons = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
m_button3DShapeAdd = new wxBitmapButton( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,29 ), wxBU_AUTODRAW|0 );
|
m_button3DShapeAdd = new wxBitmapButton( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,29 ), 0 );
|
||||||
bSizer3DButtons->Add( m_button3DShapeAdd, 0, wxTOP|wxBOTTOM, 5 );
|
bSizer3DButtons->Add( m_button3DShapeAdd, 0, wxTOP|wxBOTTOM, 5 );
|
||||||
|
|
||||||
m_button3DShapeBrowse = new wxBitmapButton( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,29 ), wxBU_AUTODRAW|0 );
|
m_button3DShapeBrowse = new wxBitmapButton( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,29 ), 0 );
|
||||||
bSizer3DButtons->Add( m_button3DShapeBrowse, 0, wxALL, 5 );
|
bSizer3DButtons->Add( m_button3DShapeBrowse, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
bSizer3DButtons->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
bSizer3DButtons->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_button3DShapeRemove = new wxBitmapButton( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,29 ), wxBU_AUTODRAW|0 );
|
m_button3DShapeRemove = new wxBitmapButton( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,29 ), 0 );
|
||||||
bSizer3DButtons->Add( m_button3DShapeRemove, 0, wxTOP|wxBOTTOM, 5 );
|
bSizer3DButtons->Add( m_button3DShapeRemove, 0, wxTOP|wxBOTTOM, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
@ -410,7 +410,6 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::DIALOG_FOOTPRINT_FP_EDITOR_BASE( wxWindow* pare
|
||||||
m_itemsGrid->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
m_itemsGrid->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
||||||
m_bpAdd->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
m_bpAdd->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
||||||
m_bpDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
m_bpDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
||||||
m_FootprintNameCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameKillFocus ), NULL, this );
|
|
||||||
m_FootprintNameCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameText ), NULL, this );
|
m_FootprintNameCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameText ), NULL, this );
|
||||||
m_modelsGrid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
m_modelsGrid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
||||||
m_modelsGrid->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
m_modelsGrid->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
||||||
|
@ -428,7 +427,6 @@ DIALOG_FOOTPRINT_FP_EDITOR_BASE::~DIALOG_FOOTPRINT_FP_EDITOR_BASE()
|
||||||
m_itemsGrid->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
m_itemsGrid->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnGridSize ), NULL, this );
|
||||||
m_bpAdd->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
m_bpAdd->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnAddField ), NULL, this );
|
||||||
m_bpDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
m_bpDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnDeleteField ), NULL, this );
|
||||||
m_FootprintNameCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameKillFocus ), NULL, this );
|
|
||||||
m_FootprintNameCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameText ), NULL, this );
|
m_FootprintNameCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::OnFootprintNameText ), NULL, this );
|
||||||
m_modelsGrid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
m_modelsGrid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelCellChanged ), NULL, this );
|
||||||
m_modelsGrid->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
m_modelsGrid->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( DIALOG_FOOTPRINT_FP_EDITOR_BASE::On3DModelSelected ), NULL, this );
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,11 +1,12 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Dec 1 2018)
|
// C++ code generated with wxFormBuilder (version Dec 30 2017)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#pragma once
|
#ifndef __DIALOG_EDIT_FOOTPRINT_FOR_FP_EDITOR_BASE_H__
|
||||||
|
#define __DIALOG_EDIT_FOOTPRINT_FOR_FP_EDITOR_BASE_H__
|
||||||
|
|
||||||
#include <wx/artprov.h>
|
#include <wx/artprov.h>
|
||||||
#include <wx/xrc/xmlres.h>
|
#include <wx/xrc/xmlres.h>
|
||||||
|
@ -20,10 +21,10 @@ class WX_GRID;
|
||||||
#include <wx/font.h>
|
#include <wx/font.h>
|
||||||
#include <wx/grid.h>
|
#include <wx/grid.h>
|
||||||
#include <wx/gdicmn.h>
|
#include <wx/gdicmn.h>
|
||||||
#include <wx/bmpbuttn.h>
|
|
||||||
#include <wx/bitmap.h>
|
#include <wx/bitmap.h>
|
||||||
#include <wx/image.h>
|
#include <wx/image.h>
|
||||||
#include <wx/icon.h>
|
#include <wx/icon.h>
|
||||||
|
#include <wx/bmpbuttn.h>
|
||||||
#include <wx/button.h>
|
#include <wx/button.h>
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/statbox.h>
|
#include <wx/statbox.h>
|
||||||
|
@ -104,7 +105,6 @@ class DIALOG_FOOTPRINT_FP_EDITOR_BASE : public DIALOG_SHIM
|
||||||
virtual void OnGridSize( wxSizeEvent& event ) { event.Skip(); }
|
virtual void OnGridSize( wxSizeEvent& event ) { event.Skip(); }
|
||||||
virtual void OnAddField( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnAddField( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnDeleteField( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnDeleteField( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnFootprintNameKillFocus( wxFocusEvent& event ) { event.Skip(); }
|
|
||||||
virtual void OnFootprintNameText( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnFootprintNameText( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void On3DModelCellChanged( wxGridEvent& event ) { event.Skip(); }
|
virtual void On3DModelCellChanged( wxGridEvent& event ) { event.Skip(); }
|
||||||
virtual void On3DModelSelected( wxGridEvent& event ) { event.Skip(); }
|
virtual void On3DModelSelected( wxGridEvent& event ) { event.Skip(); }
|
||||||
|
@ -121,3 +121,4 @@ class DIALOG_FOOTPRINT_FP_EDITOR_BASE : public DIALOG_SHIM
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif //__DIALOG_EDIT_FOOTPRINT_FOR_FP_EDITOR_BASE_H__
|
||||||
|
|
Loading…
Reference in New Issue