Use correct mask constant in the Windows event dispatcher.
Mask out QS_TOUCH, QS_POINTER when running a VS2012-compiled binary on pre-Windows 8 systems. Task-number: QTBUG-32257 Task-number: QTBUG-28513 Task-number: QTBUG-29097 Task-number: QTBUG-29435 Change-Id: I33ce3a659a234cb04d3b5ae9d668d193d681be7f Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
parent
882e01a94f
commit
54f1d7e2e4
@ -430,6 +430,18 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA
|
||||
return DefWindowProc(hwnd, message, wp, lp);
|
||||
}
|
||||
|
||||
static inline UINT inputTimerMask()
|
||||
{
|
||||
UINT result = QS_TIMER | QS_INPUT | QS_RAWINPUT;
|
||||
// QTBUG 28513, QTBUG-29097, QTBUG-29435: QS_TOUCH, QS_POINTER became part of
|
||||
// QS_INPUT in Windows Kit 8. They should not be used when running on pre-Windows 8.
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1700
|
||||
if (QSysInfo::WindowsVersion < QSysInfo::WV_WINDOWS8)
|
||||
result &= ~(QS_TOUCH | QS_POINTER);
|
||||
#endif // _MSC_VER >= 1700
|
||||
return result;
|
||||
}
|
||||
|
||||
LRESULT QT_WIN_CALLBACK qt_GetMessageHook(int code, WPARAM wp, LPARAM lp)
|
||||
{
|
||||
if (wp == PM_REMOVE) {
|
||||
@ -439,7 +451,8 @@ LRESULT QT_WIN_CALLBACK qt_GetMessageHook(int code, WPARAM wp, LPARAM lp)
|
||||
MSG *msg = (MSG *) lp;
|
||||
QEventDispatcherWin32Private *d = q->d_func();
|
||||
const int localSerialNumber = d->serialNumber.load();
|
||||
if (HIWORD(GetQueueStatus(QS_TIMER | QS_INPUT | QS_RAWINPUT)) == 0) {
|
||||
static const UINT mask = inputTimerMask();
|
||||
if (HIWORD(GetQueueStatus(mask)) == 0) {
|
||||
// no more input or timer events in the message queue, we can allow posted events to be sent normally now
|
||||
if (d->sendPostedEventsWindowsTimerId != 0) {
|
||||
// stop the timer to send posted events, since we now allow the WM_QT_SENDPOSTEDEVENTS message
|
||||
|
Loading…
Reference in New Issue
Block a user