From 3d7c26b6bd7606a563984d52148f7f4c9c7c5286 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Wed, 2 Dec 2020 14:17:59 +0000 Subject: [PATCH] Get fields out of SYMBOL, not LIB_PART. Also make sure the match-mode is initialised before we try and fetch all the field names. Fixes https://gitlab.com/kicad/code/kicad/issues/6589 --- eeschema/dialogs/dialog_change_symbols.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/eeschema/dialogs/dialog_change_symbols.cpp b/eeschema/dialogs/dialog_change_symbols.cpp index 57865af458..2eae67e6f2 100644 --- a/eeschema/dialogs/dialog_change_symbols.cpp +++ b/eeschema/dialogs/dialog_change_symbols.cpp @@ -101,8 +101,6 @@ DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS( SCH_EDIT_FRAME* aParent, SCH_COMPO m_fieldsBox->Check( i, true ); } - updateFieldsList(); - m_messagePanel->SetLazyUpdate( true ); if( aSymbol && aSymbol->IsSelected() ) @@ -117,6 +115,8 @@ DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS( SCH_EDIT_FRAME* aParent, SCH_COMPO m_matchByReference->SetValue( true ); } + updateFieldsList(); + if( m_mode == MODE::CHANGE ) { m_updateFieldsSizer->GetStaticBox()->SetLabel( _( "Update Fields") ); @@ -269,18 +269,10 @@ void DIALOG_CHANGE_SYMBOLS::updateFieldsList() if( !isMatch( symbol, &instance ) ) continue; - LIB_PART* libSymbol = frame->GetLibPart( symbol->GetLibId() ); + std::vector& fields = symbol->GetFields(); - if( !libSymbol ) - continue; - - std::unique_ptr flattenedSymbol = libSymbol->Flatten(); - - LIB_FIELDS libFields; - flattenedSymbol->GetFields( libFields ); - - for( unsigned i = MANDATORY_FIELDS; i < libFields.size(); ++i ) - fieldNames.insert( libFields[i].GetName() ); + for( unsigned i = MANDATORY_FIELDS; i < fields.size(); ++i ) + fieldNames.insert( fields[i].GetName() ); } }