OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 23 matching lines...) Expand all Loading... |
34 #include "core/css/CSSComputedStyleDeclaration.h" | 34 #include "core/css/CSSComputedStyleDeclaration.h" |
35 #include "core/css/StylePropertySet.h" | 35 #include "core/css/StylePropertySet.h" |
36 #include "core/dom/Clipboard.h" | 36 #include "core/dom/Clipboard.h" |
37 #include "core/dom/ClipboardEvent.h" | 37 #include "core/dom/ClipboardEvent.h" |
38 #include "core/dom/DocumentFragment.h" | 38 #include "core/dom/DocumentFragment.h" |
39 #include "core/dom/DocumentMarkerController.h" | 39 #include "core/dom/DocumentMarkerController.h" |
40 #include "core/dom/EventNames.h" | 40 #include "core/dom/EventNames.h" |
41 #include "core/dom/KeyboardEvent.h" | 41 #include "core/dom/KeyboardEvent.h" |
42 #include "core/dom/NodeList.h" | 42 #include "core/dom/NodeList.h" |
43 #include "core/dom/NodeTraversal.h" | 43 #include "core/dom/NodeTraversal.h" |
| 44 #include "core/dom/ScopedEventQueue.h" |
44 #include "core/dom/Text.h" | 45 #include "core/dom/Text.h" |
45 #include "core/dom/TextEvent.h" | 46 #include "core/dom/TextEvent.h" |
46 #include "core/editing/ApplyStyleCommand.h" | 47 #include "core/editing/ApplyStyleCommand.h" |
47 #include "core/editing/DeleteSelectionCommand.h" | 48 #include "core/editing/DeleteSelectionCommand.h" |
48 #include "core/editing/IndentOutdentCommand.h" | 49 #include "core/editing/IndentOutdentCommand.h" |
49 #include "core/editing/InputMethodController.h" | 50 #include "core/editing/InputMethodController.h" |
50 #include "core/editing/InsertListCommand.h" | 51 #include "core/editing/InsertListCommand.h" |
51 #include "core/editing/ModifySelectionListLevel.h" | 52 #include "core/editing/ModifySelectionListLevel.h" |
52 #include "core/editing/RemoveFormatCommand.h" | 53 #include "core/editing/RemoveFormatCommand.h" |
53 #include "core/editing/RenderedPosition.h" | 54 #include "core/editing/RenderedPosition.h" |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 static void dispatchEditableContentChangedEvents(PassRefPtr<Element> startRoot,
PassRefPtr<Element> endRoot) | 753 static void dispatchEditableContentChangedEvents(PassRefPtr<Element> startRoot,
PassRefPtr<Element> endRoot) |
753 { | 754 { |
754 if (startRoot) | 755 if (startRoot) |
755 startRoot->dispatchEvent(Event::create(eventNames().webkitEditableConten
tChangedEvent), IGNORE_EXCEPTION); | 756 startRoot->dispatchEvent(Event::create(eventNames().webkitEditableConten
tChangedEvent), IGNORE_EXCEPTION); |
756 if (endRoot && endRoot != startRoot) | 757 if (endRoot && endRoot != startRoot) |
757 endRoot->dispatchEvent(Event::create(eventNames().webkitEditableContentC
hangedEvent), IGNORE_EXCEPTION); | 758 endRoot->dispatchEvent(Event::create(eventNames().webkitEditableContentC
hangedEvent), IGNORE_EXCEPTION); |
758 } | 759 } |
759 | 760 |
760 void Editor::appliedEditing(PassRefPtr<CompositeEditCommand> cmd) | 761 void Editor::appliedEditing(PassRefPtr<CompositeEditCommand> cmd) |
761 { | 762 { |
| 763 EventQueueScope scope; |
762 m_frame->document()->updateLayout(); | 764 m_frame->document()->updateLayout(); |
763 | 765 |
764 EditCommandComposition* composition = cmd->composition(); | 766 EditCommandComposition* composition = cmd->composition(); |
765 ASSERT(composition); | 767 ASSERT(composition); |
| 768 dispatchEditableContentChangedEvents(composition->startingRootEditableElemen
t(), composition->endingRootEditableElement()); |
766 VisibleSelection newSelection(cmd->endingSelection()); | 769 VisibleSelection newSelection(cmd->endingSelection()); |
767 | 770 |
768 // Don't clear the typing style with this selection change. We do those thi
ngs elsewhere if necessary. | 771 // Don't clear the typing style with this selection change. We do those thi
ngs elsewhere if necessary. |
769 changeSelectionAfterCommand(newSelection, 0); | 772 changeSelectionAfterCommand(newSelection, 0); |
770 dispatchEditableContentChangedEvents(composition->startingRootEditableElemen
t(), composition->endingRootEditableElement()); | |
771 | 773 |
772 if (!cmd->preservesTypingStyle()) | 774 if (!cmd->preservesTypingStyle()) |
773 m_frame->selection().clearTypingStyle(); | 775 m_frame->selection().clearTypingStyle(); |
774 | 776 |
775 // Command will be equal to last edit command only in the case of typing | 777 // Command will be equal to last edit command only in the case of typing |
776 if (m_lastEditCommand.get() == cmd) | 778 if (m_lastEditCommand.get() == cmd) |
777 ASSERT(cmd->isTypingCommand()); | 779 ASSERT(cmd->isTypingCommand()); |
778 else { | 780 else { |
779 // Only register a new undo command if the command passed in is | 781 // Only register a new undo command if the command passed in is |
780 // different from the last command | 782 // different from the last command |
781 m_lastEditCommand = cmd; | 783 m_lastEditCommand = cmd; |
782 client().registerUndoStep(m_lastEditCommand->ensureComposition()); | 784 client().registerUndoStep(m_lastEditCommand->ensureComposition()); |
783 } | 785 } |
784 | 786 |
785 respondToChangedContents(newSelection); | 787 respondToChangedContents(newSelection); |
786 } | 788 } |
787 | 789 |
788 void Editor::unappliedEditing(PassRefPtr<EditCommandComposition> cmd) | 790 void Editor::unappliedEditing(PassRefPtr<EditCommandComposition> cmd) |
789 { | 791 { |
| 792 EventQueueScope scope; |
790 m_frame->document()->updateLayout(); | 793 m_frame->document()->updateLayout(); |
791 | 794 |
| 795 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd
->endingRootEditableElement()); |
| 796 |
792 VisibleSelection newSelection(cmd->startingSelection()); | 797 VisibleSelection newSelection(cmd->startingSelection()); |
793 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram
eSelection::ClearTypingStyle); | 798 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram
eSelection::ClearTypingStyle); |
794 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd
->endingRootEditableElement()); | |
795 | 799 |
796 m_lastEditCommand = 0; | 800 m_lastEditCommand = 0; |
797 client().registerRedoStep(cmd); | 801 client().registerRedoStep(cmd); |
798 respondToChangedContents(newSelection); | 802 respondToChangedContents(newSelection); |
799 } | 803 } |
800 | 804 |
801 void Editor::reappliedEditing(PassRefPtr<EditCommandComposition> cmd) | 805 void Editor::reappliedEditing(PassRefPtr<EditCommandComposition> cmd) |
802 { | 806 { |
| 807 EventQueueScope scope; |
803 m_frame->document()->updateLayout(); | 808 m_frame->document()->updateLayout(); |
804 | 809 |
| 810 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd
->endingRootEditableElement()); |
| 811 |
805 VisibleSelection newSelection(cmd->endingSelection()); | 812 VisibleSelection newSelection(cmd->endingSelection()); |
806 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram
eSelection::ClearTypingStyle); | 813 changeSelectionAfterCommand(newSelection, FrameSelection::CloseTyping | Fram
eSelection::ClearTypingStyle); |
807 dispatchEditableContentChangedEvents(cmd->startingRootEditableElement(), cmd
->endingRootEditableElement()); | |
808 | 814 |
809 m_lastEditCommand = 0; | 815 m_lastEditCommand = 0; |
810 client().registerUndoStep(cmd); | 816 client().registerUndoStep(cmd); |
811 respondToChangedContents(newSelection); | 817 respondToChangedContents(newSelection); |
812 } | 818 } |
813 | 819 |
814 Editor::Editor(Frame& frame) | 820 Editor::Editor(Frame& frame) |
815 : FrameDestructionObserver(&frame) | 821 : FrameDestructionObserver(&frame) |
816 , m_preventRevealSelection(0) | 822 , m_preventRevealSelection(0) |
817 , m_shouldStartNewKillRingSequence(false) | 823 , m_shouldStartNewKillRingSequence(false) |
(...skipping 1395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2213 return WebCore::unifiedTextCheckerEnabled(m_frame); | 2219 return WebCore::unifiedTextCheckerEnabled(m_frame); |
2214 } | 2220 } |
2215 | 2221 |
2216 void Editor::toggleOverwriteModeEnabled() | 2222 void Editor::toggleOverwriteModeEnabled() |
2217 { | 2223 { |
2218 m_overwriteModeEnabled = !m_overwriteModeEnabled; | 2224 m_overwriteModeEnabled = !m_overwriteModeEnabled; |
2219 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); | 2225 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); |
2220 }; | 2226 }; |
2221 | 2227 |
2222 } // namespace WebCore | 2228 } // namespace WebCore |
OLD | NEW |