2007-04-06 Oliver Hunt <oliver@apple.com>
authoroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 7 Apr 2007 05:44:44 +0000 (05:44 +0000)
committeroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 7 Apr 2007 05:44:44 +0000 (05:44 +0000)
        Reviewed by Adam.

        Fix MouseEvent so it's possible to distinguish between
        a MouseMouseEvent with NoButton down, and a move with
        LeftButton down.  It would be nice if the DOM allowed
        for NoButton to exist, but it doesn't so this is necessary.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::noButton):

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

WebCore/ChangeLog
WebCore/dom/EventTargetNode.cpp
WebCore/dom/MouseEvent.cpp
WebCore/dom/MouseEvent.h

index de4457c..b142c90 100644 (file)
@@ -1,3 +1,20 @@
+2007-04-06  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Adam.
+
+        Fix MouseEvent so it's possible to distinguish between
+        a MouseMouseEvent with NoButton down, and a move with
+        LeftButton down.  It would be nice if the DOM allowed 
+        for NoButton to exist, but it doesn't so this is necessary.
+
+        * dom/EventTargetNode.cpp:
+        (WebCore::EventTargetNode::dispatchMouseEvent):
+        * dom/MouseEvent.cpp:
+        (WebCore::MouseEvent::MouseEvent):
+        (WebCore::MouseEvent::initMouseEvent):
+        * dom/MouseEvent.h:
+        (WebCore::MouseEvent::noButton):
+
 2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
 
         Not reviewed - gdk build fix.
index 22e9113..6a6f798 100644 (file)
@@ -391,7 +391,7 @@ bool EventTargetNode::dispatchMouseEvent(const PlatformMouseEvent& event, const
 
     ASSERT(event.eventType() == MouseEventMoved || button != NoButton);
     
-    return dispatchMouseEvent(eventType, button == NoButton ? 0 : button , detail,
+    return dispatchMouseEvent(eventType, button, detail,
         contentsPos.x(), contentsPos.y(), event.globalX(), event.globalY(),
         event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(),
         false, relatedTarget);
index fd8e67c..d89a54f 100644 (file)
@@ -33,6 +33,7 @@ using namespace EventNames;
 
 MouseEvent::MouseEvent()
     : m_button(0)
+    , m_buttonDown(false)
 {
 }
 
@@ -43,7 +44,8 @@ MouseEvent::MouseEvent(const AtomicString& eventType, bool canBubble, bool cance
                        Clipboard* clipboard, bool isSimulated)
     : MouseRelatedEvent(eventType, canBubble, cancelable, view, detail, screenX, screenY,
                         pageX, pageY, ctrlKey, altKey, shiftKey, metaKey, isSimulated)
-    , m_button(button)
+    , m_button(button == (unsigned short)-1 ? 0 : button)
+    , m_buttonDown(button != (unsigned short)-1)
     , m_relatedTarget(relatedTarget)
     , m_clipboard(clipboard)
 {
@@ -69,7 +71,8 @@ void MouseEvent::initMouseEvent(const AtomicString& type, bool canBubble, bool c
     m_altKey = altKey;
     m_shiftKey = shiftKey;
     m_metaKey = metaKey;
-    m_button = button;
+    m_button = button == (unsigned short)-1 ? 0 : button;
+    m_buttonDown = button != (unsigned short)-1;
     m_relatedTarget = relatedTarget;
 
     initCoordinates(clientX, clientY);
index 0731049..84bb0e1 100644 (file)
@@ -50,6 +50,7 @@ namespace WebCore {
         // WinIE uses 1,4,2 for left/middle/right but not for click (just for mousedown/up, maybe others),
         // but we will match the standard DOM.
         unsigned short button() const { return m_button; }
+        bool buttonDown() const { return m_buttonDown; }
         EventTargetNode* relatedTarget() const { return m_relatedTarget.get(); }
         Clipboard* clipboard() const { return m_clipboard.get(); }
         
@@ -62,6 +63,7 @@ namespace WebCore {
 
     private:
         unsigned short m_button;
+        bool m_buttonDown;
         RefPtr<EventTargetNode> m_relatedTarget;
         RefPtr<Clipboard> m_clipboard;
     };