Set mShiftIsPressed properly when the focus is a plugin.
Fix for http://b/issue?id=2484986
Change-Id: I3140c3c3a0bd44af85939aceb0bbd07c0861cde4
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index e3fd29f..655c4c5 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -3691,11 +3691,13 @@
return false;
}
- if (mShiftIsPressed == false && nativeCursorWantsKeyEvents() == false
- && !nativeFocusIsPlugin()
- && (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
- || keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
- setUpSelectXY();
+ if (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
+ || keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT) {
+ if (nativeFocusIsPlugin()) {
+ mShiftIsPressed = true;
+ } else if (!nativeCursorWantsKeyEvents() && !mShiftIsPressed) {
+ setUpSelectXY();
+ }
}
if (keyCode >= KeyEvent.KEYCODE_DPAD_UP
@@ -3834,7 +3836,10 @@
if (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
|| keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT) {
- if (commitCopy()) {
+ if (nativeFocusIsPlugin()) {
+ mShiftIsPressed = false;
+ return true;
+ } else if (commitCopy()) {
return true;
}
}
@@ -4195,7 +4200,9 @@
public boolean dispatchKeyEvent(KeyEvent event) {
boolean dispatch = true;
- if (!inEditingMode()) {
+ // Textfields and plugins need to receive the shift up key even if
+ // another key was released while the shift key was held down.
+ if (!inEditingMode() && !nativeFocusIsPlugin()) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
mGotKeyDown = true;
} else {