summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/dom/Element.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/Element.cpp')
-rw-r--r--Source/WebCore/dom/Element.cpp75
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