Changeset 65395 in webkit


Ignore:
Timestamp:
Aug 16, 2010 12:30:02 AM (14 years ago)
Author:
morrita@google.com
Message:

2010-08-13 MORITA Hajime <morrita@google.com>

Reviewed by Tony Chang.

https://bugs.webkit.org/show_bug.cgi?id=43778
Dropping should fire textInput event.

  • editing/pasteboard/drop-text-events-expected.txt: Added.
  • editing/pasteboard/drop-text-events-sideeffect-expected.txt: Added.
  • editing/pasteboard/drop-text-events-sideeffect.html: Added.
  • editing/pasteboard/drop-text-events.html: Added.
  • editing/pasteboard/script-tests/drop-text-events-sideeffect.js: Added.
  • editing/pasteboard/script-tests/drop-text-events.js: Added.

2010-08-13 MORITA Hajime <morrita@google.com>

Reviewed by Tony Chang.

https://bugs.webkit.org/show_bug.cgi?id=43778
Dropping should fire textInput event

This change:

  • added TextEvent::m_isDrop to distinguish drop-initiated events.
  • added to dispatch TextEvent from DragController before making a side effect and cancel the side effect if the event prevents default

Tests: editing/pasteboard/drop-text-events-sideeffect.html

editing/pasteboard/drop-text-events.html

  • dom/TextEvent.cpp: (WebCore::TextEvent::createForDrop): Added. (WebCore::TextEvent::TextEvent):
  • dom/TextEvent.h: (WebCore::TextEvent::isDrop): Added.
  • editing/Editor.cpp: (WebCore::Editor::handleTextEvent): (WebCore::Editor::findEventTargetFrom): Extracted from findEventTargetFromSelection(). (WebCore::Editor::findEventTargetFromSelection):
  • editing/Editor.h:
  • page/DragController.cpp: (WebCore::DragController::dispatchTextInputEventFor): Added. (WebCore::DragController::concludeEditDrag): Added an event dispatch path.
  • page/DragController.h:
Location:
trunk
Files:
6 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r65392 r65395  
     12010-08-13  MORITA Hajime  <morrita@google.com>
     2
     3        Reviewed by Tony Chang.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=43778
     6        Dropping should fire textInput event.
     7
     8        * editing/pasteboard/drop-text-events-expected.txt: Added.
     9        * editing/pasteboard/drop-text-events-sideeffect-expected.txt: Added.
     10        * editing/pasteboard/drop-text-events-sideeffect.html: Added.
     11        * editing/pasteboard/drop-text-events.html: Added.
     12        * editing/pasteboard/script-tests/drop-text-events-sideeffect.js: Added.
     13        * editing/pasteboard/script-tests/drop-text-events.js: Added.
     14
    1152010-08-15  Ariya Hidayat  <ariya@sencha.com>
    216
  • trunk/WebCore/ChangeLog

    r65394 r65395  
     12010-08-13  MORITA Hajime  <morrita@google.com>
     2
     3        Reviewed by Tony Chang.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=43778
     6        Dropping should fire textInput event
     7
     8        This change:
     9        - added TextEvent::m_isDrop to distinguish drop-initiated events.
     10        - added to dispatch TextEvent from DragController before making a side effect
     11          and cancel the side effect if the event prevents default
     12
     13        Tests: editing/pasteboard/drop-text-events-sideeffect.html
     14               editing/pasteboard/drop-text-events.html
     15
     16        * dom/TextEvent.cpp:
     17        (WebCore::TextEvent::createForDrop): Added.
     18        (WebCore::TextEvent::TextEvent):
     19        * dom/TextEvent.h:
     20        (WebCore::TextEvent::isDrop): Added.
     21        * editing/Editor.cpp:
     22        (WebCore::Editor::handleTextEvent):
     23        (WebCore::Editor::findEventTargetFrom): Extracted from findEventTargetFromSelection().
     24        (WebCore::Editor::findEventTargetFromSelection):
     25        * editing/Editor.h:
     26        * page/DragController.cpp:
     27        (WebCore::DragController::dispatchTextInputEventFor): Added.
     28        (WebCore::DragController::concludeEditDrag): Added an event dispatch path.
     29        * page/DragController.h:
     30
    1312010-08-15  Ariya Hidayat  <ariya@sencha.com>
    232
  • trunk/WebCore/dom/TextEvent.cpp

    r65287 r65395  
    6161}
    6262
     63PassRefPtr<TextEvent> TextEvent::createForDrop(PassRefPtr<AbstractView> view, const String& data)
     64{
     65    return adoptRef(new TextEvent(view, data, TextEvent::InputTypeDrop));
     66}
     67
    6368TextEvent::TextEvent()
    6469    : m_inputType(TextEvent::InputTypeKeyboard)
  • trunk/WebCore/dom/TextEvent.h

    r65287 r65395  
    3939            InputTypeLineBreak, // any tab characters in the text are backtabs.
    4040            InputTypeBackTab,
    41             InputTypePaste
     41            InputTypePaste,
     42            InputTypeDrop,
    4243        };
    4344
     
    4748        static PassRefPtr<TextEvent> createForPlainTextPaste(PassRefPtr<AbstractView> view, const String& data, bool shouldSmartReplace);
    4849        static PassRefPtr<TextEvent> createForFragmentPaste(PassRefPtr<AbstractView> view, PassRefPtr<DocumentFragment> data, bool shouldSmartReplace, bool shouldMatchStyle);
     50        static PassRefPtr<TextEvent> createForDrop(PassRefPtr<AbstractView> view, const String& data);
    4951
    5052        virtual ~TextEvent();
     
    5961        bool isBackTab() const { return m_inputType == InputTypeBackTab; }
    6062        bool isPaste() const { return m_inputType == InputTypePaste; }
     63        bool isDrop() const { return m_inputType == InputTypeDrop; }
    6164
    6265        bool shouldSmartReplace() const { return m_shouldSmartReplace; }
     
    6669    private:
    6770        TextEvent();
     71
    6872        TextEvent(PassRefPtr<AbstractView>, const String& data, InputType = InputTypeKeyboard);
    6973        TextEvent(PassRefPtr<AbstractView>, const String& data, PassRefPtr<DocumentFragment>,
    7074                  bool shouldSmartReplace, bool shouldMatchStyle);
     75
    7176        InputType m_inputType;
    7277        String m_data;
  • trunk/WebCore/editing/Editor.cpp

    r65127 r65395  
    131131bool Editor::handleTextEvent(TextEvent* event)
    132132{
     133    // Default event handling for Drag and Drop will be handled by DragController
     134    // so we leave the event for it.
     135    if (event->isDrop())
     136        return false;
     137
    133138    if (event->isPaste()) {
    134139        if (event->pastingFragment())
     
    763768}
    764769
    765 Node* Editor::findEventTargetFromSelection() const
    766 {
    767     Node* target = m_frame->selection()->start().element();
     770Node* Editor::findEventTargetFrom(const VisibleSelection& selection) const
     771{
     772    Node* target = selection.start().element();
    768773    if (!target)
    769774        target = m_frame->document()->body();
     
    771776        return 0;
    772777    return target->shadowAncestorNode();
     778
     779}
     780
     781Node* Editor::findEventTargetFromSelection() const
     782{
     783    return findEventTargetFrom(m_frame->selection()->selection());
    773784}
    774785
  • trunk/WebCore/editing/Editor.h

    r64963 r65395  
    300300    void pasteAsPlainText(const String&, bool smartReplace);
    301301
     302    Node* findEventTargetFrom(const VisibleSelection& selection) const;
    302303private:
    303304    Frame* m_frame;
  • trunk/WebCore/page/DragController.cpp

    r64152 r65395  
    6464#include "Settings.h"
    6565#include "Text.h"
     66#include "TextEvent.h"
    6667#include "htmlediting.h"
    6768#include "markup.h"
     
    364365}
    365366
     367bool DragController::dispatchTextInputEventFor(Frame* innerFrame, DragData* dragData)
     368{
     369    VisibleSelection dragCaret(m_page->dragCaretController()->selection());
     370    String text = dragCaret.isContentRichlyEditable() ? "" : dragData->asPlainText();
     371    Node* target = innerFrame->editor()->findEventTargetFrom(dragCaret);
     372    ExceptionCode ec = 0;
     373    return target->dispatchEvent(TextEvent::createForDrop(innerFrame->domWindow(), text), ec);
     374}
     375
    366376bool DragController::concludeEditDrag(DragData* dragData)
    367377{
     
    377387    ASSERT(innerFrame);
    378388
     389    if (!dispatchTextInputEventFor(innerFrame, dragData))
     390        return true;
     391
    379392    if (dragData->containsColor()) {
    380393        Color color = dragData->asColor();
    381394        if (!color.isValid())
    382             return false;
    383         if (!innerFrame)
    384395            return false;
    385396        RefPtr<Range> innerRange = innerFrame->selection()->toNormalizedRange();
  • trunk/WebCore/page/DragController.h

    r58616 r65395  
    9191
    9292    private:
     93        bool dispatchTextInputEventFor(Frame*, DragData*);
    9394        bool canProcessDrag(DragData*);
    9495        bool concludeEditDrag(DragData*);
Note: See TracChangeset for help on using the changeset viewer.