2010-08-12 MORITA Hajime <morrita@google.com>
authormorrita@google.com <morrita@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Aug 2010 01:44:51 +0000 (01:44 +0000)
committermorrita@google.com <morrita@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Aug 2010 01:44:51 +0000 (01:44 +0000)
        Reviewed by Tony Chang.

        [Refactoring] TextEvent class has to many flags
        https://bugs.webkit.org/show_bug.cgi?id=43893

        Turned TextEvent::m_isLineBreak, TextEvent::m_isBacktab, TextEvent::m_isPaste
        into single TextEvent::m_inputType enumeration.

        No functional change. No new tests.

        * dom/TextEvent.cpp:
        (WebCore::TextEvent::selectInputType):
        (WebCore::TextEvent::create):
        (WebCore::TextEvent::createForPlainTextPaste):
        (WebCore::TextEvent::createForFragmentPaste):
        (WebCore::TextEvent::TextEvent):
        * dom/TextEvent.h:
        (WebCore::TextEvent::):
        (WebCore::TextEvent::isLineBreak):
        (WebCore::TextEvent::isBackTab):
        (WebCore::TextEvent::isPaste):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@65287 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/dom/TextEvent.cpp
WebCore/dom/TextEvent.h
WebCore/page/EventHandler.cpp

index 3d954cb..207608e 100644 (file)
@@ -1,3 +1,29 @@
+2010-08-12  MORITA Hajime  <morrita@google.com>
+
+        Reviewed by Tony Chang.
+
+        [Refactoring] TextEvent class has to many flags
+        https://bugs.webkit.org/show_bug.cgi?id=43893
+
+        Turned TextEvent::m_isLineBreak, TextEvent::m_isBacktab, TextEvent::m_isPaste 
+        into single TextEvent::m_inputType enumeration.
+        
+        No functional change. No new tests.
+
+        * dom/TextEvent.cpp:
+        (WebCore::TextEvent::selectInputType):
+        (WebCore::TextEvent::create):
+        (WebCore::TextEvent::createForPlainTextPaste):
+        (WebCore::TextEvent::createForFragmentPaste):
+        (WebCore::TextEvent::TextEvent):
+        * dom/TextEvent.h:
+        (WebCore::TextEvent::):
+        (WebCore::TextEvent::isLineBreak):
+        (WebCore::TextEvent::isBackTab):
+        (WebCore::TextEvent::isPaste):
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::handleTextInputEvent):
+
 2010-08-12  Kenneth Russell  <kbr@google.com>
 
         Reviewed by David Levin.
index 5dc39e3..e49e2ab 100644 (file)
 
 namespace WebCore {
 
+TextEvent::InputType TextEvent::selectInputType(bool isLineBreak, bool isBackTab)
+{
+    if (isLineBreak)
+        return TextEvent::InputTypeLineBreak;
+    if (isBackTab)
+        return TextEvent::InputTypeBackTab;
+    return TextEvent::InputTypeKeyboard;
+}
+
 PassRefPtr<TextEvent> TextEvent::create()
 {
     return adoptRef(new TextEvent);
 }
 
-PassRefPtr<TextEvent> TextEvent::create(PassRefPtr<AbstractView> view, const String& data)
+PassRefPtr<TextEvent> TextEvent::create(PassRefPtr<AbstractView> view, const String& data, TextEvent::InputType inputType)
 {
-    return adoptRef(new TextEvent(view, data));
+    return adoptRef(new TextEvent(view, data, inputType));
 }
 
 PassRefPtr<TextEvent> TextEvent::createForPlainTextPaste(PassRefPtr<AbstractView> view, const String& data, bool shouldSmartReplace)
 {
-    return adoptRef(new TextEvent(view, data, 0, true, shouldSmartReplace));
+    return adoptRef(new TextEvent(view, data, 0, shouldSmartReplace, false));
 }
 
 PassRefPtr<TextEvent> TextEvent::createForFragmentPaste(PassRefPtr<AbstractView> view, PassRefPtr<DocumentFragment> data, bool shouldSmartReplace, bool shouldMatchStyle)
 {
-    return adoptRef(new TextEvent(view, "", data, true, shouldSmartReplace, shouldMatchStyle));
+    return adoptRef(new TextEvent(view, "", data, shouldSmartReplace, shouldMatchStyle));
 }
 
 TextEvent::TextEvent()
-    : m_isLineBreak(false)
-    , m_isBackTab(false)
-    , m_isPaste(false)
+    : m_inputType(TextEvent::InputTypeKeyboard)
+    , m_shouldSmartReplace(false)
+    , m_shouldMatchStyle(false)
+{
+}
+
+TextEvent::TextEvent(PassRefPtr<AbstractView> view, const String& data, InputType inputType)
+    : UIEvent(eventNames().textInputEvent, true, true, view, 0)
+    , m_inputType(inputType)
+    , m_data(data)
+    , m_pastingFragment(0)
     , m_shouldSmartReplace(false)
     , m_shouldMatchStyle(false)
 {
 }
 
 TextEvent::TextEvent(PassRefPtr<AbstractView> view, const String& data, PassRefPtr<DocumentFragment> pastingFragment,
-                     bool isPaste, bool shouldSmartReplace, bool shouldMatchStyle)
+                     bool shouldSmartReplace, bool shouldMatchStyle)
     : UIEvent(eventNames().textInputEvent, true, true, view, 0)
+    , m_inputType(TextEvent::InputTypePaste)
     , m_data(data)
-    , m_isLineBreak(false)
-    , m_isBackTab(false)
     , m_pastingFragment(pastingFragment)
-    , m_isPaste(isPaste)
     , m_shouldSmartReplace(shouldSmartReplace)
     , m_shouldMatchStyle(shouldMatchStyle)
 {
index 2e2eb95..a450bc0 100644 (file)
@@ -34,8 +34,16 @@ namespace WebCore {
 
     class TextEvent : public UIEvent {
     public:
+        enum InputType {
+            InputTypeKeyboard, // any newline characters in the text are line breaks only, not paragraph separators.
+            InputTypeLineBreak, // any tab characters in the text are backtabs.
+            InputTypeBackTab,
+            InputTypePaste
+        };
+
+        static InputType selectInputType(bool isLineBreak, bool isBackTab);
         static PassRefPtr<TextEvent> create();
-        static PassRefPtr<TextEvent> create(PassRefPtr<AbstractView> view, const String& data);
+        static PassRefPtr<TextEvent> create(PassRefPtr<AbstractView> view, const String& data, InputType = InputTypeKeyboard);
         static PassRefPtr<TextEvent> createForPlainTextPaste(PassRefPtr<AbstractView> view, const String& data, bool shouldSmartReplace);
         static PassRefPtr<TextEvent> createForFragmentPaste(PassRefPtr<AbstractView> view, PassRefPtr<DocumentFragment> data, bool shouldSmartReplace, bool shouldMatchStyle);
 
@@ -47,30 +55,23 @@ namespace WebCore {
 
         virtual bool isTextEvent() const;
 
-        // If true, any newline characters in the text are line breaks only, not paragraph separators.
-        bool isLineBreak() const { return m_isLineBreak; }
-        void setIsLineBreak(bool isLineBreak) { m_isLineBreak = isLineBreak; }
-
-        // If true, any tab characters in the text are backtabs.
-        bool isBackTab() const { return m_isBackTab; }
-        void setIsBackTab(bool isBackTab) { m_isBackTab = isBackTab; }
+        bool isLineBreak() const { return m_inputType == InputTypeLineBreak; }
+        bool isBackTab() const { return m_inputType == InputTypeBackTab; }
+        bool isPaste() const { return m_inputType == InputTypePaste; }
 
-        bool isPaste() const { return m_isPaste; }
         bool shouldSmartReplace() const { return m_shouldSmartReplace; }
         bool shouldMatchStyle() const { return m_shouldMatchStyle; }
         DocumentFragment* pastingFragment() const { return m_pastingFragment.get(); }
 
     private:
         TextEvent();
-        TextEvent(PassRefPtr<AbstractView>, const String& data, PassRefPtr<DocumentFragment> = 0,
-                  bool isPaste = false, bool shouldSmartReplace = false, bool shouldMatchStyle = false);
-
+        TextEvent(PassRefPtr<AbstractView>, const String& data, InputType = InputTypeKeyboard);
+        TextEvent(PassRefPtr<AbstractView>, const String& data, PassRefPtr<DocumentFragment>,
+                  bool shouldSmartReplace, bool shouldMatchStyle);
+        InputType m_inputType;
         String m_data;
-        bool m_isLineBreak;
-        bool m_isBackTab;
 
         RefPtr<DocumentFragment> m_pastingFragment;
-        bool m_isPaste; // FIXME: Should use inputMode after it be available: http://webkit.org/b/42805
         bool m_shouldSmartReplace;
         bool m_shouldMatchStyle;
     };
index 8a16181..d0adb4e 100644 (file)
@@ -2629,6 +2629,7 @@ bool EventHandler::handleTextInputEvent(const String& text, Event* underlyingEve
     // Platforms should differentiate real commands like selectAll from text input in disguise (like insertNewline),
     // and avoid dispatching text input events from keydown default handlers.
     ASSERT(!underlyingEvent || !underlyingEvent->isKeyboardEvent() || static_cast<KeyboardEvent*>(underlyingEvent)->type() == eventNames().keypressEvent);
+    ASSERT(!(isLineBreak && isBackTab));
 
     if (!m_frame)
         return false;
@@ -2644,10 +2645,9 @@ bool EventHandler::handleTextInputEvent(const String& text, Event* underlyingEve
     if (FrameView* view = m_frame->view())
         view->resetDeferredRepaintDelay();
 
-    RefPtr<TextEvent> event = TextEvent::create(m_frame->domWindow(), text);
+    RefPtr<TextEvent> event = TextEvent::create(m_frame->domWindow(), text, TextEvent::selectInputType(isLineBreak, isBackTab));
     event->setUnderlyingEvent(underlyingEvent);
-    event->setIsLineBreak(isLineBreak);
-    event->setIsBackTab(isBackTab);
+
     ExceptionCode ec;
     target->dispatchEvent(event, ec);
     return event->defaultHandled();