diff options
Diffstat (limited to 'WebCore/editing')
-rw-r--r-- | WebCore/editing/ApplyStyleCommand.cpp | 102 | ||||
-rw-r--r-- | WebCore/editing/ApplyStyleCommand.h | 9 | ||||
-rw-r--r-- | WebCore/editing/CompositeEditCommand.cpp | 3 | ||||
-rw-r--r-- | WebCore/editing/Editor.cpp | 7 | ||||
-rw-r--r-- | WebCore/editing/Editor.h | 3 | ||||
-rw-r--r-- | WebCore/editing/InsertListCommand.cpp | 53 | ||||
-rw-r--r-- | WebCore/editing/SplitTextNodeCommand.cpp | 43 | ||||
-rw-r--r-- | WebCore/editing/SplitTextNodeCommand.h | 2 | ||||
-rw-r--r-- | WebCore/editing/SplitTextNodeContainingElementCommand.cpp | 2 | ||||
-rw-r--r-- | WebCore/editing/android/EditorAndroid.cpp | 2 | ||||
-rw-r--r-- | WebCore/editing/brew/EditorBrew.cpp | 2 | ||||
-rw-r--r-- | WebCore/editing/chromium/EditorChromium.cpp | 5 | ||||
-rw-r--r-- | WebCore/editing/haiku/EditorHaiku.cpp | 2 | ||||
-rw-r--r-- | WebCore/editing/mac/EditorMac.mm | 4 | ||||
-rw-r--r-- | WebCore/editing/qt/EditorQt.cpp | 2 | ||||
-rw-r--r-- | WebCore/editing/visible_units.cpp | 4 | ||||
-rw-r--r-- | WebCore/editing/wx/EditorWx.cpp | 2 |
17 files changed, 143 insertions, 104 deletions
diff --git a/WebCore/editing/ApplyStyleCommand.cpp b/WebCore/editing/ApplyStyleCommand.cpp index c50c988..8847714 100644 --- a/WebCore/editing/ApplyStyleCommand.cpp +++ b/WebCore/editing/ApplyStyleCommand.cpp @@ -684,13 +684,14 @@ void ApplyStyleCommand::applyRelativeFontStyleChange(CSSMutableStyleDeclaration } // Split the start text nodes if needed to apply style. - bool splitStart = splitTextAtStartIfNeeded(start, end); - if (splitStart) { + if (isValidCaretPositionInTextNode(start)) { + splitTextAtStart(start, end); start = startPosition(); end = endPosition(); } - bool splitEnd = splitTextAtEndIfNeeded(start, end); - if (splitEnd) { + + if (isValidCaretPositionInTextNode(end)) { + splitTextAtEnd(start, end); start = startPosition(); end = endPosition(); } @@ -907,16 +908,18 @@ void ApplyStyleCommand::applyInlineStyle(CSSMutableStyleDeclaration *style) } // split the start node and containing element if the selection starts inside of it - bool splitStart = splitTextElementAtStartIfNeeded(start, end); + bool splitStart = isValidCaretPositionInTextNode(start); if (splitStart) { + splitTextElementAtStart(start, end); start = startPosition(); end = endPosition(); startDummySpanAncestor = dummySpanAncestorForNode(start.node()); } // split the end node and containing element if the selection ends inside of it - bool splitEnd = splitTextElementAtEndIfNeeded(start, end); + bool splitEnd = isValidCaretPositionInTextNode(end); if (splitEnd) { + splitTextElementAtEnd(start, end); start = startPosition(); end = endPosition(); endDummySpanAncestor = dummySpanAncestorForNode(end.node()); @@ -1529,62 +1532,61 @@ bool ApplyStyleCommand::nodeFullyUnselected(Node *node, const Position &start, c return isFullyBeforeStart || isFullyAfterEnd; } - -bool ApplyStyleCommand::splitTextAtStartIfNeeded(const Position &start, const Position &end) +void ApplyStyleCommand::splitTextAtStart(const Position& start, const Position& end) { - if (start.node()->isTextNode() && start.deprecatedEditingOffset() > caretMinOffset(start.node()) && start.deprecatedEditingOffset() < caretMaxOffset(start.node())) { - int endOffsetAdjustment = start.node() == end.node() ? start.deprecatedEditingOffset() : 0; - Text *text = static_cast<Text *>(start.node()); - splitTextNode(text, start.deprecatedEditingOffset()); - updateStartEnd(Position(start.node(), 0), Position(end.node(), end.deprecatedEditingOffset() - endOffsetAdjustment)); - return true; - } - return false; + int endOffsetAdjustment = start.node() == end.node() ? start.deprecatedEditingOffset() : 0; + Text* text = static_cast<Text*>(start.node()); + splitTextNode(text, start.deprecatedEditingOffset()); + updateStartEnd(Position(start.node(), 0), Position(end.node(), end.deprecatedEditingOffset() - endOffsetAdjustment)); } -bool ApplyStyleCommand::splitTextAtEndIfNeeded(const Position &start, const Position &end) +void ApplyStyleCommand::splitTextAtEnd(const Position& start, const Position& end) { - if (end.node()->isTextNode() && end.deprecatedEditingOffset() > caretMinOffset(end.node()) && end.deprecatedEditingOffset() < caretMaxOffset(end.node())) { - Text *text = static_cast<Text *>(end.node()); - splitTextNode(text, end.deprecatedEditingOffset()); - - Node *prevNode = text->previousSibling(); - ASSERT(prevNode); - Node *startNode = start.node() == end.node() ? prevNode : start.node(); - ASSERT(startNode); - updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode, caretMaxOffset(prevNode))); - return true; - } - return false; + Text* text = static_cast<Text *>(end.node()); + splitTextNode(text, end.deprecatedEditingOffset()); + + Node* prevNode = text->previousSibling(); + ASSERT(prevNode); + Node* startNode = start.node() == end.node() ? prevNode : start.node(); + ASSERT(startNode); + updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode, caretMaxOffset(prevNode))); } -bool ApplyStyleCommand::splitTextElementAtStartIfNeeded(const Position &start, const Position &end) +void ApplyStyleCommand::splitTextElementAtStart(const Position& start, const Position& end) { - if (start.node()->isTextNode() && start.deprecatedEditingOffset() > caretMinOffset(start.node()) && start.deprecatedEditingOffset() < caretMaxOffset(start.node())) { - int endOffsetAdjustment = start.node() == end.node() ? start.deprecatedEditingOffset() : 0; - Text *text = static_cast<Text *>(start.node()); - splitTextNodeContainingElement(text, start.deprecatedEditingOffset()); + Node* parent = start.node()->parentNode(); + if (!parent || !parent->parentElement() || !parent->parentElement()->isContentEditable()) + return splitTextAtStart(start, end); - updateStartEnd(Position(start.node()->parentNode(), start.node()->nodeIndex()), Position(end.node(), end.deprecatedEditingOffset() - endOffsetAdjustment)); - return true; - } - return false; + int endOffsetAdjustment = start.node() == end.node() ? start.deprecatedEditingOffset() : 0; + Text* text = static_cast<Text*>(start.node()); + splitTextNodeContainingElement(text, start.deprecatedEditingOffset()); + updateStartEnd(Position(start.node()->parentNode(), start.node()->nodeIndex()), Position(end.node(), end.deprecatedEditingOffset() - endOffsetAdjustment)); } -bool ApplyStyleCommand::splitTextElementAtEndIfNeeded(const Position &start, const Position &end) +void ApplyStyleCommand::splitTextElementAtEnd(const Position& start, const Position& end) { - if (end.node()->isTextNode() && end.deprecatedEditingOffset() > caretMinOffset(end.node()) && end.deprecatedEditingOffset() < caretMaxOffset(end.node())) { - Text *text = static_cast<Text *>(end.node()); - splitTextNodeContainingElement(text, end.deprecatedEditingOffset()); + Node* parent = end.node()->parentNode(); + if (!parent || !parent->parentElement() || !parent->parentElement()->isContentEditable()) + return splitTextAtEnd(start, end); - Node *prevNode = text->parent()->previousSibling()->lastChild(); - ASSERT(prevNode); - Node *startNode = start.node() == end.node() ? prevNode : start.node(); - ASSERT(startNode); - updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode->parent(), prevNode->nodeIndex() + 1)); - return true; - } - return false; + Text* text = static_cast<Text*>(end.node()); + splitTextNodeContainingElement(text, end.deprecatedEditingOffset()); + + Node* prevNode = text->parent()->previousSibling()->lastChild(); + ASSERT(prevNode); + Node* startNode = start.node() == end.node() ? prevNode : start.node(); + ASSERT(startNode); + updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode->parent(), prevNode->nodeIndex() + 1)); +} + +bool ApplyStyleCommand::isValidCaretPositionInTextNode(const Position& position) +{ + Node* node = position.node(); + if (!node->isTextNode()) + return false; + int offsetInText = position.deprecatedEditingOffset(); + return (offsetInText > caretMinOffset(node) && offsetInText < caretMaxOffset(node)); } static bool areIdenticalElements(Node *first, Node *second) diff --git a/WebCore/editing/ApplyStyleCommand.h b/WebCore/editing/ApplyStyleCommand.h index 8326329..199b9db 100644 --- a/WebCore/editing/ApplyStyleCommand.h +++ b/WebCore/editing/ApplyStyleCommand.h @@ -91,10 +91,11 @@ private: void applyInlineStyleToRange(CSSMutableStyleDeclaration*, const Position& start, const Position& end); void addBlockStyle(const StyleChange&, HTMLElement*); void addInlineStyleIfNeeded(CSSMutableStyleDeclaration*, Node* start, Node* end); - bool splitTextAtStartIfNeeded(const Position& start, const Position& end); - bool splitTextAtEndIfNeeded(const Position& start, const Position& end); - bool splitTextElementAtStartIfNeeded(const Position& start, const Position& end); - bool splitTextElementAtEndIfNeeded(const Position& start, const Position& end); + void splitTextAtStart(const Position& start, const Position& end); + void splitTextAtEnd(const Position& start, const Position& end); + void splitTextElementAtStart(const Position& start, const Position& end); + void splitTextElementAtEnd(const Position& start, const Position& end); + bool isValidCaretPositionInTextNode(const Position& position); bool mergeStartWithPreviousIfIdentical(const Position& start, const Position& end); bool mergeEndWithNextIfIdentical(const Position& start, const Position& end); void cleanupUnstyledAppleStyleSpans(Node* dummySpanAncestor); diff --git a/WebCore/editing/CompositeEditCommand.cpp b/WebCore/editing/CompositeEditCommand.cpp index 41d6758..c5a8959 100644 --- a/WebCore/editing/CompositeEditCommand.cpp +++ b/WebCore/editing/CompositeEditCommand.cpp @@ -1009,7 +1009,8 @@ bool CompositeEditCommand::breakOutOfEmptyListItem() // FIXME: Can't we do something better when the immediate parent wasn't a list node? if (!listNode || (!listNode->hasTagName(ulTag) && !listNode->hasTagName(olTag)) - || !listNode->isContentEditable()) + || !listNode->isContentEditable() + || listNode == emptyListItem->rootEditableElement()) return false; RefPtr<Element> newBlock = 0; diff --git a/WebCore/editing/Editor.cpp b/WebCore/editing/Editor.cpp index 773ed90..44d8d5f 100644 --- a/WebCore/editing/Editor.cpp +++ b/WebCore/editing/Editor.cpp @@ -68,6 +68,7 @@ #include "Text.h" #include "TextIterator.h" #include "TypingCommand.h" +#include "UserTypingGestureIndicator.h" #include "htmlediting.h" #include "markup.h" #include "visible_units.h" @@ -712,7 +713,7 @@ bool Editor::dispatchCPPEvent(const AtomicString &eventType, ClipboardAccessPoli return true; target = target->shadowAncestorNode(); - RefPtr<Clipboard> clipboard = newGeneralClipboard(policy); + RefPtr<Clipboard> clipboard = newGeneralClipboard(policy, m_frame); ExceptionCode ec = 0; RefPtr<Event> evt = ClipboardEvent::create(eventType, true, true, clipboard); @@ -1370,6 +1371,8 @@ void Editor::confirmComposition(const String& text) void Editor::confirmComposition(const String& text, bool preserveSelection) { + UserTypingGestureIndicator typingGestureIndicator(m_frame); + setIgnoreCompositionSelectionChange(true); VisibleSelection oldSelection = m_frame->selection()->selection(); @@ -1412,6 +1415,8 @@ void Editor::confirmComposition(const String& text, bool preserveSelection) void Editor::setComposition(const String& text, const Vector<CompositionUnderline>& underlines, unsigned selectionStart, unsigned selectionEnd) { + UserTypingGestureIndicator typingGestureIndicator(m_frame); + setIgnoreCompositionSelectionChange(true); selectComposition(); diff --git a/WebCore/editing/Editor.h b/WebCore/editing/Editor.h index cd1b204..db249e7 100644 --- a/WebCore/editing/Editor.h +++ b/WebCore/editing/Editor.h @@ -42,6 +42,7 @@ class DeleteButtonController; class EditCommand; class EditorClient; class EditorInternalCommand; +class Frame; class HTMLElement; class HitTestResult; class KillRing; @@ -309,7 +310,7 @@ private: bool canDeleteRange(Range*) const; bool canSmartReplaceWithPasteboard(Pasteboard*); - PassRefPtr<Clipboard> newGeneralClipboard(ClipboardAccessPolicy); + PassRefPtr<Clipboard> newGeneralClipboard(ClipboardAccessPolicy, Frame*); void pasteAsPlainTextWithPasteboard(Pasteboard*); void pasteWithPasteboard(Pasteboard*, bool allowPlainText); void replaceSelectionWithFragment(PassRefPtr<DocumentFragment>, bool selectReplacement, bool smartReplace, bool matchStyle); diff --git a/WebCore/editing/InsertListCommand.cpp b/WebCore/editing/InsertListCommand.cpp index 06162c9..8f9c0de 100644 --- a/WebCore/editing/InsertListCommand.cpp +++ b/WebCore/editing/InsertListCommand.cpp @@ -150,6 +150,14 @@ void InsertListCommand::doApplyForSingleParagraph(bool forceCreateList) m_listElement = listifyParagraph(endingSelection().visibleStart(), listTag); } +static Node* enclosingListChild(Node* node, Node* listNode) +{ + Node* listChild = enclosingListChild(node); + if (enclosingList(listChild) != listNode) + return 0; + return listChild; +} + void InsertListCommand::unlistifyParagraph(const VisiblePosition& originalStart, HTMLElement* listNode, Node* listChildNode) { Node* nextListChild; @@ -165,14 +173,10 @@ void InsertListCommand::unlistifyParagraph(const VisiblePosition& originalStart, // A paragraph is visually a list item minus a list marker. The paragraph will be moved. start = startOfParagraph(originalStart); end = endOfParagraph(start); - nextListChild = enclosingListChild(end.next().deepEquivalent().node()); + nextListChild = enclosingListChild(end.next().deepEquivalent().node(), listNode); ASSERT(nextListChild != listChildNode); - if (enclosingList(nextListChild) != listNode) - nextListChild = 0; - previousListChild = enclosingListChild(start.previous().deepEquivalent().node()); + previousListChild = enclosingListChild(start.previous().deepEquivalent().node(), listNode); ASSERT(previousListChild != listChildNode); - if (enclosingList(previousListChild) != listNode) - previousListChild = 0; } // When removing a list, we must always create a placeholder to act as a point of insertion // for the list content being removed. @@ -210,28 +214,37 @@ void InsertListCommand::unlistifyParagraph(const VisiblePosition& originalStart, moveParagraphs(start, end, insertionPoint, true); } +static Element* adjacentEnclosingList(const VisiblePosition& pos, const VisiblePosition& adjacentPos, const QualifiedName& listTag) +{ + Element* listNode = outermostEnclosingList(adjacentPos.deepEquivalent().node()); + + if (!listNode) + return 0; + + Node* previousCell = enclosingTableCell(pos.deepEquivalent()); + Node* currentCell = enclosingTableCell(adjacentPos.deepEquivalent()); + + if (!listNode->hasTagName(listTag) + || listNode->contains(pos.deepEquivalent().node()) + || previousCell != currentCell) + return 0; + + return listNode; +} + PassRefPtr<HTMLElement> InsertListCommand::listifyParagraph(const VisiblePosition& originalStart, const QualifiedName& listTag) { VisiblePosition start = startOfParagraph(originalStart); VisiblePosition end = endOfParagraph(start); // Check for adjoining lists. - VisiblePosition previousPosition = start.previous(true); - VisiblePosition nextPosition = end.next(true); RefPtr<HTMLElement> listItemElement = createListItemElement(document()); RefPtr<HTMLElement> placeholder = createBreakElement(document()); appendNode(placeholder, listItemElement); - Element* previousList = outermostEnclosingList(previousPosition.deepEquivalent().node()); - Element* nextList = outermostEnclosingList(nextPosition.deepEquivalent().node()); - Node* startNode = start.deepEquivalent().node(); - Node* previousCell = enclosingTableCell(previousPosition.deepEquivalent()); - Node* nextCell = enclosingTableCell(nextPosition.deepEquivalent()); - Node* currentCell = enclosingTableCell(start.deepEquivalent()); - if (previousList && (!previousList->hasTagName(listTag) || startNode->isDescendantOf(previousList) || previousCell != currentCell)) - previousList = 0; - if (nextList && (!nextList->hasTagName(listTag) || startNode->isDescendantOf(nextList) || nextCell != currentCell)) - nextList = 0; + // Place list item into adjoining lists. + Element* previousList = adjacentEnclosingList(start.deepEquivalent(), start.previous(true), listTag); + Element* nextList = adjacentEnclosingList(start.deepEquivalent(), end.next(true), listTag); RefPtr<HTMLElement> listElement; if (previousList) appendNode(listItemElement, previousList); @@ -268,8 +281,6 @@ PassRefPtr<HTMLElement> InsertListCommand::listifyParagraph(const VisiblePositio // Update the start of content, so we don't try to move the list into itself. bug 19066 if (insertionPos == start.deepEquivalent()) start = startOfParagraph(originalStart); - previousList = outermostEnclosingList(previousPosition.deepEquivalent().node(), enclosingList(listElement.get())); - nextList = outermostEnclosingList(nextPosition.deepEquivalent().node(), enclosingList(listElement.get())); } moveParagraph(start, end, VisiblePosition(Position(placeholder.get(), 0)), true); @@ -281,6 +292,8 @@ PassRefPtr<HTMLElement> InsertListCommand::listifyParagraph(const VisiblePositio listElement = m_listElement; if (listElement) { + previousList = listElement->previousElementSibling(); + nextList = listElement->nextElementSibling(); if (canMergeLists(previousList, listElement.get())) mergeIdenticalElements(previousList, listElement.get()); if (canMergeLists(listElement.get(), nextList)) diff --git a/WebCore/editing/SplitTextNodeCommand.cpp b/WebCore/editing/SplitTextNodeCommand.cpp index 15daa49..9a7e3b3 100644 --- a/WebCore/editing/SplitTextNodeCommand.cpp +++ b/WebCore/editing/SplitTextNodeCommand.cpp @@ -54,21 +54,15 @@ void SplitTextNodeCommand::doApply() return; ExceptionCode ec = 0; - String prefixText = m_text2->substringData(0, m_offset, ec); if (prefixText.isEmpty()) return; - RefPtr<Text> prefixTextNode = Text::create(document(), prefixText); - ASSERT(prefixTextNode); - document()->copyMarkers(m_text2.get(), 0, m_offset, prefixTextNode.get(), 0); + m_text1 = Text::create(document(), prefixText); + ASSERT(m_text1); + document()->copyMarkers(m_text2.get(), 0, m_offset, m_text1.get(), 0); - parent->insertBefore(prefixTextNode.get(), m_text2.get(), ec); - if (ec) - return; - - m_text2->deleteData(0, m_offset, ec); - m_text1 = prefixTextNode.release(); + insertText1AndTrimText2(); } void SplitTextNodeCommand::doUnapply() @@ -78,16 +72,35 @@ void SplitTextNodeCommand::doUnapply() ASSERT(m_text1->document() == document()); - RefPtr<Text> prefixTextNode = m_text1.release(); - String prefixText = prefixTextNode->data(); + String prefixText = m_text1->data(); ExceptionCode ec = 0; m_text2->insertData(0, prefixText, ec); - if (ec) + ASSERT(!ec); + + document()->copyMarkers(m_text1.get(), 0, prefixText.length(), m_text2.get(), 0); + m_text1->remove(ec); +} + +void SplitTextNodeCommand::doReapply() +{ + if (!m_text1 || !m_text2) return; - document()->copyMarkers(prefixTextNode.get(), 0, prefixText.length(), m_text2.get(), 0); - prefixTextNode->remove(ec); + Node* parent = m_text2->parentNode(); + if (!parent || !parent->isContentEditable()) + return; + + insertText1AndTrimText2(); } +void SplitTextNodeCommand::insertText1AndTrimText2() +{ + ExceptionCode ec = 0; + m_text2->parentNode()->insertBefore(m_text1.get(), m_text2.get(), ec); + if (ec) + return; + m_text2->deleteData(0, m_offset, ec); +} + } // namespace WebCore diff --git a/WebCore/editing/SplitTextNodeCommand.h b/WebCore/editing/SplitTextNodeCommand.h index 48d444c..8d67d82 100644 --- a/WebCore/editing/SplitTextNodeCommand.h +++ b/WebCore/editing/SplitTextNodeCommand.h @@ -44,6 +44,8 @@ private: virtual void doApply(); virtual void doUnapply(); + virtual void doReapply(); + void insertText1AndTrimText2(); RefPtr<Text> m_text1; RefPtr<Text> m_text2; diff --git a/WebCore/editing/SplitTextNodeContainingElementCommand.cpp b/WebCore/editing/SplitTextNodeContainingElementCommand.cpp index e716c72..8c90fb0 100644 --- a/WebCore/editing/SplitTextNodeContainingElementCommand.cpp +++ b/WebCore/editing/SplitTextNodeContainingElementCommand.cpp @@ -48,7 +48,7 @@ void SplitTextNodeContainingElementCommand::doApply() splitTextNode(m_text.get(), m_offset); Element* parent = m_text->parentElement(); - if (!parent) + if (!parent || !parent->parentElement() || !parent->parentElement()->isContentEditable()) return; RenderObject* parentRenderer = parent->renderer(); diff --git a/WebCore/editing/android/EditorAndroid.cpp b/WebCore/editing/android/EditorAndroid.cpp index 8e00326..61cce01 100644 --- a/WebCore/editing/android/EditorAndroid.cpp +++ b/WebCore/editing/android/EditorAndroid.cpp @@ -31,7 +31,7 @@ namespace WebCore { -PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) +PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*) { return new ClipboardAndroid(policy, false); } diff --git a/WebCore/editing/brew/EditorBrew.cpp b/WebCore/editing/brew/EditorBrew.cpp index b610b62..4a1f4d7 100644 --- a/WebCore/editing/brew/EditorBrew.cpp +++ b/WebCore/editing/brew/EditorBrew.cpp @@ -31,7 +31,7 @@ namespace WebCore { -PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) +PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*) { return new ClipboardBrew(policy, false); } diff --git a/WebCore/editing/chromium/EditorChromium.cpp b/WebCore/editing/chromium/EditorChromium.cpp index 1ea085b..7a13b12 100644 --- a/WebCore/editing/chromium/EditorChromium.cpp +++ b/WebCore/editing/chromium/EditorChromium.cpp @@ -33,12 +33,13 @@ #include "ChromiumDataObject.h" #include "ClipboardChromium.h" +#include "Frame.h" namespace WebCore { -PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) +PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame) { - return ClipboardChromium::create(false, ChromiumDataObject::create(), policy); + return ClipboardChromium::create(false, ChromiumDataObject::create(), policy, frame); } } // namespace WebCore diff --git a/WebCore/editing/haiku/EditorHaiku.cpp b/WebCore/editing/haiku/EditorHaiku.cpp index 723d4ff..4596c9e 100644 --- a/WebCore/editing/haiku/EditorHaiku.cpp +++ b/WebCore/editing/haiku/EditorHaiku.cpp @@ -35,7 +35,7 @@ namespace WebCore { -PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) +PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*) { return ClipboardHaiku::create(policy, false); } diff --git a/WebCore/editing/mac/EditorMac.mm b/WebCore/editing/mac/EditorMac.mm index ca001a2..2c5a602 100644 --- a/WebCore/editing/mac/EditorMac.mm +++ b/WebCore/editing/mac/EditorMac.mm @@ -33,9 +33,9 @@ namespace WebCore { -PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) +PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame) { - return ClipboardMac::create(false, [NSPasteboard generalPasteboard], policy, 0); + return ClipboardMac::create(false, [NSPasteboard generalPasteboard], policy, frame); } void Editor::showFontPanel() diff --git a/WebCore/editing/qt/EditorQt.cpp b/WebCore/editing/qt/EditorQt.cpp index e74e2f3..7fb3634 100644 --- a/WebCore/editing/qt/EditorQt.cpp +++ b/WebCore/editing/qt/EditorQt.cpp @@ -39,7 +39,7 @@ namespace WebCore { -PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) +PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*) { return ClipboardQt::create(policy); } diff --git a/WebCore/editing/visible_units.cpp b/WebCore/editing/visible_units.cpp index c094aac..dd48406 100644 --- a/WebCore/editing/visible_units.cpp +++ b/WebCore/editing/visible_units.cpp @@ -377,9 +377,9 @@ static VisiblePosition positionAvoidingFirstPositionInTable(const VisiblePositio { // return table offset 0 instead of the first VisiblePosition inside the table VisiblePosition previous = c.previous(); - if (isLastPositionBeforeTable(previous)) + if (isLastPositionBeforeTable(previous) && isEditablePosition(previous.deepEquivalent())) return previous; - + return c; } diff --git a/WebCore/editing/wx/EditorWx.cpp b/WebCore/editing/wx/EditorWx.cpp index cb9e836..a2ec654 100644 --- a/WebCore/editing/wx/EditorWx.cpp +++ b/WebCore/editing/wx/EditorWx.cpp @@ -31,7 +31,7 @@ namespace WebCore { -PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) +PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*) { return ClipboardWx::create(policy, true); } |