diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index 617f99152d..1f99577e5e 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -1500,11 +1500,11 @@ void PCB_EDIT_FRAME::SetGridColor( const COLOR4D& aColor ) } -void PCB_EDIT_FRAME::SetActiveLayer( PCB_LAYER_ID aLayer ) +void PCB_EDIT_FRAME::SetActiveLayer( PCB_LAYER_ID aLayer, bool aForceRedraw ) { const PCB_LAYER_ID oldLayer = GetActiveLayer(); - if( oldLayer == aLayer ) + if( oldLayer == aLayer && !aForceRedraw ) return; PCB_BASE_FRAME::SetActiveLayer( aLayer ); @@ -1523,7 +1523,7 @@ void PCB_EDIT_FRAME::SetActiveLayer( PCB_LAYER_ID aLayer ) * * For pads/vias, this is to avoid clutter when there are pad/via layers * that vary in flash (i.e. clearance from the hole or pad edge), padstack - * shape on eahc layer or clearances on each layer. + * shape on each layer or clearances on each layer. * * For tracks, this follows the same logic as pads/vias, but in theory could * have their own set of independent clearance layers to allow track clearance @@ -1645,7 +1645,9 @@ void PCB_EDIT_FRAME::onBoardLoaded() m_appearancePanel->ApplyLayerPreset( localSettings.m_ActiveLayerPreset ); if( GetBoard()->GetDesignSettings().IsLayerEnabled( localSettings.m_ActiveLayer ) ) - SetActiveLayer( localSettings.m_ActiveLayer ); + SetActiveLayer( localSettings.m_ActiveLayer, true ); + else + SetActiveLayer( GetActiveLayer(), true ); // Make sure to repaint even if not switching PROJECT_FILE& projectFile = Prj().GetProjectFile(); diff --git a/pcbnew/pcb_edit_frame.h b/pcbnew/pcb_edit_frame.h index b5ad21faf1..72113633bc 100644 --- a/pcbnew/pcb_edit_frame.h +++ b/pcbnew/pcb_edit_frame.h @@ -279,7 +279,17 @@ public: /** * Change the currently active layer to \a aLayer and also update the #APPEARANCE_CONTROLS. */ - void SetActiveLayer( PCB_LAYER_ID aLayer ) override; + void SetActiveLayer( PCB_LAYER_ID aLayer ) override + { + SetActiveLayer( aLayer, false ); + } + + /** + * @param aLayer is the layer to set active + * @param aForceRedraw will repaint things that depend on layer switch even if the new active + * layer is the same as the previous one + */ + void SetActiveLayer( PCB_LAYER_ID aLayer, bool aForceRedraw ); void OnDisplayOptionsChanged() override;