From 70c2f166453ed11c9e0b28614d48cf8702295c9e Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 18 Jun 2014 14:18:28 +0200 Subject: Fix keyboard scrolling Arrow keys and page-up/page-down was not working. These are detected on RayKeyDown events which both the Win and GTK versions sends instead of KeyDown. Also fixes a mistake in reading the length of the UTF16 text string that was using sizeof on a pointer. Change-Id: I441ef21c15430dafcaeda00d43eb9aec81cd88b8 Reviewed-by: Jocelyn Turcotte --- src/core/render_widget_host_view_qt.cpp | 7 ++++++- src/core/web_event_factory.cpp | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 18eabd5c0..386783f88 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -885,7 +885,12 @@ void RenderWidgetHostViewQt::handleMouseEvent(QMouseEvent* event) void RenderWidgetHostViewQt::handleKeyEvent(QKeyEvent *ev) { - m_host->ForwardKeyboardEvent(WebEventFactory::toWebKeyboardEvent(ev)); + content::NativeWebKeyboardEvent webEvent = WebEventFactory::toWebKeyboardEvent(ev); + m_host->ForwardKeyboardEvent(webEvent); + if (webEvent.type == blink::WebInputEvent::RawKeyDown && !ev->text().isEmpty()) { + webEvent.type = blink::WebInputEvent::Char; + m_host->ForwardKeyboardEvent(webEvent); + } } void RenderWidgetHostViewQt::handleInputMethodEvent(QInputMethodEvent *ev) diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index 544ac83f6..d8be15e10 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -508,7 +508,7 @@ static WebInputEvent::Type webEventTypeForEvent(const QEvent* event) case QEvent::Wheel: return WebInputEvent::MouseWheel; case QEvent::KeyPress: - return WebInputEvent::KeyDown; + return WebInputEvent::RawKeyDown; case QEvent::KeyRelease: return WebInputEvent::KeyUp; case QEvent::HoverMove: @@ -600,6 +600,8 @@ content::NativeWebKeyboardEvent WebEventFactory::toWebKeyboardEvent(QKeyEvent *e webKitEvent.windowsKeyCode = windowsKeyCodeForKeyEvent(ev->key(), ev->modifiers() & Qt::KeypadModifier); webKitEvent.setKeyIdentifierFromWindowsKeyCode(); - memcpy(&webKitEvent.text, ev->text().utf16(), qMin(sizeof(webKitEvent.text), sizeof(ev->text().utf16()))); + const ushort* text = ev->text().utf16(); + memcpy(&webKitEvent.text, text, std::min(sizeof(webKitEvent.text), size_t(ev->text().length() * 2))); + memcpy(&webKitEvent.unmodifiedText, text, std::min(sizeof(webKitEvent.unmodifiedText), size_t(ev->text().length() * 2))); return webKitEvent; } -- cgit v1.2.3