From 803b2af1367cc0bbd21a3009e47d4bf7b2ff56cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Thu, 18 Apr 2024 12:17:14 -0300 Subject: [PATCH] Focus nodes on mouse down instead of mouse up (testing, refers to issue #43). --- src/eepp/scene/eventdispatcher.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/eepp/scene/eventdispatcher.cpp b/src/eepp/scene/eventdispatcher.cpp index c09113ca6..09ae09829 100644 --- a/src/eepp/scene/eventdispatcher.cpp +++ b/src/eepp/scene/eventdispatcher.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -130,6 +129,12 @@ void EventDispatcher::update( const Time& time ) { mOverNode->onMouseDown( mMousePosi, mInput->getPressTrigger() ); sendMsg( mOverNode, NodeMessage::MouseDown, mInput->getPressTrigger() ); } + + if ( NULL != mFocusNode && mDownNode == mOverNode && + ( mInput->getPressTrigger() & ( EE_BUTTON_LMASK | EE_BUTTON_RMASK ) ) && + ( !nodeWasDragging || mMousePos == mLastMousePos ) ) { + setFocusNode( mOverNode ); + } } else if ( NULL != mOverNode && mInput->getReleaseTrigger() && !( mInput->getPressTrigger() & mInput->getReleaseTrigger() ) && !( mInput->getLastPressTrigger() & mInput->getReleaseTrigger() ) ) { @@ -140,15 +145,17 @@ void EventDispatcher::update( const Time& time ) { } mOverNode->onMouseDown( mMousePosi, mInput->getReleaseTrigger() ); sendMsg( mOverNode, NodeMessage::MouseDown, mInput->getReleaseTrigger() ); + + if ( NULL != mFocusNode && mDownNode == mOverNode && + ( mInput->getReleaseTrigger() & ( EE_BUTTON_LMASK | EE_BUTTON_RMASK ) ) && + ( !nodeWasDragging || mMousePos == mLastMousePos ) ) { + setFocusNode( mOverNode ); + } } if ( mInput->getReleaseTrigger() ) { if ( NULL != mFocusNode ) { if ( !nodeWasDragging || mMousePos == mLastMousePos ) { - if ( mDownNode == mOverNode && - ( mInput->getReleaseTrigger() & ( EE_BUTTON_LMASK | EE_BUTTON_RMASK ) ) ) - setFocusNode( mOverNode ); - // The focused node can change after the MouseUp ( since the node can call // "setFocus()" on other node And the MouseClick would be received by the new // focused node instead of the real one