From 2093c014c51b24fcb99e39d7cc2abd94609e180a Mon Sep 17 00:00:00 2001
From: jean-pierre charras <jp.charras@wanadoo.fr>
Date: Thu, 13 Feb 2025 20:09:54 +0100
Subject: [PATCH] Pcbnew, DIALOG_PRINT_PCBNEW: fix right enabled/disabled
 layers to print.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/19940
---
 pcbnew/dialogs/dialog_print_pcbnew.cpp | 30 +++++++++++++++++++-------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/pcbnew/dialogs/dialog_print_pcbnew.cpp b/pcbnew/dialogs/dialog_print_pcbnew.cpp
index 5795d14e31..25a034165d 100644
--- a/pcbnew/dialogs/dialog_print_pcbnew.cpp
+++ b/pcbnew/dialogs/dialog_print_pcbnew.cpp
@@ -114,16 +114,13 @@ DIALOG_PRINT_PCBNEW::DIALOG_PRINT_PCBNEW( PCB_BASE_EDIT_FRAME* aParent,
     // Could devote a PlotOrder() function in place of UIOrder().
     m_layerList = board->GetEnabledLayers().UIOrder();
 
-    // Populate the check list box by all enabled layers names
+    // Populate the check list box by all enabled layers names. They will be enabled later
+    // when the dlg settings are loaded (i.e. after DIALOG_PRINT_GENERIC::TransferDataToWindow()
+    // is called
     for( PCB_LAYER_ID layer : m_layerList )
-    {
-        int checkIndex = m_layerCheckListBox->Append( board->GetLayerName( layer ) );
+        m_layerCheckListBox->Append( board->GetLayerName( layer ) );
 
-        if( settings()->m_LayerSet.test( layer ) )
-            m_layerCheckListBox->Check( checkIndex );
-    }
-
-    m_infoText->SetFont( KIUI::GetInfoFont( this ).Italic() );
+    m_infoText->SetFont( KIUI::GetInfoFont( this ) );
     m_infoText->SetLabel( _( "Right-click for layer selection commands." ) );
     m_infoText->Show( true );
 
@@ -154,6 +151,20 @@ bool DIALOG_PRINT_PCBNEW::TransferDataToWindow()
     if( !DIALOG_PRINT_GENERIC::TransferDataToWindow() )
         return false;
 
+    BOARD* board = m_parent->GetBoard();
+
+    // Enable layers from previous dlg settings
+    m_layerList = board->GetEnabledLayers().UIOrder();
+    int choice_ly_id = 0;
+
+    for( PCB_LAYER_ID layer : m_layerList )
+    {
+        if( settings()->m_LayerSet.test( layer ) )
+            m_layerCheckListBox->Check( choice_ly_id );
+
+        choice_ly_id++;
+    }
+
     m_checkAsItems->SetValue( settings()->m_AsItemCheckboxes );
     m_checkboxMirror->SetValue( settings()->m_Mirror );
     m_titleBlock->SetValue( settings()->m_titleBlock );
@@ -195,6 +206,9 @@ bool DIALOG_PRINT_PCBNEW::TransferDataToWindow()
                                             == PCBNEW_PRINTOUT_SETTINGS::LAYER_PER_PAGE );
     onPagePerLayerClicked( dummy );
 
+    // Update the dialog layout when layers are added
+    GetSizer()->Fit( this );
+
     return true;
 }