Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9ec29f6 authored by Cary Clark's avatar Cary Clark
Browse files

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
parent f214dd9d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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.
+2 −0
Original line number Diff line number Diff line
@@ -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();