Defense in depth for "mouse stuck in canvas".
Fixes https://gitlab.com/kicad/code/kicad/issues/12653
This commit is contained in:
parent
c016bea020
commit
49655ae742
|
@ -353,11 +353,22 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
|||
MOUSE_DRAG_ACTION drag_action = m_frame->GetDragAction();
|
||||
|
||||
if( evt->IsMouseDown( BUT_LEFT ) )
|
||||
{
|
||||
if( !m_frame->ToolStackIsEmpty() )
|
||||
{
|
||||
// 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
|
||||
if( m_frame->ToolStackIsEmpty() && m_toolMgr->GetTool<EE_POINT_EDITOR>()
|
||||
&& ( !m_toolMgr->GetTool<EE_POINT_EDITOR>()->HasPoint() || hasModifier() ) )
|
||||
if( hasModifier() )
|
||||
{
|
||||
m_originalCursor = m_toolMgr->GetMousePosition();
|
||||
m_disambiguateTimer.StartOnce( 500 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_originalCursor = m_toolMgr->GetMousePosition();
|
||||
m_disambiguateTimer.StartOnce( 500 );
|
||||
|
@ -571,6 +582,11 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
|||
{
|
||||
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 ) )
|
||||
schframe->FocusOnItem( nullptr );
|
||||
|
||||
|
|
Loading…
Reference in New Issue