Remove winEventFilter, replaced with installNativeEventFilter.

No reason to keep a virtual method for Windows when all other similar methods
(macEvent and x11Event) have been removed, and when installNativeEventFilter
provides a much nicer solution (no need to derive from QApplication).

Change-Id: Ia2a7960e320fcbd04cef91f467900861dbb377c1
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
bb10
David Faure 2012-07-20 20:52:44 +02:00 committed by Qt by Nokia
parent 607c37befb
commit 42c86bba9d
7 changed files with 8 additions and 63 deletions

2
dist/changes-5.0.0 vendored
View File

@ -390,7 +390,7 @@ QtCore
* The enum values simply didn't make sense in the first place and should simply be dropped.
* Filtering of native events (QCoreApplication::setEventFilter, as well as
QApplication::x11EventFilter/macEventFilter/qwsEventFilter) have been replaced
QApplication::x11EventFilter/macEventFilter/qwsEventFilter/winEventFilter) have been replaced
with QCoreApplication::installNativeEventFilter and removeNativeEventFilter,
for an API much closer to QEvent filtering. Note that the native events that can be
filtered this way depend on which QPA backend is chosen, at runtime. On X11, XEvents are

View File

@ -2138,42 +2138,6 @@ void QCoreApplication::removeLibraryPath(const QString &path)
#endif //QT_NO_LIBRARY
/*!
Sends \a message through the event filters that were set by
installNativeEventFilter(). This function returns true as soon as an
event filter returns true, and false otherwise to indicate that
the processing of the event should continue.
Subclasses of QAbstractEventDispatcher \e must call this function
for \e all messages received from the system to ensure
compatibility with any extensions that may be used in the
application.
Note that the type of \a message is platform dependent. See
QAbstractNativeEventFilter for details.
\sa installNativeEventFilter()
\since 5.0
\internal
This method only exists for the Windows event dispatcher to call the winEventFilter virtual.
Every other platform can just use QAbstractNativeEventFilter::filterNativeEvent directly.
*/
bool QCoreApplication::filterNativeEvent(const QByteArray &eventType, void *message, long *result)
{
if (result)
*result = 0;
#ifdef Q_OS_WIN
if (winEventFilter(reinterpret_cast<MSG *>(message), result))
return true;
#endif
QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance();
if (dispatcher)
return dispatcher->filterNativeEvent(eventType, message, result);
return false;
}
/*!
Installs an event filter \a filterObj for all native events
received by the application in the main thread.

View File

@ -152,17 +152,12 @@ public:
static void flush();
#if defined(Q_OS_WIN)
virtual bool winEventFilter(MSG *message, long *result);
#endif
#if defined(Q_OS_UNIX)
static void watchUnixSignal(int signal, bool watch);
#endif
void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj);
bool filterNativeEvent(const QByteArray &eventType, void *message, long *result);
static bool isQuitLockEnabled();
static void setQuitLockEnabled(bool enabled);

View File

@ -157,21 +157,6 @@ void qWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdParam,
Q_UNUSED(prevInstance);
}
/*!
The message procedure calls this function for every message
received. Reimplement this function if you want to process window
messages \a msg that are not processed by Qt. If you don't want
the event to be processed by Qt, then return true and set \a result
to the value that the window procedure should return. Otherwise
return false.
*/
bool QCoreApplication::winEventFilter(MSG *msg, long *result) // Windows event filter
{
Q_UNUSED(msg);
Q_UNUSED(result);
return false;
}
void QCoreApplicationPrivate::removePostedTimerEvent(QObject *object, int timerId)
{
QThreadData *data = object->d_func()->threadData;

View File

@ -353,13 +353,13 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA
msg.message = message;
msg.wParam = wp;
msg.lParam = lp;
QCoreApplication *app = QCoreApplication::instance();
QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance();
long result;
if (!app) {
if (!dispatcher) {
if (message == WM_TIMER)
KillTimer(hwnd, wp);
return 0;
} else if (app->filterNativeEvent(QByteArrayLiteral("windows_dispatcher_MSG"), &msg, &result)) {
} else if (dispatcher->filterNativeEvent(QByteArrayLiteral("windows_dispatcher_MSG"), &msg, &result)) {
return result;
}

View File

@ -706,8 +706,8 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
msg.pt.y = GET_Y_LPARAM(lParam);
long filterResult = 0;
QCoreApplication* coreApp = QCoreApplication::instance();
if (coreApp && coreApp->filterNativeEvent(d->m_eventType, &msg, &filterResult)) {
QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance();
if (dispatcher && dispatcher->filterNativeEvent(d->m_eventType, &msg, &filterResult)) {
*result = LRESULT(filterResult);
return true;
}

View File

@ -543,7 +543,8 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
#endif
long result = 0;
bool handled = QCoreApplication::instance()->filterNativeEvent(m_nativeInterface->genericEventFilterType(), event, &result);
QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance();
bool handled = dispatcher && dispatcher->filterNativeEvent(m_nativeInterface->genericEventFilterType(), event, &result);
uint response_type = event->response_type & ~0x80;