Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(659)

Side by Side Diff: third_party/WebKit/WebCore/editing/TypingCommand.cpp

Issue 39293: WebKit merge 41447:41498 [third_party/WebKit] (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: remove CRLF Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 30 matching lines...) Expand all
41 #include "htmlediting.h" 41 #include "htmlediting.h"
42 #include "visible_units.h" 42 #include "visible_units.h"
43 43
44 namespace WebCore { 44 namespace WebCore {
45 45
46 TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, con st String &textToInsert, bool selectInsertedText, TextGranularity granularity, b ool killRing) 46 TypingCommand::TypingCommand(Document *document, ETypingCommand commandType, con st String &textToInsert, bool selectInsertedText, TextGranularity granularity, b ool killRing)
47 : CompositeEditCommand(document), 47 : CompositeEditCommand(document),
48 m_commandType(commandType), 48 m_commandType(commandType),
49 m_textToInsert(textToInsert), 49 m_textToInsert(textToInsert),
50 m_openForMoreTyping(true), 50 m_openForMoreTyping(true),
51 m_applyEditing(false),
52 m_selectInsertedText(selectInsertedText), 51 m_selectInsertedText(selectInsertedText),
53 m_smartDelete(false), 52 m_smartDelete(false),
54 m_granularity(granularity), 53 m_granularity(granularity),
55 m_killRing(killRing), 54 m_killRing(killRing),
56 m_openedByBackwardDelete(false) 55 m_openedByBackwardDelete(false)
57 { 56 {
58 } 57 }
59 58
60 void TypingCommand::deleteSelection(Document* document, bool smartDelete) 59 void TypingCommand::deleteSelection(Document* document, bool smartDelete)
61 { 60 {
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 VisiblePosition p1 = startOfWord(previous, LeftWordIfOnBoundary); 292 VisiblePosition p1 = startOfWord(previous, LeftWordIfOnBoundary);
294 VisiblePosition p2 = startOfWord(start, LeftWordIfOnBoundary); 293 VisiblePosition p2 = startOfWord(start, LeftWordIfOnBoundary);
295 if (p1 != p2) 294 if (p1 != p2)
296 document()->frame()->editor()->markMisspellingsAfterTypingToPosition (p1); 295 document()->frame()->editor()->markMisspellingsAfterTypingToPosition (p1);
297 } 296 }
298 } 297 }
299 298
300 void TypingCommand::typingAddedToOpenCommand() 299 void TypingCommand::typingAddedToOpenCommand()
301 { 300 {
302 markMisspellingsAfterTyping(); 301 markMisspellingsAfterTyping();
303 // Do not apply editing to the frame on the first time through. 302 document()->frame()->editor()->appliedEditing(this);
304 // The frame will get told in the same way as all other commands.
305 // But since this command stays open and is used for additional typing,
306 // we need to tell the frame here as other commands are added.
307 if (m_applyEditing)
308 document()->frame()->editor()->appliedEditing(this);
309 m_applyEditing = true;
310 } 303 }
311 304
312 void TypingCommand::insertText(const String &text, bool selectInsertedText) 305 void TypingCommand::insertText(const String &text, bool selectInsertedText)
313 { 306 {
314 // FIXME: Need to implement selectInsertedText for cases where more than one insert is involved. 307 // FIXME: Need to implement selectInsertedText for cases where more than one insert is involved.
315 // This requires support from insertTextRunWithoutNewlines and insertParagra phSeparator for extending 308 // This requires support from insertTextRunWithoutNewlines and insertParagra phSeparator for extending
316 // an existing selection; at the moment they can either put the caret after what's inserted or 309 // an existing selection; at the moment they can either put the caret after what's inserted or
317 // select what's inserted, but there's no way to "extend selection" to inclu de both an old selection 310 // select what's inserted, but there's no way to "extend selection" to inclu de both an old selection
318 // that ends just before where we want to insert text and the newly inserted text. 311 // that ends just before where we want to insert text and the newly inserted text.
319 int offset = 0; 312 int offset = 0;
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 // We can't let the VisibleSelection class's validation kick in or it'll adjust for us based on 422 // We can't let the VisibleSelection class's validation kick in or it'll adjust for us based on
430 // the current state of the document and we'll get the wrong res ult. 423 // the current state of the document and we'll get the wrong res ult.
431 selectionAfterUndo.setWithoutValidation(startingSelection().end( ), selectionToDelete.extent()); 424 selectionAfterUndo.setWithoutValidation(startingSelection().end( ), selectionToDelete.extent());
432 break; 425 break;
433 } 426 }
434 case VisibleSelection::NoSelection: 427 case VisibleSelection::NoSelection:
435 ASSERT_NOT_REACHED(); 428 ASSERT_NOT_REACHED();
436 break; 429 break;
437 } 430 }
438 431
439 if (selectionToDelete.isCaretOrRange() && document()->frame()->shouldDeleteS election(selectionToDelete)) { 432 ASSERT(!selectionToDelete.isNone());
440 if (killRing) 433 if (selectionToDelete.isNone())
441 document()->frame()->editor()->addToKillRing(selectionToDelete.toNor malizedRange().get(), false); 434 return;
442 // Make undo select everything that has been deleted, unless an undo wil l undo more than just this deletion. 435
443 // FIXME: This behaves like TextEdit except for the case where you open with text insertion and then delete 436 if (selectionToDelete.isCaret() || !document()->frame()->shouldDeleteSelecti on(selectionToDelete))
444 // more text than you insert. In that case all of the text that was aro und originally should be selected. 437 return;
445 if (m_openedByBackwardDelete) 438
446 setStartingSelection(selectionAfterUndo); 439 if (killRing)
447 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete); 440 document()->frame()->editor()->addToKillRing(selectionToDelete.toNormali zedRange().get(), false);
448 setSmartDelete(false); 441 // Make undo select everything that has been deleted, unless an undo will un do more than just this deletion.
449 typingAddedToOpenCommand(); 442 // FIXME: This behaves like TextEdit except for the case where you open with text insertion and then delete
450 } 443 // more text than you insert. In that case all of the text that was around originally should be selected.
444 if (m_openedByBackwardDelete)
445 setStartingSelection(selectionAfterUndo);
446 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete);
447 setSmartDelete(false);
448 typingAddedToOpenCommand();
451 } 449 }
452 450
453 void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki llRing) 451 void TypingCommand::forwardDeleteKeyPressed(TextGranularity granularity, bool ki llRing)
454 { 452 {
455 VisibleSelection selectionToDelete; 453 VisibleSelection selectionToDelete;
456 VisibleSelection selectionAfterUndo; 454 VisibleSelection selectionAfterUndo;
457 455
458 switch (endingSelection().selectionType()) { 456 switch (endingSelection().selectionType()) {
459 case VisibleSelection::RangeSelection: 457 case VisibleSelection::RangeSelection:
460 selectionToDelete = endingSelection(); 458 selectionToDelete = endingSelection();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 } 505 }
508 selectionAfterUndo.setWithoutValidation(startingSelection().star t(), extent); 506 selectionAfterUndo.setWithoutValidation(startingSelection().star t(), extent);
509 } 507 }
510 break; 508 break;
511 } 509 }
512 case VisibleSelection::NoSelection: 510 case VisibleSelection::NoSelection:
513 ASSERT_NOT_REACHED(); 511 ASSERT_NOT_REACHED();
514 break; 512 break;
515 } 513 }
516 514
517 if (selectionToDelete.isCaretOrRange() && document()->frame()->shouldDeleteS election(selectionToDelete)) { 515 ASSERT(!selectionToDelete.isNone());
518 if (killRing) 516 if (selectionToDelete.isNone())
519 document()->frame()->editor()->addToKillRing(selectionToDelete.toNor malizedRange().get(), false); 517 return;
520 // make undo select what was deleted 518
521 setStartingSelection(selectionAfterUndo); 519 if (selectionToDelete.isCaret() || !document()->frame()->shouldDeleteSelecti on(selectionToDelete))
522 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete); 520 return;
523 setSmartDelete(false); 521
524 typingAddedToOpenCommand(); 522 if (killRing)
525 } 523 document()->frame()->editor()->addToKillRing(selectionToDelete.toNormali zedRange().get(), false);
524 // make undo select what was deleted
525 setStartingSelection(selectionAfterUndo);
526 CompositeEditCommand::deleteSelection(selectionToDelete, m_smartDelete);
527 setSmartDelete(false);
528 typingAddedToOpenCommand();
526 } 529 }
527 530
528 void TypingCommand::deleteSelection(bool smartDelete) 531 void TypingCommand::deleteSelection(bool smartDelete)
529 { 532 {
530 CompositeEditCommand::deleteSelection(smartDelete); 533 CompositeEditCommand::deleteSelection(smartDelete);
531 typingAddedToOpenCommand(); 534 typingAddedToOpenCommand();
532 } 535 }
533 536
534 bool TypingCommand::preservesTypingStyle() const 537 bool TypingCommand::preservesTypingStyle() const
535 { 538 {
(...skipping 12 matching lines...) Expand all
548 return false; 551 return false;
549 } 552 }
550 553
551 bool TypingCommand::isTypingCommand() const 554 bool TypingCommand::isTypingCommand() const
552 { 555 {
553 return true; 556 return true;
554 } 557 }
555 558
556 } // namespace WebCore 559 } // namespace WebCore
557 560
OLDNEW
« no previous file with comments | « third_party/WebKit/WebCore/editing/TypingCommand.h ('k') | third_party/WebKit/WebCore/html/HTMLMediaElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698