From 8467e2d3764cd4ad785b199191c523469a11dc60 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Thu, 16 Feb 2023 12:39:15 +0100 Subject: [PATCH] Pcbnew: Do not change visibility objects when changing Visibility layers Fixes #13836 https://gitlab.com/kicad/code/kicad/issues/13836 --- pcbnew/widgets/appearance_controls.cpp | 31 +++++++++++++++++--------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/pcbnew/widgets/appearance_controls.cpp b/pcbnew/widgets/appearance_controls.cpp index 4e15b5cde3..8c91197e3c 100644 --- a/pcbnew/widgets/appearance_controls.cpp +++ b/pcbnew/widgets/appearance_controls.cpp @@ -1153,7 +1153,7 @@ void APPEARANCE_CONTROLS::OnDarkModeToggle() m_layerPanelColour = m_panelLayers->GetBackgroundColour().ChangeLightness( 110 ); m_windowLayers->SetBackgroundColour( m_layerPanelColour ); - + for( wxSizerItem* child : m_layersOuterSizer->GetChildren() ) { if( child && child->GetWindow() ) @@ -1829,14 +1829,20 @@ void APPEARANCE_CONTROLS::OnLayerContextMenu( wxCommandEvent& aEvent ) PCB_LAYER_ID current = m_frame->GetActiveLayer(); + // The new preset. We keep the visibility state of objects: + LAYER_PRESET preset; + preset.renderLayers = getVisibleObjects(); + switch( aEvent.GetId() ) { case ID_PRESET_NO_LAYERS: - ApplyLayerPreset( presetNoLayers ); + preset.layers = presetNoLayers.layers; + ApplyLayerPreset( preset ); return; case ID_PRESET_ALL_LAYERS: - ApplyLayerPreset( presetAllLayers ); + preset.layers &presetAllLayers.layers; + ApplyLayerPreset( preset ); return; case ID_SHOW_ALL_COPPER_LAYERS: @@ -1845,8 +1851,8 @@ void APPEARANCE_CONTROLS::OnLayerContextMenu( wxCommandEvent& aEvent ) break; case ID_HIDE_ALL_BUT_ACTIVE: - ApplyLayerPreset( presetNoLayers ); - SetLayerVisible( current, true ); + preset.layers = presetNoLayers.layers | LSET( current ); + ApplyLayerPreset( preset ); break; case ID_HIDE_ALL_COPPER_LAYERS: @@ -1874,23 +1880,28 @@ void APPEARANCE_CONTROLS::OnLayerContextMenu( wxCommandEvent& aEvent ) break; case ID_PRESET_FRONT_ASSEMBLY: - ApplyLayerPreset( presetFrontAssembly ); + preset.layers = presetFrontAssembly.layers; + ApplyLayerPreset( preset ); return; case ID_PRESET_FRONT: - ApplyLayerPreset( presetFront ); + preset.layers = presetFront.layers; + ApplyLayerPreset( preset ); return; case ID_PRESET_INNER_COPPER: - ApplyLayerPreset( presetInnerCopper ); + preset.layers = presetInnerCopper.layers; + ApplyLayerPreset( preset ); return; case ID_PRESET_BACK: - ApplyLayerPreset( presetBack ); + preset.layers = presetBack.layers; + ApplyLayerPreset( preset ); return; case ID_PRESET_BACK_ASSEMBLY: - ApplyLayerPreset( presetBackAssembly ); + preset.layers = presetBackAssembly.layers; + ApplyLayerPreset( preset ); return; }