Changeset 126258 in webkit
- Timestamp:
- Aug 21, 2012 8:56:30 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r126257 r126258 1 2012-08-21 Sukolsak Sakshuwong <sukolsak@google.com> 2 3 Implement UndoManager's automatic DOM transactions 4 https://bugs.webkit.org/show_bug.cgi?id=91812 5 6 Reviewed by Ryosuke Niwa. 7 8 * editing/undomanager/automatic-transaction-attribute-expected.txt: Added. 9 * editing/undomanager/automatic-transaction-attribute.html: Added. 10 * editing/undomanager/automatic-transaction-data-expected.txt: Added. 11 * editing/undomanager/automatic-transaction-data.html: Added. 12 * editing/undomanager/automatic-transaction-node-expected.txt: Added. 13 * editing/undomanager/automatic-transaction-node.html: Added. 14 1 15 2012-08-21 Shezan Baig <sbaig1@bloomberg.net> 2 16 -
trunk/Source/WebCore/CMakeLists.txt
r126238 r126258 1219 1219 editing/CompositeEditCommand.cpp 1220 1220 editing/CreateLinkCommand.cpp 1221 editing/DOMTransactionStep.cpp 1221 1222 editing/DeleteButton.cpp 1222 1223 editing/DeleteButtonController.cpp -
trunk/Source/WebCore/ChangeLog
r126257 r126258 1 2012-08-21 Sukolsak Sakshuwong <sukolsak@google.com> 2 3 Implement UndoManager's automatic DOM transactions 4 https://bugs.webkit.org/show_bug.cgi?id=91812 5 6 Reviewed by Ryosuke Niwa. 7 8 This patch implements automatic DOM transactions in UndoManager 9 by recording changes in tree structure, attributes, and character data 10 of nodes under undo scope host. 11 12 Tests: editing/undomanager/automatic-transaction-attribute.html 13 editing/undomanager/automatic-transaction-data.html 14 editing/undomanager/automatic-transaction-node.html 15 16 * CMakeLists.txt: 17 * GNUmakefile.list.am: 18 * WebCore.gypi: 19 * WebCore.vcproj/WebCore.vcproj: 20 * WebCore.xcodeproj/project.pbxproj: 21 * bindings/js/DOMTransaction.h: 22 (WebCore::DOMTransaction::addTransactionStep): 23 (DOMTransaction): 24 * bindings/v8/DOMTransaction.cpp: 25 (DOMTransactionScope): 26 (WebCore::DOMTransactionScope::DOMTransactionScope): 27 (WebCore::DOMTransactionScope::~DOMTransactionScope): 28 (WebCore): 29 (WebCore::DOMTransaction::apply): 30 (WebCore::DOMTransaction::unapply): 31 (WebCore::DOMTransaction::reapply): 32 * bindings/v8/DOMTransaction.h: 33 (WebCore::DOMTransaction::addTransactionStep): 34 (DOMTransaction): 35 * css/PropertySetCSSStyleDeclaration.cpp: 36 (WebCore::PropertySetCSSStyleDeclaration::setCssText): 37 (WebCore::PropertySetCSSStyleDeclaration::setProperty): 38 (WebCore::PropertySetCSSStyleDeclaration::removeProperty): 39 (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal): 40 * dom/CharacterData.cpp: 41 (WebCore::CharacterData::setDataAndUpdate): 42 * dom/ContainerNode.cpp: 43 (WebCore::willRemoveChild): 44 (WebCore::willRemoveChildren): 45 (WebCore::updateTreeAfterInsertion): 46 * dom/Element.cpp: 47 (WebCore::Element::willModifyAttribute): 48 * editing/DOMTransactionStep.cpp: Added. 49 (WebCore): 50 (WebCore::NodeInsertingDOMTransactionStep::NodeInsertingDOMTransactionStep): 51 (WebCore::NodeInsertingDOMTransactionStep::create): 52 (WebCore::NodeInsertingDOMTransactionStep::unapply): 53 (WebCore::NodeInsertingDOMTransactionStep::reapply): 54 (WebCore::NodeRemovingDOMTransactionStep::NodeRemovingDOMTransactionStep): 55 (WebCore::NodeRemovingDOMTransactionStep::create): 56 (WebCore::NodeRemovingDOMTransactionStep::unapply): 57 (WebCore::NodeRemovingDOMTransactionStep::reapply): 58 (WebCore::DataReplacingDOMTransactionStep::DataReplacingDOMTransactionStep): 59 (WebCore::DataReplacingDOMTransactionStep::create): 60 (WebCore::DataReplacingDOMTransactionStep::unapply): 61 (WebCore::DataReplacingDOMTransactionStep::reapply): 62 (WebCore::AttrChangingDOMTransactionStep::AttrChangingDOMTransactionStep): 63 (WebCore::AttrChangingDOMTransactionStep::create): 64 (WebCore::AttrChangingDOMTransactionStep::unapply): 65 (WebCore::AttrChangingDOMTransactionStep::reapply): 66 * editing/DOMTransactionStep.h: Added. 67 (WebCore): 68 (DOMTransactionStep): 69 (WebCore::DOMTransactionStep::~DOMTransactionStep): 70 (NodeInsertingDOMTransactionStep): 71 (NodeRemovingDOMTransactionStep): 72 (DataReplacingDOMTransactionStep): 73 (AttrChangingDOMTransactionStep): 74 * editing/UndoManager.cpp: 75 (WebCore): 76 (WebCore::UndoManager::isRecordingAutomaticTransaction): 77 (WebCore::UndoManager::addTransactionStep): 78 * editing/UndoManager.h: 79 (WebCore): 80 (WebCore::UndoManager::setRecordingDOMTransaction): 81 (UndoManager): 82 1 83 2012-08-21 Shezan Baig <sbaig1@bloomberg.net> 2 84 -
trunk/Source/WebCore/GNUmakefile.list.am
r126238 r126258 2939 2939 Source/WebCore/editing/DictationCommand.cpp \ 2940 2940 Source/WebCore/editing/DictationCommand.h \ 2941 Source/WebCore/editing/DOMTransactionStep.cpp \ 2942 Source/WebCore/editing/DOMTransactionStep.h \ 2941 2943 Source/WebCore/editing/EditAction.h \ 2942 2944 Source/WebCore/editing/EditCommand.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r126238 r126258 2645 2645 'editing/CreateLinkCommand.cpp', 2646 2646 'editing/CreateLinkCommand.h', 2647 'editing/DOMTransactionStep.cpp', 2648 'editing/DOMTransactionStep.h', 2647 2649 'editing/DeleteButton.cpp', 2648 2650 'editing/DeleteButton.h', -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r126238 r126258 56000 56000 </File> 56001 56001 <File 56002 RelativePath="..\editing\DOMTransactionStep.cpp" 56003 > 56004 <FileConfiguration 56005 Name="Debug|Win32" 56006 ExcludedFromBuild="true" 56007 > 56008 <Tool 56009 Name="VCCLCompilerTool" 56010 /> 56011 </FileConfiguration> 56012 <FileConfiguration 56013 Name="Release|Win32" 56014 ExcludedFromBuild="true" 56015 > 56016 <Tool 56017 Name="VCCLCompilerTool" 56018 /> 56019 </FileConfiguration> 56020 <FileConfiguration 56021 Name="Debug_Cairo_CFLite|Win32" 56022 ExcludedFromBuild="true" 56023 > 56024 <Tool 56025 Name="VCCLCompilerTool" 56026 /> 56027 </FileConfiguration> 56028 <FileConfiguration 56029 Name="Release_Cairo_CFLite|Win32" 56030 ExcludedFromBuild="true" 56031 > 56032 <Tool 56033 Name="VCCLCompilerTool" 56034 /> 56035 </FileConfiguration> 56036 <FileConfiguration 56037 Name="Debug_All|Win32" 56038 ExcludedFromBuild="true" 56039 > 56040 <Tool 56041 Name="VCCLCompilerTool" 56042 /> 56043 </FileConfiguration> 56044 <FileConfiguration 56045 Name="Production|Win32" 56046 ExcludedFromBuild="true" 56047 > 56048 <Tool 56049 Name="VCCLCompilerTool" 56050 /> 56051 </FileConfiguration> 56052 </File> 56053 <File 56054 RelativePath="..\editing\DOMTransactionStep.h" 56055 > 56056 </File> 56057 <File 56002 56058 RelativePath="..\editing\EditAction.h" 56003 56059 > -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r126238 r126258 1969 1969 7BB35AEB15CCDDF400F2A643 /* DOMTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7BB35AE915CCDDF400F2A643 /* DOMTransaction.cpp */; }; 1970 1970 7BB35AEC15CCDDF400F2A643 /* DOMTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BB35AEA15CCDDF400F2A643 /* DOMTransaction.h */; }; 1971 7BD117EB15B8DB0100C974A3 /* DOMTransactionStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7BD117E915B8DB0100C974A3 /* DOMTransactionStep.cpp */; }; 1972 7BD117EC15B8DB0100C974A3 /* DOMTransactionStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD117EA15B8DB0100C974A3 /* DOMTransactionStep.h */; }; 1971 1973 7C522D4B15B477E8009B7C95 /* InspectorOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C522D4915B477E8009B7C95 /* InspectorOverlay.cpp */; }; 1972 1974 7E33CD01127F340D00BE8F17 /* PurgePriority.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E33CD00127F340D00BE8F17 /* PurgePriority.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 9146 9148 7BB35AE915CCDDF400F2A643 /* DOMTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMTransaction.cpp; sourceTree = "<group>"; }; 9147 9149 7BB35AEA15CCDDF400F2A643 /* DOMTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMTransaction.h; sourceTree = "<group>"; }; 9150 7BD117E915B8DB0100C974A3 /* DOMTransactionStep.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMTransactionStep.cpp; sourceTree = "<group>"; }; 9151 7BD117EA15B8DB0100C974A3 /* DOMTransactionStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMTransactionStep.h; sourceTree = "<group>"; }; 9148 9152 7C522D4915B477E8009B7C95 /* InspectorOverlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorOverlay.cpp; sourceTree = "<group>"; }; 9149 9153 7C522D4A15B478B2009B7C95 /* InspectorOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorOverlay.h; sourceTree = "<group>"; }; … … 17105 17109 CECADFC5153778FF00E37068 /* DictationCommand.h */, 17106 17110 7B8C1FE615CCE3C2004B35DC /* DOMTransaction.idl */, 17111 7BD117E915B8DB0100C974A3 /* DOMTransactionStep.cpp */, 17112 7BD117EA15B8DB0100C974A3 /* DOMTransactionStep.h */, 17107 17113 93309D93099E64910056E581 /* EditAction.h */, 17108 17114 93309D94099E64910056E581 /* EditCommand.cpp */, … … 23130 23136 76FC2B0C12370DA0006A991A /* DOMTokenList.h in Headers */, 23131 23137 7BB35AEC15CCDDF400F2A643 /* DOMTransaction.h in Headers */, 23138 7BD117EC15B8DB0100C974A3 /* DOMTransactionStep.h in Headers */, 23132 23139 BC1A37BE097C715F0019F3D8 /* DOMTraversal.h in Headers */, 23133 23140 85526CD20AB0B7D9000302EA /* DOMTreeWalker.h in Headers */, … … 26401 26408 76FC2B0B12370DA0006A991A /* DOMTokenList.cpp in Sources */, 26402 26409 7BB35AEB15CCDDF400F2A643 /* DOMTransaction.cpp in Sources */, 26410 7BD117EB15B8DB0100C974A3 /* DOMTransactionStep.cpp in Sources */, 26403 26411 85526CD30AB0B7DA000302EA /* DOMTreeWalker.mm in Sources */, 26404 26412 85C7F4920AAF79DC004014DD /* DOMUIEvent.mm in Sources */, -
trunk/Source/WebCore/bindings/js/DOMTransaction.h
r125865 r126258 28 28 #if ENABLE(UNDO_MANAGER) 29 29 30 #include "DOMTransactionStep.h" 30 31 #include "UndoStep.h" 31 32 #include <wtf/RefPtr.h> … … 49 50 void setUndoManager(UndoManager* undoManager) { m_undoManager = undoManager; } 50 51 52 void addTransactionStep(PassRefPtr<DOMTransactionStep> step) { m_transactionSteps.append(step); } 53 51 54 private: 52 55 DOMTransaction(); 53 56 54 57 UndoManager* m_undoManager; 58 Vector<RefPtr<DOMTransactionStep> > m_transactionSteps; 55 59 }; 56 60 -
trunk/Source/WebCore/bindings/v8/DOMTransaction.cpp
r126245 r126258 36 36 namespace WebCore { 37 37 38 class DOMTransactionScope { 39 public: 40 DOMTransactionScope(DOMTransaction* transaction) 41 { 42 UndoManager::setRecordingDOMTransaction(transaction); 43 } 44 45 ~DOMTransactionScope() 46 { 47 UndoManager::setRecordingDOMTransaction(0); 48 } 49 }; 50 38 51 DOMTransaction::DOMTransaction(const WorldContextHandle& worldContext) 39 52 : m_worldContext(worldContext) … … 52 65 if (!m_isAutomatic) 53 66 callFunction("execute"); 67 else { 68 DOMTransactionScope scope(this); 69 callFunction("executeAutomatic"); 70 } 54 71 } 55 72 … … 58 75 if (!m_isAutomatic) 59 76 callFunction("undo"); 77 else { 78 for (size_t i = m_transactionSteps.size(); i > 0; --i) 79 m_transactionSteps[i - 1]->unapply(); 80 } 60 81 61 82 if (m_undoManager) … … 67 88 if (!m_isAutomatic) 68 89 callFunction("redo"); 90 else { 91 for (size_t i = 0; i < m_transactionSteps.size(); ++i) 92 m_transactionSteps[i]->reapply(); 93 } 69 94 70 95 if (m_undoManager) -
trunk/Source/WebCore/bindings/v8/DOMTransaction.h
r125865 r126258 28 28 #if ENABLE(UNDO_MANAGER) 29 29 30 #include "DOMTransactionStep.h" 30 31 #include "UndoStep.h" 31 32 #include "WorldContextHandle.h" … … 50 51 void setUndoManager(UndoManager* undoManager) { m_undoManager = undoManager; } 51 52 53 void addTransactionStep(PassRefPtr<DOMTransactionStep> step) { m_transactionSteps.append(step); } 54 52 55 private: 53 56 DOMTransaction(const WorldContextHandle&); … … 58 61 UndoManager* m_undoManager; 59 62 bool m_isAutomatic; 63 Vector<RefPtr<DOMTransactionStep> > m_transactionSteps; 60 64 }; 61 65 -
trunk/Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp
r126118 r126258 32 32 #include "StylePropertySet.h" 33 33 #include "StyledElement.h" 34 #include "UndoManager.h" 34 35 35 36 using namespace std; … … 54 55 s_currentDecl = decl; 55 56 56 #if ENABLE(MUTATION_OBSERVERS) 57 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 57 58 if (!s_currentDecl->parentElement()) 58 59 return; 60 61 bool shouldReadOldValue = false; 62 63 #if ENABLE(MUTATION_OBSERVERS) 59 64 m_mutationRecipients = MutationObserverInterestGroup::createForAttributesMutation(s_currentDecl->parentElement(), HTMLNames::styleAttr); 60 if (!m_mutationRecipients) 61 return; 62 63 AtomicString oldValue = m_mutationRecipients->isOldValueRequested() ? s_currentDecl->parentElement()->getAttribute(HTMLNames::styleAttr) : nullAtom; 64 m_mutation = MutationRecord::createAttributes(s_currentDecl->parentElement(), HTMLNames::styleAttr, oldValue); 65 if (m_mutationRecipients && m_mutationRecipients->isOldValueRequested()) 66 shouldReadOldValue = true; 67 #endif 68 #if ENABLE(UNDO_MANAGER) 69 m_isRecordingAutomaticTransaction = UndoManager::isRecordingAutomaticTransaction(s_currentDecl->parentElement()); 70 if (m_isRecordingAutomaticTransaction) 71 shouldReadOldValue = true; 72 #endif 73 74 AtomicString oldValue; 75 if (shouldReadOldValue) 76 oldValue = s_currentDecl->parentElement()->getAttribute(HTMLNames::styleAttr); 77 78 #if ENABLE(MUTATION_OBSERVERS) 79 if (m_mutationRecipients) { 80 AtomicString requestedOldValue = m_mutationRecipients->isOldValueRequested() ? oldValue : nullAtom; 81 m_mutation = MutationRecord::createAttributes(s_currentDecl->parentElement(), HTMLNames::styleAttr, requestedOldValue); 82 } 83 #endif 84 #if ENABLE(UNDO_MANAGER) 85 if (m_isRecordingAutomaticTransaction) 86 m_oldValue = oldValue; 87 #endif 88 65 89 #endif 66 90 } … … 75 99 if (m_mutation && s_shouldDeliver) 76 100 m_mutationRecipients->enqueueMutationRecord(m_mutation); 101 #endif 102 #if ENABLE(UNDO_MANAGER) 103 if (m_isRecordingAutomaticTransaction && s_shouldDeliver) { 104 UndoManager::addTransactionStep(AttrChangingDOMTransactionStep::create( 105 s_currentDecl->parentElement(), HTMLNames::styleAttr, m_oldValue, s_currentDecl->parentElement()->getAttribute(HTMLNames::styleAttr))); 106 } 107 #endif 108 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 77 109 s_shouldDeliver = false; 78 110 #endif … … 89 121 } 90 122 91 #if ENABLE(MUTATION_OBSERVERS) 123 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 92 124 void enqueueMutationRecord() 93 125 { … … 105 137 static PropertySetCSSStyleDeclaration* s_currentDecl; 106 138 static bool s_shouldNotifyInspector; 139 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 140 static bool s_shouldDeliver; 141 #endif 142 107 143 #if ENABLE(MUTATION_OBSERVERS) 108 static bool s_shouldDeliver;109 110 144 OwnPtr<MutationObserverInterestGroup> m_mutationRecipients; 111 145 RefPtr<MutationRecord> m_mutation; 146 #endif 147 #if ENABLE(UNDO_MANAGER) 148 bool m_isRecordingAutomaticTransaction; 149 AtomicString m_oldValue; 112 150 #endif 113 151 }; … … 116 154 PropertySetCSSStyleDeclaration* StyleAttributeMutationScope::s_currentDecl = 0; 117 155 bool StyleAttributeMutationScope::s_shouldNotifyInspector = false; 118 #if ENABLE(MUTATION_OBSERVERS) 156 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 119 157 bool StyleAttributeMutationScope::s_shouldDeliver = false; 120 158 #endif … … 159 197 void PropertySetCSSStyleDeclaration::setCssText(const String& text, ExceptionCode& ec) 160 198 { 161 #if ENABLE(MUTATION_OBSERVERS) 199 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 162 200 StyleAttributeMutationScope mutationScope(this); 163 201 #endif … … 170 208 didMutate(PropertyChanged); 171 209 172 #if ENABLE(MUTATION_OBSERVERS) 210 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 173 211 mutationScope.enqueueMutationRecord(); 174 212 #endif … … 220 258 void PropertySetCSSStyleDeclaration::setProperty(const String& propertyName, const String& value, const String& priority, ExceptionCode& ec) 221 259 { 222 #if ENABLE(MUTATION_OBSERVERS) 260 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 223 261 StyleAttributeMutationScope mutationScope(this); 224 262 #endif … … 239 277 // CSS DOM requires raising SYNTAX_ERR of parsing failed, but this is too dangerous for compatibility, 240 278 // see <http://bugs.webkit.org/show_bug.cgi?id=7296>. 241 #if ENABLE(MUTATION_OBSERVERS) 279 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 242 280 mutationScope.enqueueMutationRecord(); 243 281 #endif … … 247 285 String PropertySetCSSStyleDeclaration::removeProperty(const String& propertyName, ExceptionCode& ec) 248 286 { 249 #if ENABLE(MUTATION_OBSERVERS) 287 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 250 288 StyleAttributeMutationScope mutationScope(this); 251 289 #endif … … 263 301 264 302 if (changed) { 265 #if ENABLE(MUTATION_OBSERVERS) 303 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 266 304 mutationScope.enqueueMutationRecord(); 267 305 #endif … … 282 320 void PropertySetCSSStyleDeclaration::setPropertyInternal(CSSPropertyID propertyID, const String& value, bool important, ExceptionCode& ec) 283 321 { 284 #if ENABLE(MUTATION_OBSERVERS) 322 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 285 323 StyleAttributeMutationScope mutationScope(this); 286 324 #endif … … 293 331 294 332 if (changed) { 295 #if ENABLE(MUTATION_OBSERVERS) 333 #if ENABLE(MUTATION_OBSERVERS) || ENABLE(UNDO_MANAGER) 296 334 mutationScope.enqueueMutationRecord(); 297 335 #endif -
trunk/Source/WebCore/dom/CharacterData.cpp
r126154 r126258 34 34 #include "RenderText.h" 35 35 #include "TextBreakIterator.h" 36 #include "UndoManager.h" 36 37 37 38 using namespace std; … … 184 185 void CharacterData::setDataAndUpdate(const String& newData, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength) 185 186 { 187 #if ENABLE(UNDO_MANAGER) 188 if (UndoManager::isRecordingAutomaticTransaction(this)) { 189 const String& replacingData = newData.substring(offsetOfReplacedData, newLength); 190 const String& replacedData = m_data.substring(offsetOfReplacedData, oldLength); 191 UndoManager::addTransactionStep(DataReplacingDOMTransactionStep::create(this, offsetOfReplacedData, oldLength, replacingData, replacedData)); 192 } 193 #endif 186 194 String oldData = m_data; 187 195 m_data = newData; -
trunk/Source/WebCore/dom/ContainerNode.cpp
r125237 r126258 41 41 #include "RenderTheme.h" 42 42 #include "RootInlineBox.h" 43 #include "UndoManager.h" 43 44 #include <wtf/CurrentTime.h> 44 45 #include <wtf/Vector.h> … … 328 329 child->notifyMutationObserversNodeWillDetach(); 329 330 #endif 331 #if ENABLE(UNDO_MANAGER) 332 if (UndoManager::isRecordingAutomaticTransaction(child->parentNode())) 333 UndoManager::addTransactionStep(NodeRemovingDOMTransactionStep::create(child->parentNode(), child)); 334 #endif 330 335 331 336 dispatchChildRemovalEvents(child); … … 351 356 mutation.willRemoveChild(child); 352 357 child->notifyMutationObserversNodeWillDetach(); 358 #endif 359 #if ENABLE(UNDO_MANAGER) 360 if (UndoManager::isRecordingAutomaticTransaction(container)) 361 UndoManager::addTransactionStep(NodeRemovingDOMTransactionStep::create(container, child)); 353 362 #endif 354 363 … … 980 989 #endif 981 990 991 #if ENABLE(UNDO_MANAGER) 992 if (UndoManager::isRecordingAutomaticTransaction(parent)) 993 UndoManager::addTransactionStep(NodeInsertingDOMTransactionStep::create(parent, child)); 994 #endif 995 982 996 parent->childrenChanged(false, child->previousSibling(), child->nextSibling(), 1); 983 997 -
trunk/Source/WebCore/dom/Element.cpp
r126245 r126258 71 71 #include "Text.h" 72 72 #include "TextIterator.h" 73 #include "UndoManager.h" 73 74 #include "VoidCallback.h" 74 75 #include "WebKitAnimationList.h" … … 2049 2050 #endif 2050 2051 2052 #if ENABLE(UNDO_MANAGER) 2053 if (UndoManager::isRecordingAutomaticTransaction(this)) 2054 UndoManager::addTransactionStep(AttrChangingDOMTransactionStep::create(this, name, oldValue, newValue)); 2055 #endif 2056 2051 2057 #if ENABLE(INSPECTOR) 2052 2058 InspectorInstrumentation::willModifyDOMAttr(document(), this, oldValue, newValue); -
trunk/Source/WebCore/editing/UndoManager.cpp
r126245 r126258 35 35 #include "UndoManager.h" 36 36 37 #include "DOMTransaction.h"38 37 #include "ExceptionCode.h" 39 38 40 39 namespace WebCore { 40 41 DOMTransaction* UndoManager::s_recordingDOMTransaction = 0; 41 42 42 43 PassRefPtr<UndoManager> UndoManager::create(Document* document) … … 200 201 } 201 202 203 bool UndoManager::isRecordingAutomaticTransaction(Node* node) 204 { 205 // We need to check that transaction still has its undomanager because 206 // transaction can disconnect its undomanager, which will clear the undo/redo stacks. 207 if (!s_recordingDOMTransaction || !s_recordingDOMTransaction->undoManager()) 208 return false; 209 Document* document = s_recordingDOMTransaction->undoManager()->document(); 210 return document && node->document() == document; 211 } 212 213 void UndoManager::addTransactionStep(PassRefPtr<DOMTransactionStep> step) 214 { 215 ASSERT(s_recordingDOMTransaction); 216 s_recordingDOMTransaction->addTransactionStep(step); 217 } 218 202 219 } 203 220 -
trunk/Source/WebCore/editing/UndoManager.h
r126245 r126258 35 35 36 36 #include "ActiveDOMObject.h" 37 #include "DOMTransaction.h" 37 38 #include "Document.h" 38 39 #include "ExceptionCodePlaceholder.h" … … 46 47 47 48 namespace WebCore { 48 49 class DOMTransaction;50 49 51 50 typedef Vector<RefPtr<UndoStep> > UndoManagerEntry; … … 79 78 Node* ownerNode() const { return m_document; } 80 79 80 static void setRecordingDOMTransaction(DOMTransaction* transaction) { s_recordingDOMTransaction = transaction; } 81 static bool isRecordingAutomaticTransaction(Node*); 82 static void addTransactionStep(PassRefPtr<DOMTransactionStep>); 83 81 84 private: 82 85 explicit UndoManager(Document*); … … 87 90 bool m_isInProgress; 88 91 OwnPtr<UndoManagerEntry> m_inProgressEntry; 92 93 static DOMTransaction* s_recordingDOMTransaction; 89 94 }; 90 95
Note: See TracChangeset
for help on using the changeset viewer.