diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-04-16 14:48:38 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-04-16 14:48:38 +0200 |
commit | 842e3d91b43810385d2942f0b9423fbc3c4ae4b9 (patch) | |
tree | 9e271304e885b39d8a88ba7fefd59d75f7a03623 /editor/libeditor/HTMLEditorDataTransfer.cpp | |
parent | 931950a880b3550490422b1855c509be10586858 (diff) | |
parent | 4028f58ce7e9ed54327afc6e2a44f5092005dcda (diff) | |
download | UXP-842e3d91b43810385d2942f0b9423fbc3c4ae4b9.tar UXP-842e3d91b43810385d2942f0b9423fbc3c4ae4b9.tar.gz UXP-842e3d91b43810385d2942f0b9423fbc3c4ae4b9.tar.lz UXP-842e3d91b43810385d2942f0b9423fbc3c4ae4b9.tar.xz UXP-842e3d91b43810385d2942f0b9423fbc3c4ae4b9.zip |
Merge branch 'master' of https://github.com/MoonchildProductions/UXP
Diffstat (limited to 'editor/libeditor/HTMLEditorDataTransfer.cpp')
-rw-r--r-- | editor/libeditor/HTMLEditorDataTransfer.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/editor/libeditor/HTMLEditorDataTransfer.cpp b/editor/libeditor/HTMLEditorDataTransfer.cpp index b9cd8adb9..ed350c0dd 100644 --- a/editor/libeditor/HTMLEditorDataTransfer.cpp +++ b/editor/libeditor/HTMLEditorDataTransfer.cpp @@ -2382,27 +2382,26 @@ HTMLEditor::ReplaceOrphanedStructure( } // If we found substructure, paste it instead of its descendants. - // Only replace with the substructure if all the nodes in the list are - // descendants. - bool shouldReplaceNodes = true; - for (uint32_t i = 0; i < aNodeArray.Length(); i++) { + // Postprocess list to remove any descendants of this node so that we don't + // insert them twice. + uint32_t removedCount = 0; + uint32_t originalLength = aNodeArray.Length(); + for (uint32_t i = 0; i < originalLength; i++) { uint32_t idx = aStartOrEnd == StartOrEnd::start ? - i : (aNodeArray.Length() - i - 1); + (i - removedCount) : (originalLength - i - 1); OwningNonNull<nsINode> endpoint = aNodeArray[idx]; - if (!EditorUtils::IsDescendantOf(endpoint, replaceNode)) { - shouldReplaceNodes = false; - break; + if (endpoint == replaceNode || + EditorUtils::IsDescendantOf(endpoint, replaceNode)) { + aNodeArray.RemoveElementAt(idx); + removedCount++; } } - if (shouldReplaceNodes) { - // Now replace the removed nodes with the structural parent - aNodeArray.Clear(); - if (aStartOrEnd == StartOrEnd::end) { - aNodeArray.AppendElement(*replaceNode); - } else { - aNodeArray.InsertElementAt(0, *replaceNode); - } + // Now replace the removed nodes with the structural parent + if (aStartOrEnd == StartOrEnd::end) { + aNodeArray.AppendElement(*replaceNode); + } else { + aNodeArray.InsertElementAt(0, *replaceNode); } } |