Diff
Modified: trunk/Source/WebCore/ChangeLog (246466 => 246467)
--- trunk/Source/WebCore/ChangeLog 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebCore/ChangeLog 2019-06-15 18:33:03 UTC (rev 246467)
@@ -1,3 +1,23 @@
+2019-06-15 Ludovico de Nittis <[email protected]>
+
+ [GTK] Stop accessing GdkEvent fields when possible
+ https://bugs.webkit.org/show_bug.cgi?id=198829
+
+ Reviewed by Michael Catanzaro.
+
+ Direct access to GdkEvent structs is no longer possible in GTK 4.
+
+ No behaviour changes.
+
+ * platform/gtk/PlatformKeyboardEventGtk.cpp:
+ (WebCore::eventTypeForGdkKeyEvent):
+ (WebCore::modifiersForGdkKeyEvent):
+ (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
+ * platform/gtk/PlatformMouseEventGtk.cpp:
+ (WebCore::PlatformMouseEvent::PlatformMouseEvent):
+ * platform/gtk/PlatformWheelEventGtk.cpp:
+ (WebCore::PlatformWheelEvent::PlatformWheelEvent):
+
2019-06-15 Rob Buis <[email protected]>
Add tests for prefetch redirects
Modified: trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp (246466 => 246467)
--- trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -1324,21 +1324,33 @@
static PlatformEvent::Type eventTypeForGdkKeyEvent(GdkEventKey* event)
{
+#if GTK_CHECK_VERSION(3, 10, 0)
+ return gdk_event_get_event_type(reinterpret_cast<GdkEvent*>(event)) == GDK_KEY_RELEASE ? PlatformEvent::KeyUp : PlatformEvent::KeyDown;
+#else
return event->type == GDK_KEY_RELEASE ? PlatformEvent::KeyUp : PlatformEvent::KeyDown;
+#endif
}
static OptionSet<PlatformEvent::Modifier> modifiersForGdkKeyEvent(GdkEventKey* event)
{
+ GdkModifierType state;
+ guint keyval;
OptionSet<PlatformEvent::Modifier> modifiers;
- if (event->state & GDK_SHIFT_MASK || event->keyval == GDK_KEY_3270_BackTab)
+ gdk_event_get_state(reinterpret_cast<GdkEvent*>(event), &state);
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+#else
+ keyval = event->keyval;
+#endif
+ if (state & GDK_SHIFT_MASK || keyval == GDK_KEY_3270_BackTab)
modifiers.add(PlatformEvent::Modifier::ShiftKey);
- if (event->state & GDK_CONTROL_MASK)
+ if (state & GDK_CONTROL_MASK)
modifiers.add(PlatformEvent::Modifier::ControlKey);
- if (event->state & GDK_MOD1_MASK)
+ if (state & GDK_MOD1_MASK)
modifiers.add(PlatformEvent::Modifier::AltKey);
- if (event->state & GDK_META_MASK)
+ if (state & GDK_META_MASK)
modifiers.add(PlatformEvent::Modifier::MetaKey);
- if (event->state & GDK_LOCK_MASK)
+ if (state & GDK_LOCK_MASK)
modifiers.add(PlatformEvent::Modifier::CapsLockKey);
return modifiers;
}
@@ -1346,19 +1358,30 @@
// Keep this in sync with the other platform event constructors
PlatformKeyboardEvent::PlatformKeyboardEvent(GdkEventKey* event, const CompositionResults& compositionResults)
: PlatformEvent(eventTypeForGdkKeyEvent(event), modifiersForGdkKeyEvent(event), wallTimeForEvent(event))
- , m_text(compositionResults.simpleString.length() ? compositionResults.simpleString : singleCharacterString(event->keyval))
- , m_unmodifiedText(m_text)
- , m_key(keyValueForGdkKeyCode(event->keyval))
- , m_code(keyCodeForHardwareKeyCode(event->hardware_keycode))
- , m_keyIdentifier(keyIdentifierForGdkKeyCode(event->keyval))
- , m_windowsVirtualKeyCode(windowsKeyCodeForGdkKeyCode(event->keyval))
, m_handledByInputMethod(false)
, m_autoRepeat(false)
- , m_isKeypad(event->keyval >= GDK_KEY_KP_Space && event->keyval <= GDK_KEY_KP_9)
, m_isSystemKey(false)
, m_gdkEventKey(event)
, m_compositionResults(compositionResults)
{
+ guint keyval;
+ guint16 keycode;
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+ gdk_event_get_keycode(reinterpret_cast<GdkEvent*>(event), &keycode);
+#else
+ keyval = event->keyval;
+ keycode = event->hardware_keycode;
+#endif
+
+ m_text = compositionResults.simpleString.length() ? compositionResults.simpleString : singleCharacterString(keyval);
+ m_unmodifiedText = m_text;
+ m_key = keyValueForGdkKeyCode(keyval);
+ m_code = keyCodeForHardwareKeyCode(keycode);
+ m_keyIdentifier = keyIdentifierForGdkKeyCode(keyval);
+ m_windowsVirtualKeyCode = windowsKeyCodeForGdkKeyCode(keyval);
+ m_isKeypad = keyval >= GDK_KEY_KP_Space && keyval <= GDK_KEY_KP_9;
+
// To match the behavior of IE, we return VK_PROCESSKEY for keys that triggered composition results.
if (compositionResults.compositionUpdated())
m_windowsVirtualKeyCode = VK_PROCESSKEY;
Modified: trunk/Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp (246466 => 246467)
--- trunk/Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -39,45 +39,64 @@
// Keep this in sync with the other platform event constructors
PlatformMouseEvent::PlatformMouseEvent(GdkEventButton* event)
{
+ gdouble x, y, rootX, rootY;
+ GdkModifierType state;
+ guint button;
+
+ gdk_event_get_coords(reinterpret_cast<GdkEvent*>(event), &x, &y);
+ gdk_event_get_root_coords(reinterpret_cast<GdkEvent*>(event), &rootX, &rootY);
+ gdk_event_get_state(reinterpret_cast<GdkEvent*>(event), &state);
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_button(reinterpret_cast<GdkEvent*>(event), &button);
+#else
+ button = event->button;
+#endif
+
m_timestamp = wallTimeForEvent(event);
- m_position = IntPoint((int)event->x, (int)event->y);
- m_globalPosition = IntPoint((int)event->x_root, (int)event->y_root);
+ m_position = IntPoint(static_cast<int>(x), static_cast<int>(y));
+ m_globalPosition = IntPoint(static_cast<int>(rootX), static_cast<int>(rootY));
m_button = NoButton;
m_clickCount = 0;
m_modifierFlags = 0;
- if (event->state & GDK_SHIFT_MASK)
+ if (state & GDK_SHIFT_MASK)
m_modifiers.add(PlatformEvent::Modifier::ShiftKey);
- if (event->state & GDK_CONTROL_MASK)
+ if (state & GDK_CONTROL_MASK)
m_modifiers.add(PlatformEvent::Modifier::ControlKey);
- if (event->state & GDK_MOD1_MASK)
+ if (state & GDK_MOD1_MASK)
m_modifiers.add(PlatformEvent::Modifier::AltKey);
- if (event->state & GDK_META_MASK)
+ if (state & GDK_META_MASK)
m_modifiers.add(PlatformEvent::Modifier::MetaKey);
- if (PlatformKeyboardEvent::modifiersContainCapsLock(event->state))
+ if (PlatformKeyboardEvent::modifiersContainCapsLock(state))
m_modifiers.add(PlatformEvent::Modifier::CapsLockKey);
- switch (event->type) {
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType type = gdk_event_get_event_type(reinterpret_cast<GdkEvent*>(event));
+#else
+ GdkEventType type = event->type;
+#endif
+
+ switch (type) {
case GDK_BUTTON_PRESS:
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
m_type = PlatformEvent::MousePressed;
- if (event->type == GDK_BUTTON_RELEASE) {
+ if (type == GDK_BUTTON_RELEASE) {
m_type = PlatformEvent::MouseReleased;
m_clickCount = 0;
- } else if (event->type == GDK_BUTTON_PRESS)
+ } else if (type == GDK_BUTTON_PRESS)
m_clickCount = 1;
- else if (event->type == GDK_2BUTTON_PRESS)
+ else if (type == GDK_2BUTTON_PRESS)
m_clickCount = 2;
- else if (event->type == GDK_3BUTTON_PRESS)
+ else if (type == GDK_3BUTTON_PRESS)
m_clickCount = 3;
- if (event->button == 1)
+ if (button == 1)
m_button = LeftButton;
- else if (event->button == 2)
+ else if (button == 2)
m_button = MiddleButton;
- else if (event->button == 3)
+ else if (button == 3)
m_button = RightButton;
break;
@@ -88,25 +107,36 @@
PlatformMouseEvent::PlatformMouseEvent(GdkEventMotion* motion)
{
+ gdouble x, y, rootX, rootY;
+ GdkModifierType state;
+ gdk_event_get_coords(reinterpret_cast<GdkEvent*>(motion), &x, &y);
+ gdk_event_get_root_coords(reinterpret_cast<GdkEvent*>(motion), &rootX, &rootY);
+ gdk_event_get_state(reinterpret_cast<GdkEvent*>(motion), &state);
+ m_position = IntPoint(static_cast<int>(x), static_cast<int>(y));
+ m_globalPosition = IntPoint(static_cast<int>(rootX), static_cast<int>(rootY));
m_timestamp = wallTimeForEvent(motion);
- m_position = IntPoint((int)motion->x, (int)motion->y);
- m_globalPosition = IntPoint((int)motion->x_root, (int)motion->y_root);
m_button = NoButton;
m_clickCount = 0;
m_modifierFlags = 0;
- if (motion->state & GDK_SHIFT_MASK)
+ if (state & GDK_SHIFT_MASK)
m_modifiers.add(PlatformEvent::Modifier::ShiftKey);
- if (motion->state & GDK_CONTROL_MASK)
+ if (state & GDK_CONTROL_MASK)
m_modifiers.add(PlatformEvent::Modifier::ControlKey);
- if (motion->state & GDK_MOD1_MASK)
+ if (state & GDK_MOD1_MASK)
m_modifiers.add(PlatformEvent::Modifier::AltKey);
- if (motion->state & GDK_META_MASK)
+ if (state & GDK_META_MASK)
m_modifiers.add(PlatformEvent::Modifier::MetaKey);
- if (PlatformKeyboardEvent::modifiersContainCapsLock(motion->state))
+ if (PlatformKeyboardEvent::modifiersContainCapsLock(state))
m_modifiers.add(PlatformEvent::Modifier::CapsLockKey);
- switch (motion->type) {
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType type = gdk_event_get_event_type(reinterpret_cast<GdkEvent*>(motion));
+#else
+ GdkEventType type = motion->type;
+#endif
+
+ switch (type) {
case GDK_MOTION_NOTIFY:
m_type = PlatformEvent::MouseMoved;
m_button = NoButton;
@@ -116,11 +146,11 @@
ASSERT_NOT_REACHED();
};
- if (motion->state & GDK_BUTTON1_MASK)
+ if (state & GDK_BUTTON1_MASK)
m_button = LeftButton;
- else if (motion->state & GDK_BUTTON2_MASK)
+ else if (state & GDK_BUTTON2_MASK)
m_button = MiddleButton;
- else if (motion->state & GDK_BUTTON3_MASK)
+ else if (state & GDK_BUTTON3_MASK)
m_button = RightButton;
}
}
Modified: trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp (246466 => 246467)
--- trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -42,26 +42,34 @@
PlatformWheelEvent::PlatformWheelEvent(GdkEventScroll* event)
{
static const float delta = 1;
+ GdkModifierType state;
m_type = PlatformEvent::Wheel;
m_timestamp = wallTimeForEvent(event);
+ gdk_event_get_state(reinterpret_cast<GdkEvent*>(event), &state);
- if (event->state & GDK_SHIFT_MASK)
+ if (state & GDK_SHIFT_MASK)
m_modifiers.add(Modifier::ShiftKey);
- if (event->state & GDK_CONTROL_MASK)
+ if (state & GDK_CONTROL_MASK)
m_modifiers.add(Modifier::ControlKey);
- if (event->state & GDK_MOD1_MASK)
+ if (state & GDK_MOD1_MASK)
m_modifiers.add(Modifier::AltKey);
- if (event->state & GDK_META_MASK)
+ if (state & GDK_META_MASK)
m_modifiers.add(Modifier::MetaKey);
- if (PlatformKeyboardEvent::modifiersContainCapsLock(event->state))
+ if (PlatformKeyboardEvent::modifiersContainCapsLock(state))
m_modifiers.add(PlatformEvent::Modifier::CapsLockKey);
m_deltaX = 0;
m_deltaY = 0;
+ GdkScrollDirection direction;
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_scroll_direction(reinterpret_cast<GdkEvent*>(event), &direction);
+#else
+ direction = event->direction;
+#endif
// Docs say an upwards scroll (away from the user) has a positive delta
- switch (event->direction) {
+ switch (direction) {
case GDK_SCROLL_UP:
m_deltaY = delta;
break;
@@ -90,11 +98,11 @@
#if ENABLE(ASYNC_SCROLLING)
#ifndef GTK_API_VERSION_2
#if GTK_CHECK_VERSION(3, 20, 0)
- m_phase = event->is_stop ?
+ m_phase = gdk_event_is_scroll_stop_event(reinterpret_cast<GdkEvent*>(event)) ?
PlatformWheelEventPhaseEnded :
PlatformWheelEventPhaseChanged;
#else
- m_phase = event->direction == GDK_SCROLL_SMOOTH && !m_deltaX && !m_deltaY ?
+ m_phase = direction == GDK_SCROLL_SMOOTH && !m_deltaX && !m_deltaY ?
PlatformWheelEventPhaseEnded :
PlatformWheelEventPhaseChanged;
#endif
@@ -103,8 +111,12 @@
#endif // GTK_API_VERSION_2
#endif // ENABLE(ASYNC_SCROLLING)
- m_position = IntPoint(static_cast<int>(event->x), static_cast<int>(event->y));
- m_globalPosition = IntPoint(static_cast<int>(event->x_root), static_cast<int>(event->y_root));
+ gdouble x, y, rootX, rootY;
+ gdk_event_get_coords(reinterpret_cast<GdkEvent*>(event), &x, &y);
+ gdk_event_get_root_coords(reinterpret_cast<GdkEvent*>(event), &rootX, &rootY);
+
+ m_position = IntPoint(static_cast<int>(x), static_cast<int>(y));
+ m_globalPosition = IntPoint(static_cast<int>(rootX), static_cast<int>(rootY));
m_granularity = ScrollByPixelWheelEvent;
m_directionInvertedFromDevice = false;
Modified: trunk/Source/WebKit/ChangeLog (246466 => 246467)
--- trunk/Source/WebKit/ChangeLog 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/ChangeLog 2019-06-15 18:33:03 UTC (rev 246467)
@@ -1,3 +1,46 @@
+2019-06-15 Ludovico de Nittis <[email protected]>
+
+ [GTK] Stop accessing GdkEvent fields when possible
+ https://bugs.webkit.org/show_bug.cgi?id=198829
+
+ Reviewed by Michael Catanzaro.
+
+ Direct access to GdkEvent structs is no longer possible in GTK 4.
+
+ * Shared/gtk/WebEventFactory.cpp:
+ (WebKit::buttonForEvent):
+ (WebKit::WebEventFactory::createWebMouseEvent):
+ (WebKit::WebEventFactory::createWebWheelEvent):
+ (WebKit::WebEventFactory::createWebKeyboardEvent):
+ (WebKit::WebEventFactory::createWebTouchEvent):
+ * UIProcess/API/gtk/WebKitEmojiChooser.cpp:
+ * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
+ (webkitScriptDialogImplKeyPressEvent):
+ * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+ (ClickCounter::currentClickCountForGdkButtonEvent):
+ (webkitWebViewBaseKeyPressEvent):
+ (webkitWebViewBaseHandleMouseEvent):
+ (webkitWebViewBaseCrossingNotifyEvent):
+ (webkitWebViewBaseGetTouchPointsForEvent):
+ (webkitWebViewBaseTouchEvent):
+ (webkitWebViewBaseEvent):
+ * UIProcess/gtk/GestureController.cpp:
+ (WebKit::GestureController::handleEvent):
+ * UIProcess/gtk/InputMethodFilter.cpp:
+ (WebKit::InputMethodFilter::filterKeyEvent):
+ (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting):
+ (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
+ * UIProcess/gtk/KeyBindingTranslator.cpp:
+ (WebKit::KeyBindingTranslator::commandsForKeyEvent):
+ * UIProcess/gtk/ViewGestureControllerGtk.cpp:
+ (WebKit::isEventStop):
+ (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanInfluenceSwipe):
+ (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas):
+ (WebKit::ViewGestureController::SwipeProgressTracker::handleEvent):
+ * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
+ (WebKit::WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback):
+ (WebKit::WebPopupMenuProxyGtk::keyPressEventCallback):
+
2019-06-15 Rob Buis <[email protected]>
Store prefetch redirects in the prefetch cache
Modified: trunk/Source/WebKit/Shared/gtk/WebEventFactory.cpp (246466 => 246467)
--- trunk/Source/WebKit/Shared/gtk/WebEventFactory.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/Shared/gtk/WebEventFactory.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -73,8 +73,12 @@
static inline WebMouseEvent::Button buttonForEvent(const GdkEvent* event)
{
unsigned button = 0;
-
- switch (event->type) {
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType type = gdk_event_get_event_type(event);
+#else
+ GdkEventType type = event->type;
+#endif
+ switch (type) {
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY:
case GDK_MOTION_NOTIFY: {
@@ -93,11 +97,17 @@
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
- if (event->button.button == 1)
+ guint eventButton;
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_button(event, &eventButton);
+#else
+ eventButton = event->button;
+#endif
+ if (eventButton == 1)
button = WebMouseEvent::LeftButton;
- else if (event->button.button == 2)
+ else if (eventButton == 2)
button = WebMouseEvent::MiddleButton;
- else if (event->button.button == 3)
+ else if (eventButton == 3)
button = WebMouseEvent::RightButton;
break;
default:
@@ -141,8 +151,21 @@
GdkModifierType state = static_cast<GdkModifierType>(0);
gdk_event_get_state(event, &state);
+ guint eventButton;
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_button(event, &eventButton);
+#else
+ eventButton = event->button;
+#endif
+
WebEvent::Type type = static_cast<WebEvent::Type>(0);
- switch (event->type) {
+
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType eventType = gdk_event_get_event_type(event);
+#else
+ GdkEventType eventType = event->type;
+#endif
+ switch (eventType) {
case GDK_MOTION_NOTIFY:
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY:
@@ -152,13 +175,13 @@
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS: {
type = WebEvent::MouseDown;
- auto modifier = stateModifierForGdkButton(event->button.button);
+ auto modifier = stateModifierForGdkButton(eventButton);
state = static_cast<GdkModifierType>(state | modifier);
break;
}
case GDK_BUTTON_RELEASE: {
type = WebEvent::MouseUp;
- auto modifier = stateModifierForGdkButton(event->button.button);
+ auto modifier = stateModifierForGdkButton(eventButton);
state = static_cast<GdkModifierType>(state & ~modifier);
break;
}
@@ -203,11 +226,17 @@
WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase)
{
double x, y, xRoot, yRoot;
+ GdkScrollDirection direction;
gdk_event_get_coords(event, &x, &y);
gdk_event_get_root_coords(event, &xRoot, &yRoot);
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_scroll_direction(event, &direction);
+#else
+ direction = event->direction;
+#endif
FloatSize wheelTicks;
- switch (event->scroll.direction) {
+ switch (direction) {
case GDK_SCROLL_UP:
wheelTicks = FloatSize(0, 1);
break;
@@ -251,17 +280,32 @@
WebKeyboardEvent WebEventFactory::createWebKeyboardEvent(const GdkEvent* event, const WebCore::CompositionResults& compositionResults, Vector<String>&& commands)
{
+ guint keyval;
+ guint16 keycode;
+#ifndef GTK_API_VERSION_2
+ gdk_event_get_keyval(event, &keyval);
+ gdk_event_get_keycode(event, &keycode);
+#else
+ keyval = event->keyval;
+ keycode = event->hardware_keycode;
+#endif
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType type = gdk_event_get_event_type(event);
+#else
+ GdkEventType type = event->type;
+#endif
+
return WebKeyboardEvent(
- event->type == GDK_KEY_RELEASE ? WebEvent::KeyUp : WebEvent::KeyDown,
- compositionResults.simpleString.length() ? compositionResults.simpleString : PlatformKeyboardEvent::singleCharacterString(event->key.keyval),
- PlatformKeyboardEvent::keyValueForGdkKeyCode(event->key.keyval),
- PlatformKeyboardEvent::keyCodeForHardwareKeyCode(event->key.hardware_keycode),
- PlatformKeyboardEvent::keyIdentifierForGdkKeyCode(event->key.keyval),
- PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode(event->key.keyval),
- static_cast<int>(event->key.keyval),
+ type == GDK_KEY_RELEASE ? WebEvent::KeyUp : WebEvent::KeyDown,
+ compositionResults.simpleString.length() ? compositionResults.simpleString : PlatformKeyboardEvent::singleCharacterString(keyval),
+ PlatformKeyboardEvent::keyValueForGdkKeyCode(keyval),
+ PlatformKeyboardEvent::keyCodeForHardwareKeyCode(keycode),
+ PlatformKeyboardEvent::keyIdentifierForGdkKeyCode(keyval),
+ PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode(keyval),
+ static_cast<int>(keyval),
compositionResults.compositionUpdated(),
WTFMove(commands),
- isGdkKeyCodeFromKeyPad(event->key.keyval),
+ isGdkKeyCodeFromKeyPad(keyval),
modifiersForEvent(event),
wallTimeForEvent(event));
}
@@ -271,7 +315,12 @@
{
#ifndef GTK_API_VERSION_2
WebEvent::Type type = WebEvent::NoType;
- switch (event->type) {
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType eventType = gdk_event_get_event_type(event);
+#else
+ GdkEventType eventType = event->type;
+#endif
+ switch (eventType) {
case GDK_TOUCH_BEGIN:
type = WebEvent::TouchStart;
break;
Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitEmojiChooser.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitEmojiChooser.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitEmojiChooser.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -92,7 +92,7 @@
static void emojiHovered(GtkWidget* widget, GdkEvent* event)
{
- if (event->type == GDK_ENTER_NOTIFY)
+ if (gdk_event_get_event_type(event) == GDK_ENTER_NOTIFY)
gtk_widget_set_state_flags(widget, GTK_STATE_FLAG_PRELIGHT, FALSE);
else
gtk_widget_unset_state_flags(widget, GTK_STATE_FLAG_PRELIGHT);
Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogImpl.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogImpl.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogImpl.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -46,7 +46,9 @@
static gboolean webkitScriptDialogImplKeyPressEvent(GtkWidget* widget, GdkEventKey* keyEvent)
{
- if (keyEvent->keyval == GDK_KEY_Escape) {
+ guint keyval;
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(keyEvent), &keyval);
+ if (keyval == GDK_KEY_Escape) {
webkitScriptDialogImplClose(WEBKIT_SCRIPT_DIALOG_IMPL(widget));
return GDK_EVENT_STOP;
}
Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -118,19 +118,27 @@
eventTime = (timeValue.tv_sec * 1000) + (timeValue.tv_usec / 1000);
}
- if ((event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS)
- || ((std::abs(event->button.x - previousClickPoint.x()) < doubleClickDistance)
- && (std::abs(event->button.y - previousClickPoint.y()) < doubleClickDistance)
+ GdkEventType type;
+ guint button;
+ double x, y;
+ gdk_event_get_coords(event, &x, &y);
+ gdk_event_get_button(event, &button);
+#if GTK_CHECK_VERSION(3, 10, 0)
+ type = gdk_event_get_event_type(event);
+#else
+ type = event->type;
+#endif
+ if ((type == GDK_2BUTTON_PRESS || type == GDK_3BUTTON_PRESS)
+ || ((std::abs(x - previousClickPoint.x()) < doubleClickDistance)
+ && (std::abs(y - previousClickPoint.y()) < doubleClickDistance)
&& (eventTime - previousClickTime < static_cast<unsigned>(doubleClickTime))
- && (event->button.button == previousClickButton)))
+ && (button == previousClickButton)))
currentClickCount++;
else
currentClickCount = 1;
- double x, y;
- gdk_event_get_coords(event, &x, &y);
previousClickPoint = IntPoint(x, y);
- previousClickButton = event->button.button;
+ previousClickButton = button;
previousClickTime = eventTime;
return currentClickCount;
@@ -739,8 +747,13 @@
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget);
WebKitWebViewBasePrivate* priv = webViewBase->priv;
+ GdkModifierType state;
+ guint keyval;
+ gdk_event_get_state(reinterpret_cast<GdkEvent*>(keyEvent), &state);
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(keyEvent), &keyval);
+
#if ENABLE(DEVELOPER_MODE) && OS(LINUX)
- if ((keyEvent->state & GDK_CONTROL_MASK) && (keyEvent->state & GDK_SHIFT_MASK) && keyEvent->keyval == GDK_KEY_G) {
+ if ((state & GDK_CONTROL_MASK) && (state & GDK_SHIFT_MASK) && keyval == GDK_KEY_G) {
auto& preferences = priv->pageProxy->preferences();
preferences.setResourceUsageOverlayVisible(!preferences.resourceUsageOverlayVisible());
priv->shouldForwardNextKeyEvent = FALSE;
@@ -753,7 +766,7 @@
#if ENABLE(FULLSCREEN_API)
if (priv->fullScreenModeActive) {
- switch (keyEvent->keyval) {
+ switch (keyval) {
case GDK_KEY_Escape:
case GDK_KEY_f:
case GDK_KEY_F:
@@ -809,8 +822,12 @@
ASSERT(!priv->dialog);
int clickCount = 0;
-
- switch (event->type) {
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType eventType = gdk_event_get_event_type(event);
+#else
+ GdkEventType eventType = event->type;
+#endif
+ switch (eventType) {
case GDK_BUTTON_PRESS:
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS: {
@@ -825,8 +842,10 @@
priv->inputMethodFilter.notifyMouseButtonPress();
+ guint button;
+ gdk_event_get_button(event, &button);
// If it's a right click event save it as a possible context menu event.
- if (event->button.button == GDK_BUTTON_SECONDARY)
+ if (button == GDK_BUTTON_SECONDARY)
priv->contextMenuEvent.reset(gdk_event_copy(event));
clickCount = priv->clickCounter.currentClickCountForGdkButtonEvent(event);
@@ -975,10 +994,12 @@
// because those coordinates are inside the web view.
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
+ double xEvent, yEvent;
+ gdk_event_get_coords(reinterpret_cast<GdkEvent*>(crossingEvent), &xEvent, &yEvent);
double width = allocation.width;
double height = allocation.height;
- double x = crossingEvent->x;
- double y = crossingEvent->y;
+ double x = xEvent;
+ double y = yEvent;
if (x < 0 && x > -1)
x = -1;
else if (x >= width && x < width + 1)
@@ -990,7 +1011,7 @@
GdkEvent* event = reinterpret_cast<GdkEvent*>(crossingEvent);
GUniquePtr<GdkEvent> copiedEvent;
- if (x != crossingEvent->x || y != crossingEvent->y) {
+ if (x != xEvent || y != yEvent) {
copiedEvent.reset(gdk_event_copy(event));
copiedEvent->crossing.x = x;
copiedEvent->crossing.y = y;
@@ -1036,7 +1057,12 @@
static void webkitWebViewBaseGetTouchPointsForEvent(WebKitWebViewBase* webViewBase, GdkEvent* event, Vector<WebPlatformTouchPoint>& touchPoints)
{
WebKitWebViewBasePrivate* priv = webViewBase->priv;
- bool touchEnd = (event->type == GDK_TOUCH_END) || (event->type == GDK_TOUCH_CANCEL);
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType type = gdk_event_get_event_type(event);
+#else
+ GdkEventType type = event->type;
+#endif
+ bool touchEnd = (type == GDK_TOUCH_END) || (type == GDK_TOUCH_CANCEL);
touchPoints.reserveInitialCapacity(touchEnd ? priv->touchEvents.size() + 1 : priv->touchEvents.size());
for (const auto& it : priv->touchEvents)
@@ -1058,7 +1084,12 @@
GdkEvent* touchEvent = reinterpret_cast<GdkEvent*>(event);
uint32_t sequence = GPOINTER_TO_UINT(gdk_event_get_event_sequence(touchEvent));
- switch (touchEvent->type) {
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType type = gdk_event_get_event_type(touchEvent);
+#else
+ GdkEventType type = touchEvent->type
+#endif
+ switch (type) {
case GDK_TOUCH_BEGIN: {
ASSERT(!priv->touchEvents.contains(sequence));
GUniquePtr<GdkEvent> event(gdk_event_copy(touchEvent));
@@ -1177,7 +1208,9 @@
void swipe(GdkEventTouch* event, const FloatPoint& velocity) final
{
- GUniquePtr<GdkEvent> scrollEvent = createScrollEvent(event, FloatPoint::narrowPrecision(event->x, event->y), velocity, true);
+ double x, y;
+ gdk_event_get_coords(reinterpret_cast<GdkEvent*>(event), &x, &y);
+ GUniquePtr<GdkEvent> scrollEvent = createScrollEvent(event, FloatPoint::narrowPrecision(x, y), velocity, true);
webkitWebViewBaseHandleWheelEvent(m_webView, scrollEvent.get(), WebWheelEvent::Phase::PhaseNone, WebWheelEvent::Phase::PhaseBegan);
}
@@ -1278,9 +1311,13 @@
static gboolean webkitWebViewBaseEvent(GtkWidget* widget, GdkEvent* event)
{
#if HAVE(GTK_GESTURES)
+#if GTK_CHECK_VERSION(3, 10, 0)
+ if (gdk_event_get_event_type(event) == GDK_TOUCHPAD_PINCH)
+#else
if (event->type == GDK_TOUCHPAD_PINCH)
+#endif // GTK_CHECK_VERSION(3, 10, 0)
webkitWebViewBaseGestureController(WEBKIT_WEB_VIEW_BASE(widget)).handleEvent(event);
-#endif
+#endif // HAVE(GTK_GESTURES)
return GDK_EVENT_PROPAGATE;
}
Modified: trunk/Source/WebKit/UIProcess/gtk/GestureController.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/gtk/GestureController.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/gtk/GestureController.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -53,7 +53,11 @@
m_swipeGesture.handleEvent(event);
m_zoomGesture.handleEvent(event);
m_longpressGesture.handleEvent(event);
+#if GTK_CHECK_VERSION(3, 10, 0)
+ touchEnd = (gdk_event_get_event_type(event) == GDK_TOUCH_END) || (gdk_event_get_event_type(event) == GDK_TOUCH_CANCEL);
+#else
touchEnd = (event->type == GDK_TOUCH_END) || (event->type == GDK_TOUCH_CANCEL);
+#endif
return touchEnd ? wasProcessingGestures : isProcessingGestures();
}
Modified: trunk/Source/WebKit/UIProcess/gtk/InputMethodFilter.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/gtk/InputMethodFilter.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/gtk/InputMethodFilter.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -198,7 +198,14 @@
bool justSentFakeKeyUp = m_justSentFakeKeyUp;
m_justSentFakeKeyUp = false;
- if (justSentFakeKeyUp && event->type == GDK_KEY_RELEASE)
+ guint keyval;
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+#if GTK_CHECK_VERSION(3, 10, 0)
+ GdkEventType type = gdk_event_get_event_type(reinterpret_cast<GdkEvent*>(event));
+#else
+ GdkEventType type = event->type;
+#endif
+ if (justSentFakeKeyUp && type == GDK_KEY_RELEASE)
return;
// Simple input methods work such that even normal keystrokes fire the
@@ -210,10 +217,10 @@
return;
}
- if (filtered && event->type == GDK_KEY_PRESS) {
+ if (filtered && type == GDK_KEY_PRESS) {
if (!m_preeditChanged && m_confirmedComposition.isNull()) {
m_composingTextCurrently = true;
- m_lastFilteredKeyPressCodeWithNoResults = event->keyval;
+ m_lastFilteredKeyPressCodeWithNoResults = keyval;
return;
}
@@ -227,7 +234,7 @@
// If we previously filtered a key press event and it yielded no results. Suppress
// the corresponding key release event to avoid confusing the web content.
- if (event->type == GDK_KEY_RELEASE && lastFilteredKeyPressCodeWithNoResults == event->keyval)
+ if (type == GDK_KEY_RELEASE && lastFilteredKeyPressCodeWithNoResults == keyval)
return;
// At this point a keystroke was either:
@@ -443,19 +450,31 @@
#if ENABLE(API_TESTS)
void InputMethodFilter::logHandleKeyboardEventForTesting(GdkEventKey* event, const String& eventString, EventFakedForComposition faked)
{
+ guint keyval;
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+#if GTK_CHECK_VERSION(3, 10, 0)
+ const char* eventType = gdk_event_get_event_type(reinterpret_cast<GdkEvent*>(event)) == GDK_KEY_RELEASE ? "release" : "press";
+#else
const char* eventType = event->type == GDK_KEY_RELEASE ? "release" : "press";
+#endif
const char* fakedString = faked == EventFaked ? " (faked)" : "";
if (!eventString.isNull())
- m_events.append(makeString("sendSimpleKeyEvent type=", eventType, " keycode=", hex(event->keyval), " text='", eventString, '\'', fakedString));
+ m_events.append(makeString("sendSimpleKeyEvent type=", eventType, " keycode=", hex(keyval), " text='", eventString, '\'', fakedString));
else
- m_events.append(makeString("sendSimpleKeyEvent type=", eventType, " keycode=", hex(event->keyval), fakedString));
+ m_events.append(makeString("sendSimpleKeyEvent type=", eventType, " keycode=", hex(keyval), fakedString));
}
void InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting(GdkEventKey* event, ResultsToSend resultsToSend, EventFakedForComposition faked)
{
+ guint keyval;
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+#if GTK_CHECK_VERSION(3, 10, 0)
+ const char* eventType = gdk_event_get_event_type(reinterpret_cast<GdkEvent*>(event)) == GDK_KEY_RELEASE ? "release" : "press";
+#else
const char* eventType = event->type == GDK_KEY_RELEASE ? "release" : "press";
+#endif
const char* fakedString = faked == EventFaked ? " (faked)" : "";
- m_events.append(makeString("sendKeyEventWithCompositionResults type=", eventType, " keycode=", hex(event->keyval), fakedString));
+ m_events.append(makeString("sendKeyEventWithCompositionResults type=", eventType, " keycode=", hex(keyval), fakedString));
if (resultsToSend & Composition && !m_confirmedComposition.isNull())
logConfirmCompositionForTesting();
Modified: trunk/Source/WebKit/UIProcess/gtk/KeyBindingTranslator.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/gtk/KeyBindingTranslator.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/gtk/KeyBindingTranslator.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -205,16 +205,21 @@
{
ASSERT(m_pendingEditorCommands.isEmpty());
+ guint keyval;
+ GdkModifierType state;
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+ gdk_event_get_state(reinterpret_cast<GdkEvent*>(event), &state);
+
gtk_bindings_activate_event(G_OBJECT(m_nativeWidget.get()), event);
if (!m_pendingEditorCommands.isEmpty())
return WTFMove(m_pendingEditorCommands);
// Special-case enter keys for we want them to work regardless of modifier.
- if ((event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter || event->keyval == GDK_KEY_ISO_Enter))
+ if ((keyval == GDK_KEY_Return || keyval == GDK_KEY_KP_Enter || keyval == GDK_KEY_ISO_Enter))
return { "InsertNewLine" };
// For keypress events, we want charCode(), but keyCode() does that.
- unsigned mapKey = event->state << 16 | event->keyval;
+ unsigned mapKey = state << 16 | keyval;
if (!mapKey)
return { };
Modified: trunk/Source/WebKit/UIProcess/gtk/ViewGestureControllerGtk.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/gtk/ViewGestureControllerGtk.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/gtk/ViewGestureControllerGtk.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -55,7 +55,7 @@
static bool isEventStop(GdkEventScroll* event)
{
#if GTK_CHECK_VERSION(3, 20, 0)
- return event->is_stop;
+ return gdk_event_is_scroll_stop_event(reinterpret_cast<GdkEvent*>(event));
#else
return !event->delta_x && !event->delta_y;
#endif
@@ -83,10 +83,12 @@
{
GdkDevice* device = gdk_event_get_source_device(reinterpret_cast<GdkEvent*>(event));
GdkInputSource source = gdk_device_get_source(device);
+ GdkScrollDirection direction;
+ gdk_event_get_scroll_direction(reinterpret_cast<GdkEvent*>(event), &direction);
// FIXME: Should it maybe be allowed on mice/trackpoints as well? The GDK_SCROLL_SMOOTH
// requirement already filters out most mice, and it works pretty well on a trackpoint
- return event->direction == GDK_SCROLL_SMOOTH && (source == GDK_SOURCE_TOUCHPAD || source == GDK_SOURCE_TOUCHSCREEN);
+ return direction == GDK_SCROLL_SMOOTH && (source == GDK_SOURCE_TOUCHPAD || source == GDK_SOURCE_TOUCHSCREEN);
}
static bool isTouchEvent(GdkEventScroll* event)
@@ -100,9 +102,11 @@
FloatSize ViewGestureController::PendingSwipeTracker::scrollEventGetScrollingDeltas(GdkEventScroll* event)
{
double multiplier = isTouchEvent(event) ? Scrollbar::pixelsPerLineStep() : gtkScrollDeltaMultiplier;
+ double xDelta, yDelta;
+ gdk_event_get_scroll_deltas(reinterpret_cast<GdkEvent*>(event), &xDelta, &yDelta);
// GdkEventScroll deltas are inverted compared to NSEvent, so invert them again
- return -FloatSize(event->delta_x, event->delta_y) * multiplier;
+ return -FloatSize(xDelta, yDelta) * multiplier;
}
bool ViewGestureController::handleScrollWheelEvent(GdkEventScroll* event)
@@ -183,13 +187,17 @@
return false;
}
- double deltaX = -event->delta_x;
+ uint32_t eventTime = gdk_event_get_time(reinterpret_cast<GdkEvent*>(event));
+ double eventDeltaX;
+ gdk_event_get_scroll_deltas(reinterpret_cast<GdkEvent*>(event), &eventDeltaX, nullptr);
+
+ double deltaX = -eventDeltaX;
if (isTouchEvent(event))
deltaX *= (double) Scrollbar::pixelsPerLineStep() / m_webPageProxy.viewSize().width();
else
deltaX *= gtkScrollDeltaMultiplier / swipeTouchpadBaseWidth;
- Seconds time = Seconds::fromMilliseconds(event->time);
+ Seconds time = Seconds::fromMilliseconds(eventTime);
if (time != m_prevTime)
m_velocity = deltaX / (time - m_prevTime).milliseconds();
Modified: trunk/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp (246466 => 246467)
--- trunk/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp 2019-06-15 18:20:27 UTC (rev 246466)
+++ trunk/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp 2019-06-15 18:33:03 UTC (rev 246467)
@@ -95,11 +95,15 @@
gboolean WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback(GtkWidget* treeView, GdkEventButton* event, WebPopupMenuProxyGtk* popupMenu)
{
- if (event->button != GDK_BUTTON_PRIMARY)
+ guint button;
+ gdk_event_get_button(reinterpret_cast<GdkEvent*>(event), &button);
+ if (button != GDK_BUTTON_PRIMARY)
return FALSE;
+ double x, y;
+ gdk_event_get_coords(reinterpret_cast<GdkEvent*>(event), &x, &y);
GUniqueOutPtr<GtkTreePath> path;
- if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeView), event->x, event->y, &path.outPtr(), nullptr, nullptr, nullptr))
+ if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeView), x, y, &path.outPtr(), nullptr, nullptr, nullptr))
return FALSE;
return popupMenu->activateItemAtPath(path.get());
@@ -119,7 +123,9 @@
if (!popupMenu->m_device)
return FALSE;
- if (event->keyval == GDK_KEY_Escape) {
+ guint keyval;
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+ if (keyval == GDK_KEY_Escape) {
popupMenu->hidePopupMenu();
return TRUE;
}
@@ -370,19 +376,22 @@
Optional<unsigned> WebPopupMenuProxyGtk::typeAheadFindIndex(GdkEventKey* event)
{
- gunichar keychar = gdk_keyval_to_unicode(event->keyval);
+ guint keyval;
+ gdk_event_get_keyval(reinterpret_cast<GdkEvent*>(event), &keyval);
+ gunichar keychar = gdk_keyval_to_unicode(keyval);
if (!g_unichar_isprint(keychar))
return WTF::nullopt;
- if (event->time < m_previousKeyEventTime)
+ uint32_t time = gdk_event_get_time(reinterpret_cast<GdkEvent*>(event));
+ if (time < m_previousKeyEventTime)
return WTF::nullopt;
static const uint32_t typeaheadTimeoutMs = 1000;
- if (event->time - m_previousKeyEventTime > typeaheadTimeoutMs) {
+ if (time - m_previousKeyEventTime > typeaheadTimeoutMs) {
if (m_currentSearchString)
g_string_truncate(m_currentSearchString, 0);
}
- m_previousKeyEventTime = event->time;
+ m_previousKeyEventTime = time;
if (!m_currentSearchString)
m_currentSearchString = g_string_new(nullptr);