summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZeno Albisser <zeno.albisser@digia.com>2014-02-07 13:07:29 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-08 11:35:31 +0100
commit19715fbc5bbaf03506372b38b6c2e34d759faee3 (patch)
tree3d058c9d1936f6d19f2f3b222a688f8a6902b7a5 /src
parent8ca06a55c074b9bf2509b6ec7b15d073030e5e40 (diff)
Implement basic support for input method events.
This is needed to get text input working again on Mac. Underlines are currently being ignored. Change-Id: I2a1074a1151e9be6f96ebe12fd0bb40a0eb63d6a Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/render_widget_host_view_qt.cpp20
-rw-r--r--src/core/render_widget_host_view_qt.h1
-rw-r--r--src/core/render_widget_host_view_qt_delegate.h1
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.h5
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)
{