From bc1953dded487c10ce5312f7f18db9d24e4a9f3c Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sun, 19 Nov 2023 14:17:36 +0000 Subject: [PATCH] Collapse drawing tools to a single re-entrancy guard. Fixes https://gitlab.com/kicad/code/kicad/-/issues/16112 (cherry picked from commit c518041f9b188299add11bdc2a44eb09d9727cc4) --- eeschema/tools/sch_drawing_tools.cpp | 31 ++++++++++++---------------- eeschema/tools/sch_drawing_tools.h | 9 +------- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/eeschema/tools/sch_drawing_tools.cpp b/eeschema/tools/sch_drawing_tools.cpp index 5dfc0e0775..1063e302da 100644 --- a/eeschema/tools/sch_drawing_tools.cpp +++ b/eeschema/tools/sch_drawing_tools.cpp @@ -76,12 +76,7 @@ SCH_DRAWING_TOOLS::SCH_DRAWING_TOOLS() : m_lastTextboxStroke( 0, PLOT_DASH_TYPE::DEFAULT, COLOR4D::UNSPECIFIED ), m_mruPath( wxEmptyString ), m_lastAutoLabelRotateOnPlacement( false ), - m_inPlaceSymbol( false ), - m_inDrawShape( false ), - m_inPlaceImage( false ), - m_inSingleClickPlace( false ), - m_inTwoClickPlace( false ), - m_inDrawSheet( false ) + m_inDrawingTool( false ) { } @@ -112,10 +107,10 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent ) COMMON_SETTINGS* common_settings = Pgm().GetCommonSettings(); EE_GRID_HELPER grid( m_toolMgr ); - if( m_inPlaceSymbol ) + if( m_inDrawingTool ) return 0; - REENTRANCY_GUARD guard( &m_inPlaceSymbol ); + REENTRANCY_GUARD guard( &m_inDrawingTool ); // First we need to get all instances of this sheet so we can annotate // whatever symbols we place on all copies @@ -473,10 +468,10 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent ) bool ignorePrimePosition = false; COMMON_SETTINGS* common_settings = Pgm().GetCommonSettings(); - if( m_inPlaceImage ) + if( m_inDrawingTool ) return 0; - REENTRANCY_GUARD guard( &m_inPlaceImage ); + REENTRANCY_GUARD guard( &m_inDrawingTool ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); @@ -709,10 +704,10 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent ) SCH_ITEM* previewItem; bool loggedInfoBarError = false; - if( m_inSingleClickPlace ) + if( m_inDrawingTool ) return 0; - REENTRANCY_GUARD guard( &m_inSingleClickPlace ); + REENTRANCY_GUARD guard( &m_inDrawingTool ); if( type == SCH_JUNCTION_T && aEvent.HasPosition() ) { @@ -1129,10 +1124,10 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent ) COMMON_SETTINGS* common_settings = Pgm().GetCommonSettings(); SCH_SHEET* sheet = nullptr; - if( m_inTwoClickPlace ) + if( m_inDrawingTool ) return 0; - REENTRANCY_GUARD guard( &m_inTwoClickPlace ); + REENTRANCY_GUARD guard( &m_inDrawingTool ); bool isText = aEvent.IsAction( &EE_ACTIONS::placeSchematicText ); bool isGlobalLabel = aEvent.IsAction( &EE_ACTIONS::placeGlobalLabel ); @@ -1520,10 +1515,10 @@ int SCH_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent ) bool isTextBox = aEvent.IsAction( &EE_ACTIONS::drawTextBox ); SHAPE_T type = aEvent.Parameter(); - if( m_inDrawShape ) + if( m_inDrawingTool ) return 0; - REENTRANCY_GUARD guard( &m_inDrawShape ); + REENTRANCY_GUARD guard( &m_inDrawingTool ); // We might be running as the same shape in another co-routine. Make sure that one // gets whacked. @@ -1739,10 +1734,10 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent ) { SCH_SHEET* sheet = nullptr; - if( m_inDrawSheet ) + if( m_inDrawingTool ) return 0; - REENTRANCY_GUARD guard( &m_inDrawSheet ); + REENTRANCY_GUARD guard( &m_inDrawingTool ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); diff --git a/eeschema/tools/sch_drawing_tools.h b/eeschema/tools/sch_drawing_tools.h index f3a0d65e0e..d0381faec4 100644 --- a/eeschema/tools/sch_drawing_tools.h +++ b/eeschema/tools/sch_drawing_tools.h @@ -94,14 +94,7 @@ private: wxString m_mruPath; bool m_lastAutoLabelRotateOnPlacement; - ///< Re-entrancy guards - bool m_inPlaceSymbol; - bool m_inDrawShape; - bool m_inPlaceImage; - bool m_inSingleClickPlace; - bool m_inTwoClickPlace; - bool m_inDrawSheet; - + bool m_inDrawingTool; // Re-entrancy guard std::unique_ptr m_statusPopup; };