From 0e8852766d2cc0ef82ed0846a4cae55ead01fdbf Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 15 Jul 2010 17:44:53 -0700 Subject: [PATCH] Implement native key pre-dispatching to IMEs. This significantly re-works the native key dispatching code to allow events to be pre-dispatched to the current IME before being processed by native code. It introduces one new public API, which must be called after retrieving an event if the app wishes for it to be pre-dispatched. Currently the native code will only do pre-dispatching of system keys, to avoid significant overhead for gaming input. This should be improved to be smarted, filtering for only keys that the IME is interested in. Unfortunately IMEs don't currently provide this information. :p Change-Id: Ic1c7aeec8b348164957f2cd88119eb5bd85c2a9f --- include/ui/Input.h | 2 ++ libs/ui/Input.cpp | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/ui/Input.h b/include/ui/Input.h index f06988832..d9b109197 100644 --- a/include/ui/Input.h +++ b/include/ui/Input.h @@ -152,6 +152,7 @@ public: protected: void initialize(int32_t deviceId, int32_t source); + void initialize(const InputEvent& from); private: int32_t mDeviceId; @@ -202,6 +203,7 @@ public: int32_t repeatCount, nsecs_t downTime, nsecs_t eventTime); + void initialize(const KeyEvent& from); private: int32_t mAction; diff --git a/libs/ui/Input.cpp b/libs/ui/Input.cpp index e5f014f42..5253c72aa 100644 --- a/libs/ui/Input.cpp +++ b/libs/ui/Input.cpp @@ -18,6 +18,11 @@ void InputEvent::initialize(int32_t deviceId, int32_t source) { mSource = source; } +void InputEvent::initialize(const InputEvent& from) { + mDeviceId = from.mDeviceId; + mSource = from.mSource; +} + // class KeyEvent bool KeyEvent::hasDefaultAction(int32_t keyCode) { @@ -106,6 +111,18 @@ void KeyEvent::initialize( mEventTime = eventTime; } +void KeyEvent::initialize(const KeyEvent& from) { + InputEvent::initialize(from); + mAction = from.mAction; + mFlags = from.mFlags; + mKeyCode = from.mKeyCode; + mScanCode = from.mScanCode; + mMetaState = from.mMetaState; + mRepeatCount = from.mRepeatCount; + mDownTime = from.mDownTime; + mEventTime = from.mEventTime; +} + // class MotionEvent void MotionEvent::initialize(