Don't pass Cancel event where there was a specific action cancelled.

For instance, if during a move the user hits ESC they only want the
move cancelled, not (for instance) the selection dropped.

Fixes https://gitlab.com/kicad/code/kicad/issues/5356
This commit is contained in:
Jeff Young 2020-08-25 12:53:39 +01:00
parent d122321162
commit 1138c32bf3
6 changed files with 18 additions and 1 deletions

View File

@ -88,9 +88,14 @@ int PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
// Activating a new tool may have alternate finalization from canceling the current
// tool
if( evt->IsActivate() )
{
finalize_state = END_ACTIVATE;
}
else
{
evt->SetPassEvent( false );
finalize_state = EVT_CANCEL;
}
break;
}

View File

@ -204,7 +204,10 @@ int LIB_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
else if( evt->IsCancelInteractive() || evt->IsActivate() )
{
if( m_moveInProgress )
{
evt->SetPassEvent( false );
restore_state = true;
}
break;
}

View File

@ -352,7 +352,10 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
else if( evt->IsCancelInteractive() )
{
if( m_moveInProgress )
{
evt->SetPassEvent( false );
restore_state = true;
}
break;
}

View File

@ -253,7 +253,7 @@ public:
///> be passed on to subsequent tools on the stack. Defaults to true for TC_MESSAGES; false
///> for everything else.
bool PassEvent() const { return m_passEvent; }
void SetPassEvent() { m_passEvent = true; }
void SetPassEvent( bool aPass = true ) { m_passEvent = aPass; }
///> Returns if it this event has a valid position (true for mouse events and context-menu
///> or hotkey-based command events)

View File

@ -192,7 +192,10 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
else if( evt->IsCancelInteractive() || evt->IsActivate() )
{
if( m_moveInProgress )
{
evt->SetPassEvent( false );
restore_state = true;
}
break;
}

View File

@ -573,6 +573,9 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
else if( evt->IsCancelInteractive() || evt->IsActivate() )
{
if( m_dragging && evt->IsCancelInteractive() )
evt->SetPassEvent( false );
restore_state = true; // Canceling the tool means that items have to be restored
break; // Finish
}