From: Sunghyun kim Date: Thu, 13 Jun 2019 10:10:45 +0000 (+0900) Subject: [Tizen]Add KeyEventGeneratedSignal for Get KeyEvent normally X-Git-Tag: accepted/tizen/unified/20190618.045948~9^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=182acae4df2a65a6876414c9540a3633a18911ff;p=platform%2Fcore%2Fuifw%2Fdali-core.git [Tizen]Add KeyEventGeneratedSignal for Get KeyEvent normally Window can get KeyEvent even if control already use it. Change-Id: I41631b5b3aef393e3e0134419b38acea20aed84a --- 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