Windows: Fix QEventLoop::ExcludeUserInputEvents for pointer events

Factor out the check for user input events from
QEventDispatcherWin32::processEvents() to a small
helper and add pointer messages (by value as to avoid MinGW issues).

Task-number: QTBUG-60437
Task-number: QTBUG-69687
Change-Id: I38bf227f862fcc44177a5027cafe1df49a10a919
Reviewed-by: Andre de la Rocha <andre.rocha@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
bb10
Friedemann Kleint 2018-08-01 12:17:41 +02:00
parent abc024eef7
commit b12735f178
1 changed files with 18 additions and 13 deletions

View File

@ -522,6 +522,22 @@ QEventDispatcherWin32::~QEventDispatcherWin32()
{
}
static bool isUserInputMessage(UINT message)
{
return (message >= WM_KEYFIRST && message <= WM_KEYLAST)
|| (message >= WM_MOUSEFIRST && message <= WM_MOUSELAST)
|| message == WM_MOUSEWHEEL
|| message == WM_MOUSEHWHEEL
|| message == WM_TOUCH
#ifndef QT_NO_GESTURES
|| message == WM_GESTURE
|| message == WM_GESTURENOTIFY
#endif
// Pointer input: Exclude WM_NCPOINTERUPDATE .. WM_POINTERROUTEDRELEASED
|| (message >= 0x0241 && message <= 0x0253)
|| message == WM_CLOSE;
}
bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)
{
Q_D(QEventDispatcherWin32);
@ -562,19 +578,8 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)
} else {
haveMessage = PeekMessage(&msg, 0, 0, 0, PM_REMOVE);
if (haveMessage) {
if ((flags & QEventLoop::ExcludeUserInputEvents)
&& ((msg.message >= WM_KEYFIRST
&& msg.message <= WM_KEYLAST)
|| (msg.message >= WM_MOUSEFIRST
&& msg.message <= WM_MOUSELAST)
|| msg.message == WM_MOUSEWHEEL
|| msg.message == WM_MOUSEHWHEEL
|| msg.message == WM_TOUCH
#ifndef QT_NO_GESTURES
|| msg.message == WM_GESTURE
|| msg.message == WM_GESTURENOTIFY
#endif
|| msg.message == WM_CLOSE)) {
if (flags.testFlag(QEventLoop::ExcludeUserInputEvents)
&& isUserInputMessage(msg.message)) {
// queue user input events for later processing
d->queuedUserInputEvents.append(msg);
continue;