Protect move tool from re-entrancy.
m_dragInProgress is usually sufficient, except when we haven't started one yet. In any case, conflating the two is probably a bad idea. Fixes https://gitlab.com/kicad/code/kicad/issues/12936
This commit is contained in:
parent
e09e521162
commit
bc271a8d15
|
@ -217,6 +217,10 @@ void SELECTION_TOOL::onDisambiguationExpire( wxTimerEvent& aEvent )
|
||||||
if( selection().GetSize() >= 2 )
|
if( selection().GetSize() >= 2 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// If another tool has since started running then we don't want to interrupt
|
||||||
|
if( !getEditFrame<EDA_DRAW_FRAME>()->ToolStackIsEmpty() )
|
||||||
|
return;
|
||||||
|
|
||||||
m_toolMgr->ProcessEvent( EVENTS::DisambiguatePoint );
|
m_toolMgr->ProcessEvent( EVENTS::DisambiguatePoint );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
|
|
||||||
SCH_MOVE_TOOL::SCH_MOVE_TOOL() :
|
SCH_MOVE_TOOL::SCH_MOVE_TOOL() :
|
||||||
EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveMove" ),
|
EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveMove" ),
|
||||||
|
m_inMoveTool( false ),
|
||||||
m_moveInProgress( false ),
|
m_moveInProgress( false ),
|
||||||
m_isDrag( false ),
|
m_isDrag( false ),
|
||||||
m_moveOffset( 0, 0 )
|
m_moveOffset( 0, 0 )
|
||||||
|
@ -400,6 +401,11 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( m_inMoveTool ) // Must come after m_moveInProgress checks above...
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
REENTRANCY_GUARD guard( &m_inMoveTool );
|
||||||
|
|
||||||
// Be sure that there is at least one item that we can move. If there's no selection try
|
// Be sure that there is at least one item that we can move. If there's no selection try
|
||||||
// looking for the stuff under mouse cursor (i.e. Kicad old-style hover selection).
|
// looking for the stuff under mouse cursor (i.e. Kicad old-style hover selection).
|
||||||
EE_SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::MovableItems );
|
EE_SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::MovableItems );
|
||||||
|
|
|
@ -84,6 +84,9 @@ private:
|
||||||
void setTransitions() override;
|
void setTransitions() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
///< Re-entrancy guard
|
||||||
|
bool m_inMoveTool;
|
||||||
|
|
||||||
///< Flag determining if anything is being dragged right now
|
///< Flag determining if anything is being dragged right now
|
||||||
bool m_moveInProgress;
|
bool m_moveInProgress;
|
||||||
bool m_isDrag;
|
bool m_isDrag;
|
||||||
|
|
Loading…
Reference in New Issue