diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 54c23d4ea9..50af8f08a6 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -467,6 +467,8 @@ PCB_EDIT_FRAME::~PCB_EDIT_FRAME() void PCB_EDIT_FRAME::SetBoard( BOARD* aBoard ) { + bool new_board = ( aBoard != m_Pcb ); + PCB_BASE_FRAME::SetBoard( aBoard ); if( IsGalCanvasActive() ) @@ -484,7 +486,9 @@ void PCB_EDIT_FRAME::SetBoard( BOARD* aBoard ) { m_toolManager->SetEnvironment( aBoard, drawPanel->GetView(), drawPanel->GetViewControls(), this ); - m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD ); + + if( new_board ) + m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD ); } } } diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp index 6aa3245c5e..c77ec32539 100644 --- a/pcbnew/tools/selection_tool.cpp +++ b/pcbnew/tools/selection_tool.cpp @@ -88,8 +88,17 @@ SELECTION_TOOL::~SELECTION_TOOL() void SELECTION_TOOL::Reset( RESET_REASON aReason ) { - // Restore previous properties of selected items and remove them from containers - clearSelection(); + if( aReason == TOOL_BASE::MODEL_RELOAD ) + { + // Remove pointers to the selected items from containers + // without changing their properties (as they are already deleted + // while a new board is loaded) + m_selection.group->Clear(); + m_selection.clear(); + } + else + // Restore previous properties of selected items and remove them from containers + clearSelection(); m_frame = getEditFrame(); m_locked = true;