summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>2011-09-20 15:33:27 +0300
committerQt by Nokia <qt-info@nokia.com>2011-09-20 19:18:19 +0200
commitdbdfdb2c95b261fe28955a89c2e00e212fd7d106 (patch)
tree0f9315e206084931a4ba040d9f809de6f91389bf
parent6aad4122332c0291e2e3249b508c7583428177b9 (diff)
Implemented key filter support on platform input context
As previously with QInputContext, now supporting filterEvent() interface. Usage only on XCB so far. Change-Id: I8e5972626552bda32318fe060017d0217bb79a94 Reviewed-on: http://codereview.qt-project.org/5240 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
-rw-r--r--src/gui/kernel/qplatforminputcontext_qpa.cpp5
-rw-r--r--src/gui/kernel/qplatforminputcontext_qpa.h2
-rw-r--r--src/plugins/platforms/xcb/qxcbkeyboard.cpp13
3 files changed, 17 insertions, 3 deletions
diff --git a/src/gui/kernel/qplatforminputcontext_qpa.cpp b/src/gui/kernel/qplatforminputcontext_qpa.cpp
index 0fdcd9e9ac..3459046dab 100644
--- a/src/gui/kernel/qplatforminputcontext_qpa.cpp
+++ b/src/gui/kernel/qplatforminputcontext_qpa.cpp
@@ -78,6 +78,11 @@ void QPlatformInputContext::invokeAction(QInputPanel::Action action, int cursorP
reset();
}
+bool QPlatformInputContext::filterEvent(const QEvent *event)
+{
+ return false;
+}
+
QRectF QPlatformInputContext::keyboardRect() const
{
return QRectF();
diff --git a/src/gui/kernel/qplatforminputcontext_qpa.h b/src/gui/kernel/qplatforminputcontext_qpa.h
index 35763edf13..f4efc3e92d 100644
--- a/src/gui/kernel/qplatforminputcontext_qpa.h
+++ b/src/gui/kernel/qplatforminputcontext_qpa.h
@@ -66,7 +66,7 @@ public:
virtual void commit();
virtual void update(Qt::InputMethodQueries);
virtual void invokeAction(QInputPanel::Action, int cursorPosition);
-
+ virtual bool filterEvent(const QEvent *event);
virtual QRectF keyboardRect() const;
void emitKeyboardRectChanged() const;
diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
index cb65a5106e..b5722e7eeb 100644
--- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp
+++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
@@ -1026,9 +1026,9 @@ void QXcbKeyboard::handleKeyEvent(QWindow *window, QEvent::Type type, xcb_keycod
QByteArray chars;
xcb_keysym_t sym = lookupString(window, state, code, type, &chars);
+ QPlatformInputContext *inputContext = QGuiApplicationPrivate::platformIntegration()->inputContext();
-
- if (QObject* inputContext = QGuiApplicationPrivate::platformIntegration()->inputContext()) {
+ if (inputContext) {
bool retval = false;
if (inputContext->metaObject()->indexOfMethod("x11FilterEvent") != -1)
QMetaObject::invokeMethod(inputContext, "x11FilterEvent", Qt::DirectConnection,
@@ -1045,6 +1045,15 @@ void QXcbKeyboard::handleKeyEvent(QWindow *window, QEvent::Type type, xcb_keycod
int qtcode = 0;
int count = chars.count();
QString string = translateKeySym(sym, state, qtcode, modifiers, chars, count);
+
+ if (inputContext) {
+ QKeyEvent event(type, qtcode, modifiers, string);
+ event.setTimestamp(time);
+ bool retval = inputContext->filterEvent(&event);
+ if (retval)
+ return;
+ }
+
QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers,
code, 0, state, string.left(count));
}