| Index: content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
|
| index 3e2f111591977e37911cac8ff8d64883b2087f06..600af6833d497c231748c83fdb95969f1cf5c741 100644
|
| --- a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
|
| +++ b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
|
| @@ -391,6 +391,14 @@ public class AdapterInputConnection extends BaseInputConnection {
|
| return mImeAdapter.translateAndSendNativeEvents(event, NO_ACCENT);
|
| }
|
|
|
| + // Some keys we just want to pass events straight through. This allows
|
| + // proper "repeating key" behavior with physical keyboards.
|
| + int eventKeyCode = event.getKeyCode();
|
| + if (eventKeyCode == KeyEvent.KEYCODE_DEL || eventKeyCode == KeyEvent.KEYCODE_FORWARD_DEL) {
|
| + mPendingAccent = 0;
|
| + return mImeAdapter.translateAndSendNativeEvents(event, NO_ACCENT);
|
| + }
|
| +
|
| int unicodeChar = event.getUnicodeChar();
|
|
|
| // If this is a key-up, and backspace/del or if the key has a character representation,
|
| @@ -429,7 +437,6 @@ public class AdapterInputConnection extends BaseInputConnection {
|
| return true;
|
| }
|
| }
|
| - mImeAdapter.translateAndSendNativeEvents(event, mPendingAccent);
|
|
|
| // Physical keyboards also have their events come through here though not
|
| // by BaseInputConnection. In order to support "accent" key sequences
|
| @@ -440,9 +447,11 @@ public class AdapterInputConnection extends BaseInputConnection {
|
| // Copy class variable to local because class version may get indirectly
|
| // cleared by the deleteSurroundingText() call below.
|
| int pendingAccent = mPendingAccent;
|
| + int nextAccent = mPendingAccent;
|
|
|
| if ((unicodeChar & KeyCharacterMap.COMBINING_ACCENT) != 0) {
|
| - pendingAccent = unicodeChar & KeyCharacterMap.COMBINING_ACCENT_MASK;
|
| + pendingAccent = NO_ACCENT;
|
| + nextAccent = unicodeChar & KeyCharacterMap.COMBINING_ACCENT_MASK;
|
| } else if (pendingAccent != NO_ACCENT) {
|
| if (event.getAction() == KeyEvent.ACTION_DOWN) {
|
| int combined = KeyEvent.getDeadChar(pendingAccent, unicodeChar);
|
| @@ -456,16 +465,18 @@ public class AdapterInputConnection extends BaseInputConnection {
|
| // Previous accent doesn't combine with this character
|
| // so assume both are completely independent.
|
| pendingAccent = NO_ACCENT;
|
| + nextAccent = NO_ACCENT;
|
| }
|
| }
|
|
|
| if (event.getAction() == KeyEvent.ACTION_UP) {
|
| // Forget accent after release of key being accented.
|
| - pendingAccent = NO_ACCENT;
|
| + nextAccent = NO_ACCENT;
|
| }
|
| }
|
|
|
| - mPendingAccent = pendingAccent;
|
| + mImeAdapter.translateAndSendNativeEvents(event, pendingAccent);
|
| + mPendingAccent = nextAccent;
|
| return true;
|
| }
|
|
|
|
|