| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 { | 366 { |
| 367 applyCommandToComposite(BreakBlockquoteCommand::create(document())); | 367 applyCommandToComposite(BreakBlockquoteCommand::create(document())); |
| 368 typingAddedToOpenCommand(); | 368 typingAddedToOpenCommand(); |
| 369 } | 369 } |
| 370 | 370 |
| 371 void TypingCommand::deleteKeyPressed(TextGranularity granularity, bool killRing) | 371 void TypingCommand::deleteKeyPressed(TextGranularity granularity, bool killRing) |
| 372 { | 372 { |
| 373 Selection selectionToDelete; | 373 Selection selectionToDelete; |
| 374 Selection selectionAfterUndo; | 374 Selection selectionAfterUndo; |
| 375 | 375 |
| 376 switch (endingSelection().state()) { | 376 switch (endingSelection().selectionType()) { |
| 377 case Selection::RANGE: | 377 case Selection::RangeSelection: |
| 378 selectionToDelete = endingSelection(); | 378 selectionToDelete = endingSelection(); |
| 379 selectionAfterUndo = selectionToDelete; | 379 selectionAfterUndo = selectionToDelete; |
| 380 break; | 380 break; |
| 381 case Selection::CARET: { | 381 case Selection::CaretSelection: { |
| 382 if (breakOutOfEmptyMailBlockquotedParagraph()) { | 382 if (breakOutOfEmptyMailBlockquotedParagraph()) { |
| 383 typingAddedToOpenCommand(); | 383 typingAddedToOpenCommand(); |
| 384 return; | 384 return; |
| 385 } | 385 } |
| 386 | 386 |
| 387 m_smartDelete = false; | 387 m_smartDelete = false; |
| 388 | 388 |
| 389 SelectionController selection; | 389 SelectionController selection; |
| 390 selection.setSelection(endingSelection()); | 390 selection.setSelection(endingSelection()); |
| 391 selection.modify(SelectionController::EXTEND, SelectionController::B
ACKWARD, granularity); | 391 selection.modify(SelectionController::EXTEND, SelectionController::B
ACKWARD, granularity); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 | 424 |
| 425 if (!startingSelection().isRange() || selectionToDelete.base() != st
artingSelection().start()) | 425 if (!startingSelection().isRange() || selectionToDelete.base() != st
artingSelection().start()) |
| 426 selectionAfterUndo = selectionToDelete; | 426 selectionAfterUndo = selectionToDelete; |
| 427 else | 427 else |
| 428 // It's a little tricky to compute what the starting selection w
ould have been in the original document. | 428 // It's a little tricky to compute what the starting selection w
ould have been in the original document. |
| 429 // We can't let the Selection class's validation kick in or it'l
l adjust for us based on | 429 // We can't let the Selection class's validation kick in or it'l
l adjust for us based on |
| 430 // the current state of the document and we'll get the wrong res
ult. | 430 // the current state of the document and we'll get the wrong res
ult. |
| 431 selectionAfterUndo.setWithoutValidation(startingSelection().end(
), selectionToDelete.extent()); | 431 selectionAfterUndo.setWithoutValidation(startingSelection().end(
), selectionToDelete.extent()); |
| 432 break; | 432 break; |
| 433 } | 433 } |
| 434 case Selection::NONE: | 434 case Selection::NoSelection: |
| 435 ASSERT_NOT_REACHED(); | 435 ASSERT_NOT_REACHED(); |
| 436 break; | 436 break; |
| 437 } | 437 } |
| 438 | 438 |
| 439 if (selectionToDelete.isCaretOrRange() && document()->frame()->shouldDeleteS
election(selectionToDelete)) { | 439 if (selectionToDelete.isCaretOrRange() && document()->frame()->shouldDeleteS
election(selectionToDelete)) { |
| 440 if (killRing) | 440 if (killRing) |
| 441 document()->frame()->editor()->addToKillRing(selectionToDelete.toRan
ge().get(), false); | 441 document()->frame()->editor()->addToKillRing(selectionToDelete.toNor
malizedRange().get(), false); |
| 442 // Make undo select everything that has been deleted, unless an undo wil
l undo more than just this deletion. | 442 // Make undo select everything that has been deleted, unless an undo wil
l undo more than just this deletion. |
| 443 // FIXME: This behaves like TextEdit except for the case where you open
with text insertion and then delete | 443 // FIXME: This behaves like TextEdit except for the case where you open
with text insertion and then delete |
| 444 // more text than you insert. In that case all of the text that was aro
und originally should be selected. | 444 // more text than you insert. In that case all of the text that was aro
und originally should be selected. |
| 445 if (m_openedByBackwardDelete) | 445 if (m_openedByBackwardDelete) |
| 446 setStartingSelection(selectionAfterUndo); | 446 setStartingSelection(selectionAfterUndo); |
| 447 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete); | 447 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete); |
| 448 setSmartDelete(false); | 448 setSmartDelete(false); |
| 449 typingAddedToOpenCommand(); | 449 typingAddedToOpenCommand(); |
| 450 } | 450 } |
| 451 } | 451 } |
| 452 | 452 |
| 453 void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki
llRing) | 453 void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki
llRing) |
| 454 { | 454 { |
| 455 Selection selectionToDelete; | 455 Selection selectionToDelete; |
| 456 Selection selectionAfterUndo; | 456 Selection selectionAfterUndo; |
| 457 | 457 |
| 458 switch (endingSelection().state()) { | 458 switch (endingSelection().selectionType()) { |
| 459 case Selection::RANGE: | 459 case Selection::RangeSelection: |
| 460 selectionToDelete = endingSelection(); | 460 selectionToDelete = endingSelection(); |
| 461 selectionAfterUndo = selectionToDelete; | 461 selectionAfterUndo = selectionToDelete; |
| 462 break; | 462 break; |
| 463 case Selection::CARET: { | 463 case Selection::CaretSelection: { |
| 464 m_smartDelete = false; | 464 m_smartDelete = false; |
| 465 | 465 |
| 466 // Handle delete at beginning-of-block case. | 466 // Handle delete at beginning-of-block case. |
| 467 // Do nothing in the case that the caret is at the start of a | 467 // Do nothing in the case that the caret is at the start of a |
| 468 // root editable element or at the start of a document. | 468 // root editable element or at the start of a document. |
| 469 SelectionController selection; | 469 SelectionController selection; |
| 470 selection.setSelection(endingSelection()); | 470 selection.setSelection(endingSelection()); |
| 471 selection.modify(SelectionController::EXTEND, SelectionController::F
ORWARD, granularity); | 471 selection.modify(SelectionController::EXTEND, SelectionController::F
ORWARD, granularity); |
| 472 if (killRing && selection.isCaret() && granularity != CharacterGranu
larity) | 472 if (killRing && selection.isCaret() && granularity != CharacterGranu
larity) |
| 473 selection.modify(SelectionController::EXTEND, SelectionControlle
r::FORWARD, CharacterGranularity); | 473 selection.modify(SelectionController::EXTEND, SelectionControlle
r::FORWARD, CharacterGranularity); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 502 if (selectionToDelete.start().node() == selectionToDelete.en
d().node()) | 502 if (selectionToDelete.start().node() == selectionToDelete.en
d().node()) |
| 503 extraCharacters = selectionToDelete.end().offset() - sel
ectionToDelete.start().offset(); | 503 extraCharacters = selectionToDelete.end().offset() - sel
ectionToDelete.start().offset(); |
| 504 else | 504 else |
| 505 extraCharacters = selectionToDelete.end().offset(); | 505 extraCharacters = selectionToDelete.end().offset(); |
| 506 extent = Position(extent.node(), extent.offset() + extraChar
acters); | 506 extent = Position(extent.node(), extent.offset() + extraChar
acters); |
| 507 } | 507 } |
| 508 selectionAfterUndo.setWithoutValidation(startingSelection().star
t(), extent); | 508 selectionAfterUndo.setWithoutValidation(startingSelection().star
t(), extent); |
| 509 } | 509 } |
| 510 break; | 510 break; |
| 511 } | 511 } |
| 512 case Selection::NONE: | 512 case Selection::NoSelection: |
| 513 ASSERT_NOT_REACHED(); | 513 ASSERT_NOT_REACHED(); |
| 514 break; | 514 break; |
| 515 } | 515 } |
| 516 | 516 |
| 517 if (selectionToDelete.isCaretOrRange() && document()->frame()->shouldDeleteS
election(selectionToDelete)) { | 517 if (selectionToDelete.isCaretOrRange() && document()->frame()->shouldDeleteS
election(selectionToDelete)) { |
| 518 if (killRing) | 518 if (killRing) |
| 519 document()->frame()->editor()->addToKillRing(selectionToDelete.toRan
ge().get(), false); | 519 document()->frame()->editor()->addToKillRing(selectionToDelete.toNor
malizedRange().get(), false); |
| 520 // make undo select what was deleted | 520 // make undo select what was deleted |
| 521 setStartingSelection(selectionAfterUndo); | 521 setStartingSelection(selectionAfterUndo); |
| 522 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete); | 522 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete); |
| 523 setSmartDelete(false); | 523 setSmartDelete(false); |
| 524 typingAddedToOpenCommand(); | 524 typingAddedToOpenCommand(); |
| 525 } | 525 } |
| 526 } | 526 } |
| 527 | 527 |
| 528 void TypingCommand::deleteSelection(bool smartDelete) | 528 void TypingCommand::deleteSelection(bool smartDelete) |
| 529 { | 529 { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 548 return false; | 548 return false; |
| 549 } | 549 } |
| 550 | 550 |
| 551 bool TypingCommand::isTypingCommand() const | 551 bool TypingCommand::isTypingCommand() const |
| 552 { | 552 { |
| 553 return true; | 553 return true; |
| 554 } | 554 } |
| 555 | 555 |
| 556 } // namespace WebCore | 556 } // namespace WebCore |
| 557 | 557 |
| OLD | NEW |