| Index: Source/core/editing/DeleteSelectionCommand.cpp
|
| diff --git a/Source/core/editing/DeleteSelectionCommand.cpp b/Source/core/editing/DeleteSelectionCommand.cpp
|
| index 58ad9c54fe5092a0e14befa45989e0093b3dd788..51ff2da0cf3e021786bdf275694dcc4b3b7a69bc 100644
|
| --- a/Source/core/editing/DeleteSelectionCommand.cpp
|
| +++ b/Source/core/editing/DeleteSelectionCommand.cpp
|
| @@ -58,10 +58,10 @@ static bool isTableRowEmpty(Node* row)
|
| if (!isHTMLTableRowElement(row))
|
| return false;
|
|
|
| - for (Node* child = row->firstChild(); child; child = child->nextSibling())
|
| + for (Node* child = row->firstChild(); child; child = child->nextSibling()) {
|
| if (isTableCell(child) && !isTableCellEmpty(child))
|
| return false;
|
| -
|
| + }
|
| return true;
|
| }
|
|
|
| @@ -140,15 +140,15 @@ void DeleteSelectionCommand::initializeStartEnd(Position& start, Position& end)
|
| if (endSpecialContainer && !startSpecialContainer && comparePositions(start, positionInParentBeforeNode(*endSpecialContainer)) > -1)
|
| break;
|
|
|
| - if (startSpecialContainer && startSpecialContainer->isDescendantOf(endSpecialContainer))
|
| + if (startSpecialContainer && startSpecialContainer->isDescendantOf(endSpecialContainer)) {
|
| // Don't adjust the end yet, it is the end of a special element that contains the start
|
| // special element (which may or may not be fully selected).
|
| start = s;
|
| - else if (endSpecialContainer && endSpecialContainer->isDescendantOf(startSpecialContainer))
|
| + } else if (endSpecialContainer && endSpecialContainer->isDescendantOf(startSpecialContainer)) {
|
| // Don't adjust the start yet, it is the start of a special element that contains the end
|
| // special element (which may or may not be fully selected).
|
| end = e;
|
| - else {
|
| + } else {
|
| start = s;
|
| end = e;
|
| }
|
| @@ -208,8 +208,8 @@ void DeleteSelectionCommand::initializePositionData()
|
| // Only apply this rule if the endingSelection is a range selection. If it is a caret, then other operations have created
|
| // the selection we're deleting (like the process of creating a selection to delete during a backspace), and the user isn't in the situation described above.
|
| if (numEnclosingMailBlockquotes(start) != numEnclosingMailBlockquotes(end)
|
| - && isStartOfParagraph(visibleEnd) && isStartOfParagraph(VisiblePosition(start))
|
| - && endingSelection().isRange()) {
|
| + && isStartOfParagraph(visibleEnd) && isStartOfParagraph(VisiblePosition(start))
|
| + && endingSelection().isRange()) {
|
| m_mergeBlocksAfterDelete = false;
|
| m_pruneStartBlockIfNecessary = true;
|
| }
|
| @@ -491,8 +491,7 @@ void DeleteSelectionCommand::handleGeneralDelete()
|
| // The selection to delete is all in one node.
|
| if (!startNode->layoutObject() || (!startOffset && m_downstreamEnd.atLastEditingPositionForNode()))
|
| removeNode(startNode);
|
| - }
|
| - else {
|
| + } else {
|
| bool startNodeWasDescendantOfEndNode = m_upstreamStart.anchorNode()->isDescendantOf(m_downstreamEnd.anchorNode());
|
| // The selection to delete spans more than one node.
|
| RefPtrWillBeRawPtr<Node> node(startNode);
|
| @@ -604,7 +603,7 @@ void DeleteSelectionCommand::mergeParagraphs()
|
|
|
| // FIXME: Deletion should adjust selection endpoints as it removes nodes so that we never get into this state (4099839).
|
| if (!m_downstreamEnd.inDocument() || !m_upstreamStart.inDocument())
|
| - return;
|
| + return;
|
|
|
| // FIXME: The deletion algorithm shouldn't let this happen.
|
| if (comparePositions(m_upstreamStart, m_downstreamEnd) > 0)
|
| @@ -684,10 +683,12 @@ void DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows()
|
| Node* row = m_endTableRow->previousSibling();
|
| while (row && row != m_startTableRow) {
|
| RefPtrWillBeRawPtr<Node> previousRow = row->previousSibling();
|
| - if (isTableRowEmpty(row))
|
| - // Use a raw removeNode, instead of DeleteSelectionCommand's, because
|
| - // that won't remove rows, it only empties them in preparation for this function.
|
| + if (isTableRowEmpty(row)) {
|
| + // Use a raw removeNode, instead of DeleteSelectionCommand's,
|
| + // because that won't remove rows, it only empties them in
|
| + // preparation for this function.
|
| CompositeEditCommand::removeNode(row);
|
| + }
|
| row = previousRow.get();
|
| }
|
| }
|
| @@ -703,16 +704,19 @@ void DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows()
|
| }
|
| }
|
|
|
| - if (m_endTableRow && m_endTableRow->inDocument() && m_endTableRow != m_startTableRow)
|
| + if (m_endTableRow && m_endTableRow->inDocument() && m_endTableRow != m_startTableRow) {
|
| if (isTableRowEmpty(m_endTableRow.get())) {
|
| - // Don't remove m_endTableRow if it's where we're putting the ending selection.
|
| + // Don't remove m_endTableRow if it's where we're putting the ending
|
| + // selection.
|
| if (!m_endingPosition.anchorNode()->isDescendantOf(m_endTableRow.get())) {
|
| - // FIXME: We probably shouldn't remove m_endTableRow unless it's fully selected, even if it is empty.
|
| - // We'll need to start adjusting the selection endpoints during deletion to know whether or not m_endTableRow
|
| - // was fully selected here.
|
| + // FIXME: We probably shouldn't remove m_endTableRow unless it's
|
| + // fully selected, even if it is empty. We'll need to start
|
| + // adjusting the selection endpoints during deletion to know
|
| + // whether or not m_endTableRow was fully selected here.
|
| CompositeEditCommand::removeNode(m_endTableRow.get());
|
| }
|
| }
|
| + }
|
| }
|
|
|
| void DeleteSelectionCommand::calculateTypingStyleAfterDelete()
|
| @@ -769,8 +773,9 @@ void DeleteSelectionCommand::removeRedundantBlocks()
|
|
|
| CompositeEditCommand::removeNodePreservingChildren(node);
|
| node = m_endingPosition.anchorNode();
|
| - } else
|
| + } else {
|
| node = node->parentNode();
|
| + }
|
| }
|
| }
|
|
|
| @@ -796,12 +801,13 @@ void DeleteSelectionCommand::doApply()
|
| && isEndOfParagraph(m_selectionToDelete.visibleEnd(), CanCrossEditingBoundary)
|
| && !lineBreakAtEndOfSelectionToDelete;
|
| if (m_needPlaceholder) {
|
| - // Don't need a placeholder when deleting a selection that starts just before a table
|
| - // and ends inside it (we do need placeholders to hold open empty cells, but that's
|
| - // handled elsewhere).
|
| - if (Element* table = isLastPositionBeforeTable(m_selectionToDelete.visibleStart()))
|
| + // Don't need a placeholder when deleting a selection that starts just
|
| + // before a table and ends inside it (we do need placeholders to hold
|
| + // open empty cells, but that's handled elsewhere).
|
| + if (Element* table = isLastPositionBeforeTable(m_selectionToDelete.visibleStart())) {
|
| if (m_selectionToDelete.end().anchorNode()->isDescendantOf(table))
|
| m_needPlaceholder = false;
|
| + }
|
| }
|
|
|
|
|
|
|