diff options
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 20 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt.h | 1 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate.h | 1 | ||||
-rw-r--r-- | src/webengine/render_widget_host_view_qt_delegate_quick.h | 5 |
4 files changed, 27 insertions, 0 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 9279c57b0..4fb9a1fed 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -62,6 +62,7 @@ #include <QEvent> #include <QFocusEvent> #include <QGuiApplication> +#include <QInputMethodEvent> #include <QKeyEvent> #include <QMouseEvent> #include <QScreen> @@ -703,6 +704,9 @@ bool RenderWidgetHostViewQt::forwardEvent(QEvent *event) case QEvent::FocusOut: handleFocusEvent(static_cast<QFocusEvent*>(event)); break; + case QEvent::InputMethod: + handleInputMethodEvent(static_cast<QInputMethodEvent*>(event)); + break; default: return false; } @@ -850,6 +854,22 @@ void RenderWidgetHostViewQt::handleKeyEvent(QKeyEvent *ev) m_host->ForwardKeyboardEvent(WebEventFactory::toWebKeyboardEvent(ev)); } +void RenderWidgetHostViewQt::handleInputMethodEvent(QInputMethodEvent *ev) +{ + if (!m_host) + return; + + if (ev->commitString().length()) + m_host->ImeConfirmComposition(toString16(ev->commitString()), gfx::Range::InvalidRange(), false); + + if (ev->preeditString().length()) { + // FIXME: Implement translation from QInputMethodEvent::Attribute list to WebKit::WebCompositionUnderlines. + std::vector<WebKit::WebCompositionUnderline> underlines; + int start = ev->replacementStart(); + m_host->ImeSetComposition(toString16(ev->preeditString()), underlines, start, start + ev->replacementLength()); + } +} + void RenderWidgetHostViewQt::handleWheelEvent(QWheelEvent *ev) { m_host->ForwardWheelEvent(WebEventFactory::toWebWheelEvent(ev, dpiScale())); diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index 861315e8a..5591be190 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -180,6 +180,7 @@ public: void handleTouchEvent(QTouchEvent*); void handleHoverEvent(QHoverEvent*); void handleFocusEvent(QFocusEvent*); + void handleInputMethodEvent(QInputMethodEvent*); #if defined(OS_MACOSX) virtual void SetTakesFocusOnlyOnMouseDown(bool flag) Q_DECL_OVERRIDE { QT_NOT_YET_IMPLEMENTED } diff --git a/src/core/render_widget_host_view_qt_delegate.h b/src/core/render_widget_host_view_qt_delegate.h index 7ed895f0b..a780335ef 100644 --- a/src/core/render_widget_host_view_qt_delegate.h +++ b/src/core/render_widget_host_view_qt_delegate.h @@ -55,6 +55,7 @@ class QQuickWindow; class QSGNode; class QVariant; class QWindow; +class QInputMethodEvent; QT_END_NAMESPACE class WebContentsAdapterClient; diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h index 9c7bba35e..9dbe79941 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h @@ -202,6 +202,11 @@ public: return m_client->inputMethodQuery(query); } + virtual void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE + { + m_client->forwardEvent(event); + } + protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { |