From fc951a17911f4d771ea7fa19c9bb18f98134be34 Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Tue, 25 Jun 2019 13:38:47 +0900 Subject: [PATCH] [Tizen] Add KeyEventGeneratedSignal for Get KeyEvent normally Change-Id: I6a6dd178225fef44e21acc3f9330695d779e21bd --- dali/integration-api/scene.cpp | 5 +++++ dali/integration-api/scene.h | 8 ++++++++ dali/internal/event/common/scene-impl.cpp | 11 +++++++++++ dali/internal/event/common/scene-impl.h | 13 +++++++++++++ dali/internal/event/events/key-event-processor.cpp | 8 +++++++- 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/dali/integration-api/scene.cpp b/dali/integration-api/scene.cpp index b2a4922..9331a99 100644 --- a/dali/integration-api/scene.cpp +++ b/dali/integration-api/scene.cpp @@ -159,6 +159,11 @@ Scene::KeyEventSignalType& Scene::KeyEventSignal() return GetImplementation(*this).KeyEventSignal(); } +Scene::KeyEventGeneratedSignalType& Scene::KeyEventGeneratedSignal() +{ + return GetImplementation(*this).KeyEventGeneratedSignal(); +} + Scene::TouchSignalType& Scene::TouchSignal() { return GetImplementation(*this).TouchSignal(); diff --git a/dali/integration-api/scene.h b/dali/integration-api/scene.h index 2128b47..1d82a44 100755 --- a/dali/integration-api/scene.h +++ b/dali/integration-api/scene.h @@ -55,6 +55,7 @@ class DALI_CORE_API Scene : public BaseHandle public: typedef Signal< void () > EventProcessingFinishedSignalType; ///< Event Processing finished signal type typedef Signal< void (const Dali::KeyEvent&) > KeyEventSignalType; ///< Key event signal type + typedef Signal< bool (const Dali::KeyEvent&) > KeyEventGeneratedSignalType; ///< key event generated signal type typedef Signal< void (const Dali::TouchData&) > TouchSignalType; ///< Touch signal type typedef Signal< void (const Dali::WheelEvent&) > WheelEventSignalType; ///< Touched signal type @@ -249,6 +250,13 @@ public: KeyEventSignalType& KeyEventSignal(); /** + * @brief The user would connect to this signal to get a KeyEvent when KeyEvent is generated. + * + * @return The return is true if KeyEvent is consumed, otherwise false. + */ + KeyEventGeneratedSignalType& KeyEventGeneratedSignal(); + + /** * @brief This signal is emitted when the screen is touched and when the touch ends * (i.e. the down & up touch events only). * diff --git a/dali/internal/event/common/scene-impl.cpp b/dali/internal/event/common/scene-impl.cpp index a944d35..b30aa0c 100644 --- a/dali/internal/event/common/scene-impl.cpp +++ b/dali/internal/event/common/scene-impl.cpp @@ -307,6 +307,12 @@ void Scene::EmitKeyEventSignal(const KeyEvent& event) mKeyEventSignal.Emit( event ); } +bool Scene::EmitKeyEventGeneratedSignal(const KeyEvent& event) +{ + // Emit the KeyEventGenerated signal when KeyEvent is generated + return mKeyEventGeneratedSignal.Emit( event ); +} + void Scene::EmitEventProcessingFinishedSignal() { mEventProcessingFinishedSignal.Emit(); @@ -328,6 +334,11 @@ Integration::Scene::KeyEventSignalType& Scene::KeyEventSignal() return mKeyEventSignal; } +Integration::Scene::KeyEventGeneratedSignalType& Scene::KeyEventGeneratedSignal() +{ + return mKeyEventGeneratedSignal; +} + Integration::Scene::EventProcessingFinishedSignalType& Scene::EventProcessingFinishedSignal() { return mEventProcessingFinishedSignal; diff --git a/dali/internal/event/common/scene-impl.h b/dali/internal/event/common/scene-impl.h index fb09efd..166ef09 100644 --- a/dali/internal/event/common/scene-impl.h +++ b/dali/internal/event/common/scene-impl.h @@ -182,6 +182,13 @@ public: void EmitKeyEventSignal(const KeyEvent& event); /** + * Used by the KeyEventProcessor to emit KeyEventGenerated signals. + * @param[in] event The key event. + * @return The return is true if KeyEvent is consumed, otherwise false. + */ + bool EmitKeyEventGeneratedSignal(const KeyEvent& event); + + /** * Emits the event processing finished signal. * * @see Dali::Scene::SignalEventProcessingFinished() @@ -206,6 +213,11 @@ public: */ Integration::Scene::KeyEventSignalType& KeyEventSignal(); + /** + * @copydoc Integration::Scene::KeyEventGeneratedSignal() + */ + Integration::Scene::KeyEventGeneratedSignalType& KeyEventGeneratedSignal(); + /** * @copydoc Integration::Scene::SignalEventProcessingFinished() */ @@ -289,6 +301,7 @@ private: // The key event signal Integration::Scene::KeyEventSignalType mKeyEventSignal; + Integration::Scene::KeyEventGeneratedSignalType mKeyEventGeneratedSignal; // The event processing finished signal Integration::Scene::EventProcessingFinishedSignalType mEventProcessingFinishedSignal; diff --git a/dali/internal/event/events/key-event-processor.cpp b/dali/internal/event/events/key-event-processor.cpp index 399c209..3d9ef47 100755 --- a/dali/internal/event/events/key-event-processor.cpp +++ b/dali/internal/event/events/key-event-processor.cpp @@ -25,6 +25,7 @@ #include #include + namespace Dali { @@ -50,7 +51,12 @@ void KeyEventProcessor::ProcessKeyEvent( const Integration::KeyEvent& event ) GetImplementation( &keyEvent )->SetDeviceSubclass( event.deviceSubclass ); // Emit the key event signal from the scene. - mScene.EmitKeyEventSignal( keyEvent ); + bool consumed = mScene.EmitKeyEventGeneratedSignal( keyEvent ); + if( !consumed ) + { + mScene.EmitKeyEventSignal(keyEvent); + } + } } // namespace Internal -- 2.7.4