Title: [90933] trunk/Source/WebCore
Revision
90933
Author
[email protected]
Date
2011-07-13 10:55:20 -0700 (Wed, 13 Jul 2011)

Log Message

Don't reuse the last InsertTextCommand
https://bugs.webkit.org/show_bug.cgi?id=64416

Reviewed by Justin Garcia.

This patch makes the interface of InsertTextCommand less foreign. It now takes arguments in
its constructor and executes the command in doApply like other edit commands.

* editing/CompositeEditCommand.cpp:
(WebCore::CompositeEditCommand::applyCommandToComposite): Added.
* editing/CompositeEditCommand.h:
* editing/InsertTextCommand.cpp:
(WebCore::InsertTextCommand::InsertTextCommand): Takes arguments input used to take.
(WebCore::InsertTextCommand::doApply): Renamed from input.
* editing/InsertTextCommand.h:
(WebCore::InsertTextCommand::create): Takes arguments input used to take.
* editing/TypingCommand.cpp:
(WebCore::TypingCommand::insertTextRunWithoutNewlines): Creates InsertTextCommand.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (90932 => 90933)


--- trunk/Source/WebCore/ChangeLog	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/ChangeLog	2011-07-13 17:55:20 UTC (rev 90933)
@@ -1,3 +1,24 @@
+2011-07-12  Ryosuke Niwa  <[email protected]>
+
+        Don't reuse the last InsertTextCommand
+        https://bugs.webkit.org/show_bug.cgi?id=64416
+
+        Reviewed by Justin Garcia.
+
+        This patch makes the interface of InsertTextCommand less foreign. It now takes arguments in
+        its constructor and executes the command in doApply like other edit commands.
+
+        * editing/CompositeEditCommand.cpp:
+        (WebCore::CompositeEditCommand::applyCommandToComposite): Added.
+        * editing/CompositeEditCommand.h:
+        * editing/InsertTextCommand.cpp:
+        (WebCore::InsertTextCommand::InsertTextCommand): Takes arguments input used to take.
+        (WebCore::InsertTextCommand::doApply): Renamed from input.
+        * editing/InsertTextCommand.h:
+        (WebCore::InsertTextCommand::create): Takes arguments input used to take.
+        * editing/TypingCommand.cpp:
+        (WebCore::TypingCommand::insertTextRunWithoutNewlines): Creates InsertTextCommand.
+
 2011-07-12  Dmitry Lomov  <[email protected]>
 
         https://bugs.webkit.org/show_bug.cgi?id=63041

Modified: trunk/Source/WebCore/editing/CompositeEditCommand.cpp (90932 => 90933)


--- trunk/Source/WebCore/editing/CompositeEditCommand.cpp	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/editing/CompositeEditCommand.cpp	2011-07-13 17:55:20 UTC (rev 90933)
@@ -103,6 +103,17 @@
     m_commands.append(cmd);
 }
 
+void CompositeEditCommand::applyCommandToComposite(PassRefPtr<CompositeEditCommand> command, const VisibleSelection& selection)
+{
+    command->setParent(this);
+    if (selection != command->endingSelection()) {
+        command->setStartingSelection(selection);
+        command->setEndingSelection(selection);
+    }
+    command->apply();
+    m_commands.append(command);
+}
+
 void CompositeEditCommand::applyStyle(const EditingStyle* style, EditAction editingAction)
 {
     applyCommandToComposite(ApplyStyleCommand::create(document(), style, editingAction));

Modified: trunk/Source/WebCore/editing/CompositeEditCommand.h (90932 => 90933)


--- trunk/Source/WebCore/editing/CompositeEditCommand.h	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/editing/CompositeEditCommand.h	2011-07-13 17:55:20 UTC (rev 90933)
@@ -51,6 +51,7 @@
     //
     void appendNode(PassRefPtr<Node>, PassRefPtr<ContainerNode> parent);
     void applyCommandToComposite(PassRefPtr<EditCommand>);
+    void applyCommandToComposite(PassRefPtr<CompositeEditCommand>, const VisibleSelection&);
     void applyStyle(const EditingStyle*, EditAction = EditActionChangeAttributes);
     void applyStyle(const EditingStyle*, const Position& start, const Position& end, EditAction = EditActionChangeAttributes);
     void applyStyledElement(PassRefPtr<Element>);

Modified: trunk/Source/WebCore/editing/EditCommand.cpp (90932 => 90933)


--- trunk/Source/WebCore/editing/EditCommand.cpp	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/editing/EditCommand.cpp	2011-07-13 17:55:20 UTC (rev 90933)
@@ -184,11 +184,6 @@
     return false;
 }
 
-bool EditCommand::isInsertTextCommand() const
-{
-    return false;
-}
-
 bool EditCommand::isTypingCommand() const
 {
     return false;

Modified: trunk/Source/WebCore/editing/EditCommand.h (90932 => 90933)


--- trunk/Source/WebCore/editing/EditCommand.h	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/editing/EditCommand.h	2011-07-13 17:55:20 UTC (rev 90933)
@@ -52,8 +52,7 @@
 
     Element* startingRootEditableElement() const { return m_startingRootEditableElement.get(); }
     Element* endingRootEditableElement() const { return m_endingRootEditableElement.get(); }
-    
-    virtual bool isInsertTextCommand() const;
+
     virtual bool isTypingCommand() const;
     virtual bool isCreateLinkCommand() const;
     

Modified: trunk/Source/WebCore/editing/InsertTextCommand.cpp (90932 => 90933)


--- trunk/Source/WebCore/editing/InsertTextCommand.cpp	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/editing/InsertTextCommand.cpp	2011-07-13 17:55:20 UTC (rev 90933)
@@ -38,15 +38,14 @@
 
 namespace WebCore {
 
-InsertTextCommand::InsertTextCommand(Document *document) 
+InsertTextCommand::InsertTextCommand(Document* document, const String& text, bool selectInsertedText, RebalanceType rebalanceType) 
     : CompositeEditCommand(document)
+    , m_text(text)
+    , m_selectInsertedText(selectInsertedText)
+    , m_rebalanceType(rebalanceType)
 {
 }
 
-void InsertTextCommand::doApply()
-{
-}
-
 Position InsertTextCommand::positionInsideTextNode(const Position& p)
 {
     Position pos = p;
@@ -95,9 +94,9 @@
     return true;
 }
 
-void InsertTextCommand::input(const String& text, bool selectInsertedText, RebalanceType whitespaceRebalance)
+void InsertTextCommand::doApply()
 {
-    ASSERT(text.find('\n') == notFound);
+    ASSERT(m_text.find('\n') == notFound);
 
     if (!endingSelection().isNonOrphanedCaretOrRange())
         return;
@@ -105,7 +104,7 @@
     // Delete the current selection.
     // FIXME: This delete operation blows away the typing style.
     if (endingSelection().isRange()) {
-        if (performTrivialReplace(text, selectInsertedText))
+        if (performTrivialReplace(m_text, m_selectInsertedText))
             return;
         deleteSelection(false, true, true, false);
     }
@@ -144,13 +143,13 @@
     
     Position endPosition;
     
-    if (text == "\t") {
+    if (m_text == "\t") {
         endPosition = insertTab(startPosition);
         startPosition = endPosition.previous();
         if (placeholder.isNotNull())
             removePlaceholderAt(placeholder);
     } else {
-        // Make sure the document is set up to receive text
+        // Make sure the document is set up to receive m_text
         startPosition = positionInsideTextNode(startPosition);
         ASSERT(startPosition.anchorType() == Position::PositionIsOffsetInAnchor);
         ASSERT(startPosition.containerNode());
@@ -160,17 +159,17 @@
         RefPtr<Text> textNode = startPosition.containerText();
         const unsigned offset = startPosition.offsetInContainerNode();
 
-        insertTextIntoNode(textNode, offset, text);
-        endPosition = Position(textNode, offset + text.length());
+        insertTextIntoNode(textNode, offset, m_text);
+        endPosition = Position(textNode, offset + m_text.length());
 
-        if (whitespaceRebalance == RebalanceLeadingAndTrailingWhitespaces) {
+        if (m_rebalanceType == RebalanceLeadingAndTrailingWhitespaces) {
             // The insertion may require adjusting adjacent whitespace, if it is present.
             rebalanceWhitespaceAt(endPosition);
             // Rebalancing on both sides isn't necessary if we've inserted only spaces.
-            if (!shouldRebalanceLeadingWhitespaceFor(text))
+            if (!shouldRebalanceLeadingWhitespaceFor(m_text))
                 rebalanceWhitespaceAt(startPosition);
         } else {
-            ASSERT(whitespaceRebalance == RebalanceAllWhitespaces);
+            ASSERT(m_rebalanceType == RebalanceAllWhitespaces);
             if (canRebalance(startPosition) && canRebalance(endPosition))
                 rebalanceWhitespaceOnTextSubstring(textNode, startPosition.offsetInContainerNode(), endPosition.offsetInContainerNode());
         }
@@ -190,7 +189,7 @@
             applyStyle(typingStyle.get());
     }
 
-    if (!selectInsertedText)
+    if (!m_selectInsertedText)
         setEndingSelection(VisibleSelection(endingSelection().end(), endingSelection().affinity()));
 }
 
@@ -233,9 +232,4 @@
     return lastPositionInNode(spanNode.get());
 }
 
-bool InsertTextCommand::isInsertTextCommand() const
-{
-    return true;
 }
-
-}

Modified: trunk/Source/WebCore/editing/InsertTextCommand.h (90932 => 90933)


--- trunk/Source/WebCore/editing/InsertTextCommand.h	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/editing/InsertTextCommand.h	2011-07-13 17:55:20 UTC (rev 90933)
@@ -37,21 +37,19 @@
         RebalanceAllWhitespaces
     };
 
-    static PassRefPtr<InsertTextCommand> create(Document* document)
+    static PassRefPtr<InsertTextCommand> create(Document* document, const String& text, bool selectInsertedText = false,
+        RebalanceType rebalanceType = RebalanceLeadingAndTrailingWhitespaces)
     {
-        return adoptRef(new InsertTextCommand(document));
+        return adoptRef(new InsertTextCommand(document, text, selectInsertedText, rebalanceType));
     }
 
-    void input(const String& text, bool selectInsertedText = false, RebalanceType = RebalanceLeadingAndTrailingWhitespaces);
-
 private:
 
-    InsertTextCommand(Document*);
+    InsertTextCommand(Document*, const String& text, bool selectInsertedText, RebalanceType);
 
     void deleteCharacter();
-    
+
     virtual void doApply();
-    virtual bool isInsertTextCommand() const;
 
     Position positionInsideTextNode(const Position&);
     Position insertTab(const Position&);
@@ -59,6 +57,10 @@
     bool performTrivialReplace(const String&, bool selectInsertedText);
 
     friend class TypingCommand;
+
+    String m_text;
+    bool m_selectInsertedText;
+    RebalanceType m_rebalanceType;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/editing/TypingCommand.cpp (90932 => 90933)


--- trunk/Source/WebCore/editing/TypingCommand.cpp	2011-07-13 17:50:18 UTC (rev 90932)
+++ trunk/Source/WebCore/editing/TypingCommand.cpp	2011-07-13 17:55:20 UTC (rev 90933)
@@ -391,22 +391,11 @@
 
 void TypingCommand::insertTextRunWithoutNewlines(const String &text, bool selectInsertedText)
 {
-    RefPtr<InsertTextCommand> command;
-    if (!document()->frame()->selection()->typingStyle() && !m_commands.isEmpty()) {
-        EditCommand* lastCommand = m_commands.last().get();
-        if (lastCommand->isInsertTextCommand())
-            command = static_cast<InsertTextCommand*>(lastCommand);
-    }
-    if (!command) {
-        command = InsertTextCommand::create(document());
-        applyCommandToComposite(command);
-    }
-    if (endingSelection() != command->endingSelection()) {
-        command->setStartingSelection(endingSelection());
-        command->setEndingSelection(endingSelection());
-    }
-    command->input(text, selectInsertedText, 
-                   m_compositionType == TextCompositionNone ? InsertTextCommand::RebalanceLeadingAndTrailingWhitespaces : InsertTextCommand::RebalanceAllWhitespaces);
+    RefPtr<InsertTextCommand> command = InsertTextCommand::create(document(), text, selectInsertedText,
+        m_compositionType == TextCompositionNone ? InsertTextCommand::RebalanceLeadingAndTrailingWhitespaces : InsertTextCommand::RebalanceAllWhitespaces);
+
+    applyCommandToComposite(command, endingSelection());
+
     typingAddedToOpenCommand(InsertText);
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to