From 182acae4df2a65a6876414c9540a3633a18911ff Mon Sep 17 00:00:00 2001 From: Sunghyun kim Date: Thu, 13 Jun 2019 19:10:45 +0900 Subject: [PATCH] [Tizen]Add KeyEventGeneratedSignal for Get KeyEvent normally Window can get KeyEvent even if control already use it. Change-Id: I41631b5b3aef393e3e0134419b38acea20aed84a --- 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 9d89f31..0b2624d 100644 --- a/dali/integration-api/scene.cpp +++ b/dali/integration-api/scene.cpp @@ -144,6 +144,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 f1b3059..4e44caf 100755 --- a/dali/integration-api/scene.h +++ b/dali/integration-api/scene.h @@ -54,6 +54,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 @@ -229,6 +230,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 30a4a0f..89e0f0e 100644 --- a/dali/internal/event/common/scene-impl.cpp +++ b/dali/internal/event/common/scene-impl.cpp @@ -278,6 +278,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(); @@ -299,6 +305,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 634bcbd..2c3f3d4 100644 --- a/dali/internal/event/common/scene-impl.h +++ b/dali/internal/event/common/scene-impl.h @@ -172,6 +172,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() @@ -196,6 +203,11 @@ public: */ Integration::Scene::KeyEventSignalType& KeyEventSignal(); + /** + * @copydoc Integration::Scene::KeyEventGeneratedSignal() + */ + Integration::Scene::KeyEventGeneratedSignalType& KeyEventGeneratedSignal(); + /** * @copydoc Integration::Scene::SignalEventProcessingFinished() */ @@ -277,6 +289,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