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();
|
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 );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue