From e02bb80bf3fe2aa470bf39406ed48e12e7e9c03d Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sat, 10 Jul 2021 12:04:50 +0100 Subject: [PATCH] Handle cancel when selecting copper layer. Also changes the algorithm to ask only once, rather than one per non-copper-layer object. Fixes https://gitlab.com/kicad/code/kicad/issues/8767 --- pcbnew/tools/convert_tool.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/pcbnew/tools/convert_tool.cpp b/pcbnew/tools/convert_tool.cpp index b3ad2a2a31..7bb265db79 100644 --- a/pcbnew/tools/convert_tool.cpp +++ b/pcbnew/tools/convert_tool.cpp @@ -550,10 +550,10 @@ int CONVERT_TOOL::PolyToLines( const TOOL_EVENT& aEvent ) return segs; }; - BOARD_COMMIT commit( m_frame ); + BOARD_COMMIT commit( m_frame ); FOOTPRINT_EDIT_FRAME* fpEditor = dynamic_cast( m_frame ); - - FOOTPRINT* footprint = nullptr; + FOOTPRINT* footprint = nullptr; + PCB_LAYER_ID copperLayer = UNSELECTED_LAYER; if( fpEditor ) footprint = fpEditor->GetBoard()->GetFirstFootprint(); @@ -597,7 +597,15 @@ int CONVERT_TOOL::PolyToLines( const TOOL_EVENT& aEvent ) BOARD_ITEM_CONTAINER* parent = frame->GetModel(); if( !IsCopperLayer( layer ) ) - layer = frame->SelectOneLayer( F_Cu, LSET::AllNonCuMask() ); + { + if( copperLayer == UNSELECTED_LAYER ) + copperLayer = frame->SelectOneLayer( F_Cu, LSET::AllNonCuMask() ); + + if( copperLayer == UNDEFINED_LAYER ) // User cancelled + continue; + + layer = copperLayer; + } // I am really unsure converting a polygon to "tracks" (i.e. segments on // copper layers) make sense for footprints, but anyway this code exists