fix text area insertion order, partially

While Leon mulls over how to rewrite WebTextView to
handle webkit driven focus changes, these fixes make
the current code slightly more stable.

Keep track of when keyDown is sent again so that the
WebTextView won't be rebuilt in that case.

Don't clear the cursor from WebTextView if the there's
no native focus pointer.

Only set the selection to its initial state once when
passing events down to webkit.

partially fixes http://b/issue?id=2201049
This commit is contained in:
Cary Clark
2009-10-22 15:00:17 -04:00
parent f214dd9d4f
commit d9ec29f648
2 changed files with 6 additions and 4 deletions

View File

@@ -88,6 +88,7 @@ import java.util.ArrayList;
// happens, the next time the user hits a key it is okay for the focus
// pointer to not match the WebTextView's node pointer
boolean mOkayForFocusNotToMatch;
boolean mResendKeyDown;
// Whether or not a selection change was generated from webkit. If it was,
// we do not need to pass the selection back to webkit.
private boolean mFromWebKit;
@@ -136,10 +137,9 @@ import java.util.ArrayList;
isArrowKey = true;
break;
}
if (!isArrowKey && !mOkayForFocusNotToMatch
if (!isArrowKey && !mOkayForFocusNotToMatch && !mResendKeyDown
&& mWebView.nativeFocusNodePointer() != mNodePointer) {
if (mWebView.nativeCursorNodePointer() == mNodePointer) {
// remove cursor so character doesn't go back to this view
if (mWebView.nativeFocusNodePointer() != 0) {
mWebView.nativeClearCursor();
}
// Do not call remove() here, which hides the soft keyboard. If
@@ -152,7 +152,7 @@ import java.util.ArrayList;
// After a jump to next textfield and the first key press, the cursor
// and focus will once again match, so reset this value.
mOkayForFocusNotToMatch = false;
mResendKeyDown = false;
Spannable text = (Spannable) getText();
int oldLength = text.length();
// Normally the delete key's dom events are sent via onTextChanged.

View File

@@ -3380,6 +3380,7 @@ public class WebView extends AbsoluteLayout
rebuildWebTextView();
// Now we need to pass the event to it
if (inEditingMode()) {
mWebTextView.mResendKeyDown = true;
return mWebTextView.onKeyDown(keyCode, event);
}
} else if (nativeHasFocusNode()) {
@@ -4950,6 +4951,7 @@ public class WebView extends AbsoluteLayout
int select = nativeFocusCandidateIsTextField() ?
nativeFocusCandidateMaxLength() : 0;
setSelection(select, select);
mWebTextView.mOkayForFocusNotToMatch = false; // only once
}
}
WebViewCore.JSKeyData arg = new WebViewCore.JSKeyData();