diff --git a/common/tool/tool_manager.cpp b/common/tool/tool_manager.cpp index cb91124f31..14d963839e 100644 --- a/common/tool/tool_manager.cpp +++ b/common/tool/tool_manager.cpp @@ -448,8 +448,8 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent ) { if( st->waitEvents.Matches( aEvent ) ) { - // By default, already processed events are not passed further - m_passEvent = false; + // By default, only messages are passed further + m_passEvent = ( aEvent.m_category == TC_MESSAGE ); // got matching event? clear wait list and wake up the coroutine st->wakeupEvent = aEvent; diff --git a/include/tool/tool_action.h b/include/tool/tool_action.h index e215efba83..5db3701301 100644 --- a/include/tool/tool_action.h +++ b/include/tool/tool_action.h @@ -148,6 +148,8 @@ public: { if( IsActivation() ) return TOOL_EVENT( TC_COMMAND, TA_ACTIVATE, m_name, m_scope ); + else if( IsNotification() ) + return TOOL_EVENT( TC_MESSAGE, TA_ANY, m_name, m_scope ); else return TOOL_EVENT( TC_COMMAND, TA_ACTION, m_name, m_scope ); } @@ -192,6 +194,14 @@ public: return m_flags & AF_ACTIVATE; } + /** + * Returns true if the action is a notification. + */ + bool IsNotification() const + { + return m_flags & AF_NOTIFY; + } + private: friend class ACTION_MANAGER; diff --git a/include/tool/tool_event.h b/include/tool/tool_event.h index b140fa3953..bffca332f5 100644 --- a/include/tool/tool_event.h +++ b/include/tool/tool_event.h @@ -130,7 +130,8 @@ enum TOOL_ACTION_SCOPE enum TOOL_ACTION_FLAGS { AF_NONE = 0, - AF_ACTIVATE = 1 ///> Action activates a tool + AF_ACTIVATE = 1, ///> Action activates a tool + AF_NOTIFY = 2 ///> Action is a notification (it is by default passed to all tools) }; /// Defines when a context menu is opened. diff --git a/pcbnew/tools/common_actions.cpp b/pcbnew/tools/common_actions.cpp index 0e1ebc0818..0ef2778256 100644 --- a/pcbnew/tools/common_actions.cpp +++ b/pcbnew/tools/common_actions.cpp @@ -264,7 +264,7 @@ TOOL_ACTION COMMON_ACTIONS::viaSizeDec( "pcbnew.EditorControl.viaSizeDec", TOOL_ACTION COMMON_ACTIONS::trackViaSizeChanged( "pcbnew.EditorControl.trackViaSizeChanged", AS_GLOBAL, 0, - "", "" ); + "", "", AF_NOTIFY ); // Module editor tools