| 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 9352f378f2e0156cebce58fbaf2cdd9686576d5f..de9f9cce77fdea84ce6f403d65421ea9443a6b78 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
|
| @@ -318,13 +318,36 @@ public class AdapterInputConnection extends BaseInputConnection {
|
| if (DEBUG) {
|
| Log.w(TAG, "deleteSurroundingText [" + beforeLength + " " + afterLength + "]");
|
| }
|
| + int originalBeforeLength = beforeLength;
|
| + int originalAfterLength = afterLength;
|
| int availableBefore = Selection.getSelectionStart(mEditable);
|
| int availableAfter = mEditable.length() - Selection.getSelectionEnd(mEditable);
|
| beforeLength = Math.min(beforeLength, availableBefore);
|
| afterLength = Math.min(afterLength, availableAfter);
|
| super.deleteSurroundingText(beforeLength, afterLength);
|
| updateSelectionIfRequired();
|
| - return mImeAdapter.deleteSurroundingText(beforeLength, afterLength);
|
| +
|
| + // For single-char deletion calls |ImeAdapter.sendKeyEventWithKeyCode| with the real key
|
| + // code. For multi-character deletion, executes deletion by calling
|
| + // |ImeAdapter.deleteSurroundingText| and sends synthetic key events with a dummy key code.
|
| + int keyCode = KeyEvent.KEYCODE_UNKNOWN;
|
| + if (originalBeforeLength == 1 && originalAfterLength == 0)
|
| + keyCode = KeyEvent.KEYCODE_DEL;
|
| + else if (originalBeforeLength == 0 && originalAfterLength == 1)
|
| + keyCode = KeyEvent.KEYCODE_FORWARD_DEL;
|
| +
|
| + boolean result = true;
|
| + if (keyCode == KeyEvent.KEYCODE_UNKNOWN) {
|
| + result = mImeAdapter.sendSyntheticKeyEvent(
|
| + ImeAdapter.sEventTypeRawKeyDown, SystemClock.uptimeMillis(), keyCode, 0);
|
| + result &= mImeAdapter.deleteSurroundingText(beforeLength, afterLength);
|
| + result &= mImeAdapter.sendSyntheticKeyEvent(
|
| + ImeAdapter.sEventTypeKeyUp, SystemClock.uptimeMillis(), keyCode, 0);
|
| + } else {
|
| + mImeAdapter.sendKeyEventWithKeyCode(
|
| + keyCode, KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE);
|
| + }
|
| + return result;
|
| }
|
|
|
| /**
|
|
|