From 875c0f7062e00480c3be45c0469d6207c96d968b Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Thu, 22 Aug 2013 15:07:34 +0200 Subject: [PATCH] Modified InvokeTool(), so besides resetting the tool, it also send an ActivateTool event. Added generation of CancelTool event upon ESC key press. Minor bugfix. --- common/tool/tool_dispatcher.cpp | 14 +++++++++----- common/tool/tool_manager.cpp | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/common/tool/tool_dispatcher.cpp b/common/tool/tool_dispatcher.cpp index ddf168fba0..fd276d4129 100644 --- a/common/tool/tool_dispatcher.cpp +++ b/common/tool/tool_dispatcher.cpp @@ -237,9 +237,16 @@ void TOOL_DISPATCHER::DispatchWxEvent( wxEvent& aEvent ) int mods = decodeModifiers( ke ); if( type == wxEVT_KEY_UP ) - evt = TOOL_EVENT( TC_Keyboard, TA_KeyUp, key | mods ); + { + if( key == WXK_ESCAPE ) + evt = TOOL_EVENT( TC_Command, TA_CancelTool ); + else + evt = TOOL_EVENT( TC_Keyboard, TA_KeyUp, key | mods ); + } else + { evt = TOOL_EVENT( TC_Keyboard, TA_KeyDown, key | mods ); + } } if( evt ) @@ -263,8 +270,5 @@ void TOOL_DISPATCHER::DispatchWxCommand( wxCommandEvent &aEvent ) } if( activateTool ) - { - TOOL_EVENT evt( TC_Command, TA_ActivateTool, toolName ); - m_toolMgr->ProcessEvent( evt ); - } + m_toolMgr->InvokeTool( toolName ); } diff --git a/common/tool/tool_manager.cpp b/common/tool/tool_manager.cpp index 86104e492b..1315d083a8 100644 --- a/common/tool/tool_manager.cpp +++ b/common/tool/tool_manager.cpp @@ -98,6 +98,9 @@ void TOOL_MANAGER::InvokeTool( TOOL_ID aToolId ) if( tool && tool->GetType() == TOOL_Interactive ) static_cast( tool )->Reset(); + + TOOL_EVENT evt( TC_Command, TA_ActivateTool, tool->GetName() ); + ProcessEvent( evt ); } @@ -105,8 +108,8 @@ void TOOL_MANAGER::InvokeTool( const std::string& aName ) { TOOL_BASE* tool = FindTool( aName ); - if( tool && tool->GetType() == TOOL_Interactive ) - static_cast( tool )->Reset(); + if( tool ) + InvokeTool( tool->GetId() ); } @@ -169,7 +172,10 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent ) st->waitEvents.clear(); st->cofunc->Resume(); if( !st->cofunc->Running() ) + { delete st->cofunc; + st->cofunc = NULL; + } } } else @@ -194,7 +200,10 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent ) st->cofunc->Call( aEvent ); if( !st->cofunc->Running() ) + { delete st->cofunc; + st->cofunc = NULL; + } } } } @@ -218,7 +227,7 @@ bool TOOL_MANAGER::ProcessEvent( TOOL_EVENT& aEvent ) st->contextMenuTrigger = CMENU_OFF; GetEditFrame()->PopupMenu( st->contextMenu->GetMenu() ); - TOOL_EVENT evt ( TC_Command, TA_ContextMenuChoice ); + TOOL_EVENT evt( TC_Command, TA_ContextMenuChoice ); dispatchInternal( evt ); break;