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
+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
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; }
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&);
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.
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())
, 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)
, m_deltaY(deltaY)
, m_deltaZ(deltaZ)
, m_clickCount(clickCount)
+#if PLATFORM(MAC)
+ , m_eventNumber(eventNumber)
+#endif
{
ASSERT(isMouseEventType(type));
}
encoder << m_deltaY;
encoder << m_deltaZ;
encoder << m_clickCount;
+#if PLATFORM(MAC)
+ encoder << m_eventNumber;
+#endif
}
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;
}
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)