diff options
Diffstat (limited to '0001-Add-a-way-to-filter-window-system-events.patch')
-rw-r--r-- | 0001-Add-a-way-to-filter-window-system-events.patch | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/0001-Add-a-way-to-filter-window-system-events.patch b/0001-Add-a-way-to-filter-window-system-events.patch new file mode 100644 index 000000000000..58de8ad00666 --- /dev/null +++ b/0001-Add-a-way-to-filter-window-system-events.patch @@ -0,0 +1,117 @@ +From 28e39706a1a922d5c1054ad3243bac8b2708dc56 Mon Sep 17 00:00:00 2001 +From: Giulio Camuffo <giulio.camuffo@jollamobile.com> +Date: Wed, 22 Apr 2015 13:39:39 +0300 +Subject: [PATCH] Add a way to filter window system events + +This change introduces the class QWindowSystemEventHandler +which can be used to hook into QWindowSystemInterfacePrivate to +filter and dispatch window system events. +One use case is to intercept key events from the underlying system +in QtCompositor and feed them into the xkbcommon state, and to modify +the events based on the resulting state. + +Change-Id: I829eb7d960420135990fb0f6db54c14eea3e8e48 +Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com> +Reviewed-by: Gunnar Sletta <gunnar@sletta.org> +--- + src/gui/kernel/qwindowsysteminterface.cpp | 34 +++++++++++++++++++++++++++++-- + src/gui/kernel/qwindowsysteminterface_p.h | 13 ++++++++++++ + 2 files changed, 45 insertions(+), 2 deletions(-) + +diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp +index 850b69d..2ea1ccd 100644 +--- a/src/gui/kernel/qwindowsysteminterface.cpp ++++ b/src/gui/kernel/qwindowsysteminterface.cpp +@@ -48,6 +48,7 @@ QElapsedTimer QWindowSystemInterfacePrivate::eventTime; + bool QWindowSystemInterfacePrivate::synchronousWindowsSystemEvents = false; + QWaitCondition QWindowSystemInterfacePrivate::eventsFlushed; + QMutex QWindowSystemInterfacePrivate::flushEventMutex; ++QWindowSystemEventHandler *QWindowSystemInterfacePrivate::eventHandler; + + //------------------------------------------------------------ + // +@@ -621,14 +622,32 @@ bool QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::ProcessEventsFla + QWindowSystemInterfacePrivate::getWindowSystemEvent(); + if (!event) + break; +- nevents++; +- QGuiApplicationPrivate::processWindowSystemEvent(event); ++ ++ if (QWindowSystemInterfacePrivate::eventHandler) { ++ if (QWindowSystemInterfacePrivate::eventHandler->sendEvent(event)) ++ nevents++; ++ } else { ++ nevents++; ++ QGuiApplicationPrivate::processWindowSystemEvent(event); ++ } + delete event; + } + + return (nevents > 0); + } + ++void QWindowSystemInterfacePrivate::installWindowSystemEventHandler(QWindowSystemEventHandler *handler) ++{ ++ if (!eventHandler) ++ eventHandler = handler; ++} ++ ++void QWindowSystemInterfacePrivate::removeWindowSystemEventhandler(QWindowSystemEventHandler *handler) ++{ ++ if (eventHandler == handler) ++ eventHandler = 0; ++} ++ + void QWindowSystemInterface::setSynchronousWindowsSystemEvents(bool enable) + { + QWindowSystemInterfacePrivate::synchronousWindowsSystemEvents = enable; +@@ -852,4 +871,15 @@ Q_GUI_EXPORT void qt_handleTouchEvent(QWindow *w, QTouchDevice *device, + QWindowSystemInterface::handleTouchEvent(w, device, touchPointList(points), mods); + } + ++QWindowSystemEventHandler::~QWindowSystemEventHandler() ++{ ++ QWindowSystemInterfacePrivate::removeWindowSystemEventhandler(this); ++} ++ ++bool QWindowSystemEventHandler::sendEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e) ++{ ++ QGuiApplicationPrivate::processWindowSystemEvent(e); ++ return true; ++} ++ + QT_END_NAMESPACE +diff --git a/src/gui/kernel/qwindowsysteminterface_p.h b/src/gui/kernel/qwindowsysteminterface_p.h +index 2ec402a..f51c726 100644 +--- a/src/gui/kernel/qwindowsysteminterface_p.h ++++ b/src/gui/kernel/qwindowsysteminterface_p.h +@@ -54,6 +54,8 @@ + + QT_BEGIN_NAMESPACE + ++class QWindowSystemEventHandler; ++ + class Q_GUI_EXPORT QWindowSystemInterfacePrivate { + public: + enum EventType { +@@ -487,6 +489,17 @@ public: + static QMutex flushEventMutex; + + static QList<QTouchEvent::TouchPoint> convertTouchPoints(const QList<QWindowSystemInterface::TouchPoint> &points, QEvent::Type *type); ++ ++ static void installWindowSystemEventHandler(QWindowSystemEventHandler *handler); ++ static void removeWindowSystemEventhandler(QWindowSystemEventHandler *handler); ++ static QWindowSystemEventHandler *eventHandler; ++}; ++ ++class Q_GUI_EXPORT QWindowSystemEventHandler ++{ ++public: ++ virtual ~QWindowSystemEventHandler(); ++ virtual bool sendEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *event); + }; + + QT_END_NAMESPACE +-- +2.6.4 + |