Skip to content
  • darin's avatar
    WebCore: · ead9a459
    darin authored
            Reviewed by Oliver.
    
            - fix <rdar://problem/5470457> REGRESSION: Input method inline hole is mishandled in text
              <input> elements with maxlength limit
    
            * editing/Editor.h: Moved MarkedTextUnderline here and renamed it CompositionUnderline.
            Moved the rest of the marked text API here and used the term that will be more familiar
            to those on platforms other than Macintosh, "composition". This helps prevent confusion
            with the other kinds of mark -- the emacs "mark" and spelling/grammar marks. Also
            cleaned up the conditionals a bit for the Macintosh-specific parts of this header.
    
            * editing/Editor.cpp:
            (WebCore::Editor::Editor): Updated for name change.
            (WebCore::Editor::clear): Added. To be called by FrameLoader::clear().
            (WebCore::Editor::insertTextWithoutSendingTextEvent): Removed code to make inserted
            text replace the marked text range -- we now deal with this explicitly by not
            calling this function to replace marked text. Also removed unneeded code that was
            specific to the use of this to replace the marked text.
            (WebCore::Editor::selectComposition): Renamed from selectMarkedText. Updated since
            the composition range is not stored as a Range.
            (WebCore::Editor::confirmComposition): Added. To be called when changing a composition
            into actual text. Unlike the old code path, deletes the composition first, then inserts
            the text, triggering the normal insertion code path and events. This is helpful because
            it means the inserted text will be truncated by the <input> element, for example.
            (WebCore::Editor::confirmCompositionWithoutDisturbingSelection): Added.
            (WebCore::Editor::setComposition): Added. To be called when changing the composition.
            Takes parameters for the underlines and selection. Unlike the old code path, this passes
            a flag down that indicates the inserted text is part of a composition. This is helpful
            because we don't send the event that will cause the <input> element to do truncation.
            It's also a better API for future improvements to our input method handling.
            (WebCore::Editor::revealSelectionAfterEditingOperation): Updated for name change.
            (WebCore::Editor::setIgnoreCompositionSelectionChange): Ditto.
            (WebCore::Editor::compositionRange): Added. Needed now that the composition is not
            stored as a Range.
            (WebCore::Editor::getCompositionSelection): Added.
    
            * editing/TypingCommand.h:
            * editing/TypingCommand.cpp: (WebCore::TypingCommand::insertText):
            Added an insertedTextIsComposition parameter, and don't send the BeforeTextInsertedEvent
            if it's true.
    
            * loader/FrameLoader.cpp: (WebCore::FrameLoader::clear): Replaced the Macintosh-specific
            call to setMarkedTextRange with a call to the new Editor::clear().
    
            * page/Frame.h:
            * page/Frame.cpp:
            * page/FramePrivate.h:
            * page/mac/FrameMac.mm:
            Removed the marked text code. It was streamlined and moved to Editor, except for the
            Mac-specific code, which was moved into WebKit.
    
            * page/mac/WebCoreFrameBridge.h:
            * page/mac/WebCoreFrameBridge.mm: Removed some now-unneeded marked text code.
            (-[WebCoreFrameBridge markedTextNSRange]): Updated for name/API change.
    
            * rendering/InlineTextBox.h:
            * rendering/InlineTextBox.cpp:
            (WebCore::InlineTextBox::paint): Updated marked text code for name changes, and also
            streamlined the code a bit for the case where there is no composition.
            (WebCore::InlineTextBox::paintCompositionBackground): Name change.
            (WebCore::InlineTextBox::paintCompositionUnderline): Ditto.
    
            * rendering/RenderTextControl.h:
            * rendering/RenderTextControl.cpp:
            (WebCore::RenderTextControl::finishText): Added. Helper function shared by the
            (WebCore::RenderTextControl::text):
            (WebCore::getNextSoftBreak):
            (WebCore::RenderTextControl::textWithHardLineBreaks):
    
            * platform/CharacterNames.h: Added newlineCharacter.
    
            * dom/Range.h: Remove the now-unneeded version of toString that converts <br>
            elements into newlines.
            * dom/Range.cpp:
            (WebCore::Range::toString): Changed this to use a Vector<UChar> instead of
            a String so it will not have pathological reallocation performance, and removed
            the <br> feature.
            (WebCore::Range::pastEndNode): Made this return 0 when there is no start node.
            This bit of extra robustness guarantees you can't do a null dereference if the
            start node is 0 and the end node is not. Not sure this case really exists.
    
            * page/ContextMenuController.cpp: (ContextMenuController::contextMenuItemSelected):
            Removed a semi-bogus use of Range::toString(true). The right function to use here
            is plainText().
    
            * bridge/EditorClient.h: Removed obsolete markedTextAbandoned function.
    
            * WebCore.exp: Updated for above changes. 
    
    WebKit:
    
            Reviewed by Oliver.
    
            - fix <rdar://problem/5470457> REGRESSION: Input method inline hole is mishandled in text
              <input> elements with maxlength limit
    
            * WebView/WebHTMLView.mm:
            (-[WebHTMLView _selectionChanged]): Tweaked code a bit.
            (-[WebHTMLView markedRange]): Simplified logic, since markedTextNSRange works when there's
            no composition range.
            (-[WebHTMLView hasMarkedText]): Call directly to Editor instead of bridge.
            (-[WebHTMLView unmarkText]): Call new confirmComposition to make it clear that this is
            confirming text, not just unmarking it to discard it.
            (extractUnderlines): Added. Converts directly from an NSAttributedString to the
            CompositionUnderline vector that's used by WebCore.
            (-[WebHTMLView setMarkedText:selectedRange:]): Changed to use the new setComposition.
            (-[WebHTMLView insertText:]): Changed to use confirmComposition when appropriate, instead
            of relying on special behavior of Editor::insertText.
            (-[WebHTMLView _updateSelectionForInputManager]): Rewrote to use getCompositionSelection
            and confirmCompositionWithoutDisturbingSelection.
    
            * WebCoreSupport/WebEditorClient.h:
            * WebCoreSupport/WebEditorClient.mm:
            Removed obsolete markedTextAbandoned function.
    
    win:
    
            Reviewed by Oliver.
    
            - fix <rdar://problem/5470457> REGRESSION: Input method inline hole is mishandled in text
              <input> elements with maxlength limit
    
            * WebView.cpp:
            (WebView::resetIME): Change to use confirmCompositionWithoutDisturbingSelection.
            (WebView::updateSelectionForIME): Update for name changes, and to use new functions
            in Editor.
            (WebView::onIMEStartComposition): Removed unneeded call to unmarkText.
            (compositionToUnderlines): Removed startOffset parameter, since setComposition now
            handles this.
            (WebView::onIMEComposition): Changed to use confirmComposition and setComposition.
            Logic gets a lot cleaner.
            (WebView::onIMEEndComposition): Removed unneeded calls to Editor.
            (WebView::onIMERequestCharPosition): Updated for name changes.
    
    LayoutTests:
    
            Reviewed by Oliver.
    
            - updated test results changed by change in input manager logic
    
            * platform/mac/editing/input/firstrectforcharacterrange-styled-expected.txt:
            * platform/mac/editing/input/text-input-controller-expected.txt:
            * platform/mac/editing/input/wrapped-line-char-rect-expected.txt:
            Updated. Small changes in which delegate methods are called.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@25547 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    ead9a459