Diff
Modified: trunk/Source/WebKit2/ChangeLog (182086 => 182087)
--- trunk/Source/WebKit2/ChangeLog 2015-03-27 22:07:47 UTC (rev 182086)
+++ trunk/Source/WebKit2/ChangeLog 2015-03-27 22:56:15 UTC (rev 182087)
@@ -1,3 +1,26 @@
+2015-03-27 Ryosuke Niwa <[email protected]>
+
+ 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 <[email protected]>
Only do the Connection::setShouldCloseConnectionOnMachExceptions() hack where necessary
Modified: trunk/Source/WebKit2/Shared/WebEvent.h (182086 => 182087)
--- trunk/Source/WebKit2/Shared/WebEvent.h 2015-03-27 22:07:47 UTC (rev 182086)
+++ trunk/Source/WebKit2/Shared/WebEvent.h 2015-03-27 22:56:15 UTC (rev 182087)
@@ -123,7 +123,11 @@
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 @@
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 @@
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.
Modified: trunk/Source/WebKit2/Shared/WebEventConversion.cpp (182086 => 182087)
--- trunk/Source/WebKit2/Shared/WebEventConversion.cpp 2015-03-27 22:07:47 UTC (rev 182086)
+++ trunk/Source/WebKit2/Shared/WebEventConversion.cpp 2015-03-27 22:56:15 UTC (rev 182087)
@@ -82,6 +82,9 @@
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())
Modified: trunk/Source/WebKit2/Shared/WebMouseEvent.cpp (182086 => 182087)
--- trunk/Source/WebKit2/Shared/WebMouseEvent.cpp 2015-03-27 22:07:47 UTC (rev 182086)
+++ trunk/Source/WebKit2/Shared/WebMouseEvent.cpp 2015-03-27 22:56:15 UTC (rev 182087)
@@ -40,10 +40,17 @@
, 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 @@
, m_deltaY(deltaY)
, m_deltaZ(deltaZ)
, m_clickCount(clickCount)
+#if PLATFORM(MAC)
+ , m_eventNumber(eventNumber)
+#endif
{
ASSERT(isMouseEventType(type));
}
@@ -67,6 +77,9 @@
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 @@
return false;
if (!decoder.decode(result.m_clickCount))
return false;
+#if PLATFORM(MAC)
+ if (!decoder.decode(result.m_eventNumber))
+ return false;
+#endif
return true;
}
Modified: trunk/Source/WebKit2/Shared/mac/WebEventFactory.mm (182086 => 182087)
--- trunk/Source/WebKit2/Shared/mac/WebEventFactory.mm 2015-03-27 22:07:47 UTC (rev 182086)
+++ trunk/Source/WebKit2/Shared/mac/WebEventFactory.mm 2015-03-27 22:56:15 UTC (rev 182087)
@@ -351,8 +351,9 @@
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)