diff options
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r-- | src/plugins/platforms/qnx/qqnxbpseventfilter.cpp | 22 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxbpseventfilter.h | 6 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowscontext.cpp | 39 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowscontext.h | 3 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsintegration.cpp | 2 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbconnection.cpp | 7 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 16 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbnativeinterface.h | 8 |
8 files changed, 13 insertions, 90 deletions
diff --git a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp index 93bb2d3584..4ce38b9fdc 100644 --- a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp +++ b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp @@ -90,13 +90,7 @@ void QQnxBpsEventFilter::installOnEventDispatcher(QAbstractEventDispatcher *disp if (navigator_request_events(0) != BPS_SUCCESS) qWarning("QQNX: failed to register for navigator events"); - QAbstractEventDispatcher::EventFilter previousEventFilter = dispatcher->setEventFilter(dispatcherEventFilter); - - // the QPA plugin creates the event dispatcher so we are the first event - // filter assert on that just in case somebody adds another event filter - // in the QQnxIntegration constructor instead of adding a new section in here - Q_ASSERT(previousEventFilter == 0); - Q_UNUSED(previousEventFilter); + dispatcher->installNativeEventFilter(this); } void QQnxBpsEventFilter::registerForScreenEvents(QQnxScreen *screen) @@ -137,19 +131,11 @@ void QQnxBpsEventFilter::unregisterForDialogEvents(QQnxFileDialogHelper *dialog) qWarning("QQNX: attempting to unregister dialog that was not registered"); } -bool QQnxBpsEventFilter::dispatcherEventFilter(void *message) +bool QQnxBpsEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result) { - qBpsEventFilterDebug() << Q_FUNC_INFO; - - if (s_instance == 0) - return false; - + Q_UNUSED(eventType); + Q_UNUSED(result); bps_event_t *event = static_cast<bps_event_t *>(message); - return s_instance->bpsEventFilter(event); -} - -bool QQnxBpsEventFilter::bpsEventFilter(bps_event_t *event) -{ const int eventDomain = bps_event_get_domain(event); qBpsEventFilterDebug() << Q_FUNC_INFO << "event=" << event << "domain=" << eventDomain; diff --git a/src/plugins/platforms/qnx/qqnxbpseventfilter.h b/src/plugins/platforms/qnx/qqnxbpseventfilter.h index aafca0f989..164cb0291b 100644 --- a/src/plugins/platforms/qnx/qqnxbpseventfilter.h +++ b/src/plugins/platforms/qnx/qqnxbpseventfilter.h @@ -44,6 +44,7 @@ #include <QObject> #include <QHash> +#include <QAbstractNativeEventFilter> #include <bps/dialog.h> @@ -58,7 +59,7 @@ class QQnxScreen; class QQnxScreenEventHandler; class QQnxVirtualKeyboardBps; -class QQnxBpsEventFilter : public QObject +class QQnxBpsEventFilter : public QObject, public QAbstractNativeEventFilter { Q_OBJECT public: @@ -76,8 +77,7 @@ public: void unregisterForDialogEvents(QQnxFileDialogHelper *dialog); private: - static bool dispatcherEventFilter(void *message); - bool bpsEventFilter(bps_event_t *event); + bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE; bool handleNavigatorEvent(bps_event_t *event); diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 37493fe3db..b12975174f 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -240,13 +240,6 @@ QWindowsContext *QWindowsContext::m_instance = 0; typedef QHash<HWND, QWindowsWindow *> HandleBaseWindowHash; struct QWindowsContextPrivate { - typedef QPlatformNativeInterface::EventFilter EventFilter; - - enum EventFilterType - { - GenericWindowsEventFilter, - EventFilterTypeCount - }; QWindowsContextPrivate(); @@ -262,7 +255,6 @@ struct QWindowsContextPrivate { QSharedPointer<QWindowCreationContext> m_creationContext; const HRESULT m_oleInitializeResult; const QByteArray m_eventType; - EventFilter m_eventFilters[EventFilterTypeCount]; QWindow *m_lastActiveWindow; }; @@ -289,7 +281,6 @@ QWindowsContextPrivate::QWindowsContextPrivate() : m_systemInfo |= QWindowsContext::SI_RTL_Extensions; m_keyMapper.setUseRTLExtensions(true); } - qFill(m_eventFilters, m_eventFilters + EventFilterTypeCount, EventFilter(0)); } QWindowsContext::QWindowsContext() : @@ -695,27 +686,6 @@ QByteArray QWindowsContext::comErrorString(HRESULT hr) } /*! - \brief Set event filter. - - \sa QWindowsNativeInterface -*/ - -QWindowsContext::EventFilter QWindowsContext::setEventFilter(const QByteArray &eventType, EventFilter filter) -{ - int eventFilterType = -1; - if (eventType == d->m_eventType) - eventFilterType = QWindowsContextPrivate::GenericWindowsEventFilter; - if (eventFilterType < 0) { - qWarning("%s: Attempt to set unsupported event filter '%s'.", - __FUNCTION__, eventType.constData()); - return 0; - } - const EventFilter previous = d->m_eventFilters[eventFilterType]; - d->m_eventFilters[eventFilterType] = filter; - return previous; -} - -/*! \brief Main windows procedure registered for windows. \sa QWindowsGuiEventDispatcher @@ -736,11 +706,10 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, msg.pt.y = GET_Y_LPARAM(lParam); long filterResult = 0; - if (d->m_eventFilters[QWindowsContextPrivate::GenericWindowsEventFilter]) { - if (d->m_eventFilters[QWindowsContextPrivate::GenericWindowsEventFilter](&msg, &filterResult)) { - *result = LRESULT(filterResult); - return true; - } + QCoreApplication* coreApp = QCoreApplication::instance(); + if (coreApp && coreApp->filterNativeEvent(d->m_eventType, &msg, &filterResult)) { + *result = LRESULT(filterResult); + return true; } // Events without an associated QWindow or events we are not interested in. switch (et) { diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h index 0b18196abe..e4fde55464 100644 --- a/src/plugins/platforms/windows/qwindowscontext.h +++ b/src/plugins/platforms/windows/qwindowscontext.h @@ -107,7 +107,6 @@ class QWindowsContext { Q_DISABLE_COPY(QWindowsContext) public: - typedef bool (*EventFilter)(void *message, long *result); enum SystemInfoFlags { @@ -143,8 +142,6 @@ public: HDC displayContext() const; int screenDepth() const; - EventFilter setEventFilter(const QByteArray &eventType, EventFilter filter); - static QWindowsContext *instance(); static QString windowsErrorMessage(unsigned long errorCode); diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 1ff142bc98..f32f8cd689 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -102,8 +102,6 @@ public: #endif virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window); virtual void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs); - virtual EventFilter setEventFilter(const QByteArray &eventType, EventFilter filter) - { return QWindowsContext::instance()->setEventFilter(eventType, filter); } Q_INVOKABLE void *createMessageWindow(const QString &classNameTemplate, const QString &windowName, diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index b808a74a83..7f197c8ad5 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -270,7 +270,6 @@ QXcbWindow *QXcbConnection::platformWindowFromId(xcb_window_t id) { \ event_t *e = (event_t *)event; \ if (QXcbWindow *platformWindow = platformWindowFromId(e->windowMember)) { \ - long result = 0; \ handled = QWindowSystemInterface::handleNativeEvent(platformWindow->window(), m_nativeInterface->genericEventFilterType(), event, &result); \ if (!handled) \ platformWindow->handler(e); \ @@ -282,7 +281,6 @@ break; { \ event_t *e = (event_t *)event; \ if (QXcbWindow *platformWindow = platformWindowFromId(e->event)) { \ - long result = 0; \ handled = QWindowSystemInterface::handleNativeEvent(platformWindow->window(), m_nativeInterface->genericEventFilterType(), event, &result); \ if (!handled) \ m_keyboard->handler(platformWindow, e); \ @@ -543,10 +541,9 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event) m_callLog.remove(0, i); } #endif - bool handled = false; - if (QPlatformNativeInterface::EventFilter filter = m_nativeInterface->eventFilter(QXcbNativeInterface::GenericEventFilter)) - handled = filter(event, 0); + long result = 0; + bool handled = QCoreApplication::instance()->filterNativeEvent(m_nativeInterface->genericEventFilterType(), event, &result); uint response_type = event->response_type & ~0x80; diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp index a6647da8be..2948ee6aae 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -80,7 +80,6 @@ QXcbNativeInterface::QXcbNativeInterface() : m_genericEventFilterType(QByteArrayLiteral("xcb_generic_event_t")) { - qFill(m_eventFilters, m_eventFilters + EventFilterCount, EventFilter(0)); } void *QXcbNativeInterface::nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context) @@ -142,21 +141,6 @@ QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterface:: return 0; } -QPlatformNativeInterface::EventFilter QXcbNativeInterface::setEventFilter(const QByteArray &eventType, QPlatformNativeInterface::EventFilter filter) -{ - int type = -1; - if (eventType == m_genericEventFilterType) - type = GenericEventFilter; - if (type == -1) { - qWarning("QXcbNativeInterface: %s: Attempt to set invalid event filter type '%s'.", - Q_FUNC_INFO, eventType.constData()); - return 0; - } - const EventFilter oldFilter = m_eventFilters[type]; - m_eventFilters[type] = filter; - return oldFilter; -} - QXcbScreen *QXcbNativeInterface::qPlatformScreenForWindow(QWindow *window) { QXcbScreen *screen; diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index 8221d9a36b..c91b4d7e88 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -61,11 +61,6 @@ public: EglContext }; - enum EventFilterType { - GenericEventFilter, - EventFilterCount - }; - QXcbNativeInterface(); void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context); @@ -74,8 +69,6 @@ public: NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource); inline const QByteArray &genericEventFilterType() const { return m_genericEventFilterType; } - EventFilter setEventFilter(const QByteArray &eventType, EventFilter filter); - EventFilter eventFilter(EventFilterType type) const { return m_eventFilters[type]; } void *displayForWindow(QWindow *window); void *eglDisplayForWindow(QWindow *window); @@ -86,7 +79,6 @@ public: private: const QByteArray m_genericEventFilterType; - EventFilter m_eventFilters[EventFilterCount]; static QXcbScreen *qPlatformScreenForWindow(QWindow *window); }; |