Safari clears selection when its window gets activated via mouse down
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Mar 2015 22:56:15 +0000 (22:56 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Mar 2015 22:56:15 +0000 (22:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143157

Reviewed by Anders Carlsson.

The bug was caused by PlatformMouseEvent created in WebKit2 not having its event number
even though we were correctly calling setActivationEventNumber in WebPage::acceptsFirstMouse.

Fixed the bug by storing [NSEvent eventNumber] in WebMouseEvent on Mac in WebKit2 as done in WebKit1.

* Shared/WebEvent.h:
(WebKit::WebMouseEvent::eventNumber):
* Shared/WebEventConversion.cpp:
(WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
* Shared/WebMouseEvent.cpp:
(WebKit::WebMouseEvent::WebMouseEvent):
(WebKit::WebMouseEvent::encode):
(WebKit::WebMouseEvent::decode):
* Shared/mac/WebEventFactory.mm:
(WebKit::WebEventFactory::createWebMouseEvent):

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

Source/WebKit2/ChangeLog
Source/WebKit2/Shared/WebEvent.h
Source/WebKit2/Shared/WebEventConversion.cpp
Source/WebKit2/Shared/WebMouseEvent.cpp
Source/WebKit2/Shared/mac/WebEventFactory.mm

index f40f975c232d7525f36610f25e4bb5fea701da64..acf5e56af5ef6cf1378c00d0ee711dea57250d47 100644 (file)
@@ -1,3 +1,26 @@
+2015-03-27  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Safari clears selection when its window gets activated via mouse down
+        https://bugs.webkit.org/show_bug.cgi?id=143157
+
+        Reviewed by Anders Carlsson.
+
+        The bug was caused by PlatformMouseEvent created in WebKit2 not having its event number
+        even though we were correctly calling setActivationEventNumber in WebPage::acceptsFirstMouse.
+
+        Fixed the bug by storing [NSEvent eventNumber] in WebMouseEvent on Mac in WebKit2 as done in WebKit1.
+
+        * Shared/WebEvent.h:
+        (WebKit::WebMouseEvent::eventNumber):
+        * Shared/WebEventConversion.cpp:
+        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
+        * Shared/WebMouseEvent.cpp:
+        (WebKit::WebMouseEvent::WebMouseEvent):
+        (WebKit::WebMouseEvent::encode):
+        (WebKit::WebMouseEvent::decode):
+        * Shared/mac/WebEventFactory.mm:
+        (WebKit::WebEventFactory::createWebMouseEvent):
+
 2015-03-27  Anders Carlsson  <andersca@apple.com>
 
         Only do the Connection::setShouldCloseConnectionOnMachExceptions() hack where necessary
index 6de3a32f726e5248960e71f132deaf558aca0c1d..705ed5e04ecbfb332b89a831f8ee21104a392366 100644 (file)
@@ -123,7 +123,11 @@ public:
 
     WebMouseEvent();
 
+#if PLATFORM(MAC)
+    WebMouseEvent(Type, Button, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, float deltaX, float deltaY, float deltaZ, int clickCount, Modifiers, double timestamp, int eventNumber = -1);
+#else
     WebMouseEvent(Type, Button, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, float deltaX, float deltaY, float deltaZ, int clickCount, Modifiers, double timestamp);
+#endif
 
     Button button() const { return static_cast<Button>(m_button); }
     const WebCore::IntPoint& position() const { return m_position; }
@@ -132,6 +136,9 @@ public:
     float deltaY() const { return m_deltaY; }
     float deltaZ() const { return m_deltaZ; }
     int32_t clickCount() const { return m_clickCount; }
+#if PLATFORM(MAC)
+    int32_t eventNumber() const { return m_eventNumber; }
+#endif
 
     void encode(IPC::ArgumentEncoder&) const;
     static bool decode(IPC::ArgumentDecoder&, WebMouseEvent&);
@@ -146,6 +153,9 @@ private:
     float m_deltaY;
     float m_deltaZ;
     int32_t m_clickCount;
+#if PLATFORM(MAC)
+    int32_t m_eventNumber;
+#endif
 };
 
 // FIXME: Move this class to its own header file.
index c7df8b6df272dba244f83cc106c7c9684faa8740..329287cb918984ad191ba5c3857f68bd47bcbf43 100644 (file)
@@ -82,6 +82,9 @@ public:
         m_position = webEvent.position();
         m_globalPosition = webEvent.globalPosition();
         m_clickCount = webEvent.clickCount();
+#if PLATFORM(MAC)
+        m_eventNumber = webEvent.eventNumber();
+#endif
 
         m_modifierFlags = 0;
         if (webEvent.shiftKey())
index 2d400a4c0935c40f32864dc7606beb9584ba4189..b599fbce9be1c175fdc72bb3f9a9f95eab3b4b66 100644 (file)
@@ -40,10 +40,17 @@ WebMouseEvent::WebMouseEvent()
     , m_deltaY(0)
     , m_deltaZ(0)
     , m_clickCount(0)
+#if PLATFORM(MAC)
+    , m_eventNumber(-1)
+#endif
 {
 }
 
+#if PLATFORM(MAC)
+WebMouseEvent::WebMouseEvent(Type type, Button button, const IntPoint& position, const IntPoint& globalPosition, float deltaX, float deltaY, float deltaZ, int clickCount, Modifiers modifiers, double timestamp, int eventNumber)
+#else
 WebMouseEvent::WebMouseEvent(Type type, Button button, const IntPoint& position, const IntPoint& globalPosition, float deltaX, float deltaY, float deltaZ, int clickCount, Modifiers modifiers, double timestamp)
+#endif
     : WebEvent(type, modifiers, timestamp)
     , m_button(button)
     , m_position(position)
@@ -52,6 +59,9 @@ WebMouseEvent::WebMouseEvent(Type type, Button button, const IntPoint& position,
     , m_deltaY(deltaY)
     , m_deltaZ(deltaZ)
     , m_clickCount(clickCount)
+#if PLATFORM(MAC)
+    , m_eventNumber(eventNumber)
+#endif
 {
     ASSERT(isMouseEventType(type));
 }
@@ -67,6 +77,9 @@ void WebMouseEvent::encode(IPC::ArgumentEncoder& encoder) const
     encoder << m_deltaY;
     encoder << m_deltaZ;
     encoder << m_clickCount;
+#if PLATFORM(MAC)
+    encoder << m_eventNumber;
+#endif
 }
 
 bool WebMouseEvent::decode(IPC::ArgumentDecoder& decoder, WebMouseEvent& result)
@@ -88,6 +101,10 @@ bool WebMouseEvent::decode(IPC::ArgumentDecoder& decoder, WebMouseEvent& result)
         return false;
     if (!decoder.decode(result.m_clickCount))
         return false;
+#if PLATFORM(MAC)
+    if (!decoder.decode(result.m_eventNumber))
+        return false;
+#endif
 
     return true;
 }
index ad4e0de0fa398a6a1ed0f150586110583032ae0a..2b3c5a383cb1f53df8a421926287ee7f0d3dfee3 100644 (file)
@@ -351,8 +351,9 @@ WebMouseEvent WebEventFactory::createWebMouseEvent(NSEvent *event, NSView *windo
     int clickCount                          = clickCountForEvent(event);
     WebEvent::Modifiers modifiers           = modifiersForEvent(event);
     double timestamp                        = eventTimeStampSince1970(event);
+    int eventNumber                         = [event eventNumber];
 
-    return WebMouseEvent(type, button, IntPoint(position), IntPoint(globalPosition), deltaX, deltaY, deltaZ, clickCount, modifiers, timestamp);
+    return WebMouseEvent(type, button, IntPoint(position), IntPoint(globalPosition), deltaX, deltaY, deltaZ, clickCount, modifiers, timestamp, eventNumber);
 }
 
 WebWheelEvent WebEventFactory::createWebWheelEvent(NSEvent *event, NSView *windowView)