summaryrefslogtreecommitdiffstats
path: root/WebCore/editing
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/editing')
-rw-r--r--WebCore/editing/ApplyStyleCommand.cpp102
-rw-r--r--WebCore/editing/ApplyStyleCommand.h9
-rw-r--r--WebCore/editing/CompositeEditCommand.cpp3
-rw-r--r--WebCore/editing/Editor.cpp7
-rw-r--r--WebCore/editing/Editor.h3
-rw-r--r--WebCore/editing/InsertListCommand.cpp53
-rw-r--r--WebCore/editing/SplitTextNodeCommand.cpp43
-rw-r--r--WebCore/editing/SplitTextNodeCommand.h2
-rw-r--r--WebCore/editing/SplitTextNodeContainingElementCommand.cpp2
-rw-r--r--WebCore/editing/android/EditorAndroid.cpp2
-rw-r--r--WebCore/editing/brew/EditorBrew.cpp2
-rw-r--r--WebCore/editing/chromium/EditorChromium.cpp5
-rw-r--r--WebCore/editing/haiku/EditorHaiku.cpp2
-rw-r--r--WebCore/editing/mac/EditorMac.mm4
-rw-r--r--WebCore/editing/qt/EditorQt.cpp2
-rw-r--r--WebCore/editing/visible_units.cpp4
-rw-r--r--WebCore/editing/wx/EditorWx.cpp2
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);
}