diff options
Diffstat (limited to 'Source/WebCore/dom/Element.cpp')
-rw-r--r-- | Source/WebCore/dom/Element.cpp | 75 |
1 files changed, 8 insertions, 67 deletions
diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp index 53d6a2982..743e12278 100644 --- a/Source/WebCore/dom/Element.cpp +++ b/Source/WebCore/dom/Element.cpp @@ -70,6 +70,7 @@ #include "StyleResolver.h" #include "Text.h" #include "TextIterator.h" +#include "UndoManager.h" #include "VoidCallback.h" #include "WebKitAnimationList.h" #include "XMLNSNames.h" @@ -146,13 +147,6 @@ Element::~Element() ASSERT(m_attributeData); m_attributeData->detachAttrObjectsFromElement(this); } - -#if ENABLE(UNDO_MANAGER) - if (hasRareData() && elementRareData()->m_undoManager) { - elementRareData()->m_undoManager->disconnect(); - elementRareData()->m_undoManager.clear(); - } -#endif } inline ElementRareData* Element::elementRareData() const @@ -1005,9 +999,8 @@ void Element::detach() if (ElementShadow* shadow = this->shadow()) { detachChildrenIfNeeded(); shadow->detach(); - detachAsNode(); - } else - ContainerNode::detach(); + } + ContainerNode::detach(); RenderWidget::resumeWidgetHierarchyUpdates(); } @@ -2055,6 +2048,11 @@ void Element::willModifyAttribute(const QualifiedName& name, const AtomicString& recipients->enqueueMutationRecord(MutationRecord::createAttributes(this, name, oldValue)); #endif +#if ENABLE(UNDO_MANAGER) + if (UndoManager::isRecordingAutomaticTransaction(this)) + UndoManager::addTransactionStep(AttrChangingDOMTransactionStep::create(this, name, oldValue, newValue)); +#endif + #if ENABLE(INSPECTOR) InspectorInstrumentation::willModifyDOMAttr(document(), this, oldValue, newValue); #endif @@ -2222,61 +2220,4 @@ void Element::createMutableAttributeData() m_attributeData = m_attributeData->makeMutable(); } -#if ENABLE(UNDO_MANAGER) -bool Element::undoScope() const -{ - return hasRareData() && elementRareData()->m_undoScope; -} - -void Element::setUndoScope(bool undoScope) -{ - ElementRareData* data = ensureElementRareData(); - data->m_undoScope = undoScope; - if (!undoScope) - disconnectUndoManager(); -} - -PassRefPtr<UndoManager> Element::undoManager() -{ - if (!undoScope() || (isContentEditable() && !isRootEditableElement())) { - disconnectUndoManager(); - return 0; - } - ElementRareData* data = ensureElementRareData(); - if (!data->m_undoManager) - data->m_undoManager = UndoManager::create(document(), this); - return data->m_undoManager; -} - -void Element::disconnectUndoManager() -{ - if (!hasRareData()) - return; - ElementRareData* data = elementRareData(); - UndoManager* undoManager = data->m_undoManager.get(); - if (!undoManager) - return; - undoManager->disconnect(); - data->m_undoManager.clear(); -} - -void Element::disconnectUndoManagersInSubtree() -{ - Node* node = firstChild(); - while (node) { - if (node->isElementNode()) { - Element* element = toElement(node); - if (element->hasRareData() && element->elementRareData()->m_undoManager) { - if (!node->isContentEditable()) { - node = node->traverseNextSibling(this); - continue; - } - element->disconnectUndoManager(); - } - } - node = node->traverseNextNode(this); - } -} -#endif - } // namespace WebCore |