Defense in depth for "mouse stuck in canvas".

Fixes https://gitlab.com/kicad/code/kicad/issues/12653
This commit is contained in:
Jeff Young 2023-05-06 11:27:29 +01:00
parent c016bea020
commit 49655ae742
1 changed files with 20 additions and 4 deletions

View File

@ -353,11 +353,22 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
MOUSE_DRAG_ACTION drag_action = m_frame->GetDragAction(); MOUSE_DRAG_ACTION drag_action = m_frame->GetDragAction();
if( evt->IsMouseDown( BUT_LEFT ) ) if( evt->IsMouseDown( BUT_LEFT ) )
{
if( !m_frame->ToolStackIsEmpty() )
{ {
// Avoid triggering when running under other tools // Avoid triggering when running under other tools
}
else if( m_toolMgr->GetTool<EE_POINT_EDITOR>()
&& m_toolMgr->GetTool<EE_POINT_EDITOR>()->HasPoint() )
{
// Distinguish point editor from selection modification by checking modifiers // Distinguish point editor from selection modification by checking modifiers
if( m_frame->ToolStackIsEmpty() && m_toolMgr->GetTool<EE_POINT_EDITOR>() if( hasModifier() )
&& ( !m_toolMgr->GetTool<EE_POINT_EDITOR>()->HasPoint() || hasModifier() ) ) {
m_originalCursor = m_toolMgr->GetMousePosition();
m_disambiguateTimer.StartOnce( 500 );
}
}
else
{ {
m_originalCursor = m_toolMgr->GetMousePosition(); m_originalCursor = m_toolMgr->GetMousePosition();
m_disambiguateTimer.StartOnce( 500 ); m_disambiguateTimer.StartOnce( 500 );
@ -571,6 +582,11 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
{ {
m_disambiguateTimer.Stop(); m_disambiguateTimer.Stop();
// We didn't set these, but we have reports that they leak out of some other tools,
// so we clear them here.
getViewControls()->SetAutoPan( false );
getViewControls()->CaptureCursor( false );
if( SCH_EDIT_FRAME* schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) ) if( SCH_EDIT_FRAME* schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
schframe->FocusOnItem( nullptr ); schframe->FocusOnItem( nullptr );