diff options
| author | 2020-07-21 06:15:16 -0400 | |
|---|---|---|
| committer | 2020-07-21 06:15:16 -0400 | |
| commit | 37a7155ea7c504b308a8afa642c653a12bbe5f84 (patch) | |
| tree | bd68ea5d2a2400dcd04b1aa85617534e66aba94c /src/lib/platform/MSWindowsEventQueueBuffer.cpp | |
| parent | 1ae09e76cde035d716763fc88b570535884cd50f (diff) | |
| parent | fbc30002ab3438356c0476e70c4577a0310d52c0 (diff) | |
Update upstream source from tag 'upstream/2.3.3+dfsg'
Update to upstream version '2.3.3+dfsg'
with Debian dir f7eeed313bc1a4c2bda69f04f0316ee29651397f
Diffstat (limited to 'src/lib/platform/MSWindowsEventQueueBuffer.cpp')
| -rw-r--r-- | src/lib/platform/MSWindowsEventQueueBuffer.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/lib/platform/MSWindowsEventQueueBuffer.cpp b/src/lib/platform/MSWindowsEventQueueBuffer.cpp index f6de157..3111367 100644 --- a/src/lib/platform/MSWindowsEventQueueBuffer.cpp +++ b/src/lib/platform/MSWindowsEventQueueBuffer.cpp @@ -21,6 +21,7 @@ #include "arch/win32/ArchMiscWindows.h" #include "mt/Thread.h" #include "base/IEventQueue.h" +#include <VersionHelpers.h> // // EventQueueTimer @@ -48,6 +49,15 @@ MSWindowsEventQueueBuffer::MSWindowsEventQueueBuffer(IEventQueue* events) : // make sure this thread has a message queue MSG dummy; PeekMessage(&dummy, NULL, WM_USER, WM_USER, PM_NOREMOVE); + + m_os_supported_message_types = QS_ALLINPUT; + if (!IsWindows8OrGreater()) + { + // don't use QS_POINTER, QS_TOUCH + // because they can cause GetQueueStatus() to always return 0 and we miss events + // since those flags are confusing Windows 7. See QTBUG-29097 for related info + m_os_supported_message_types &= ~(QS_TOUCH | QS_POINTER); + } } MSWindowsEventQueueBuffer::~MSWindowsEventQueueBuffer() @@ -79,7 +89,7 @@ MSWindowsEventQueueBuffer::waitForEvent(double timeout) // cancellation but that's okay because we're run in the main // thread and we never cancel that thread. HANDLE dummy[1]; - MsgWaitForMultipleObjects(0, dummy, FALSE, t, QS_ALLINPUT); + MsgWaitForMultipleObjects(0, dummy, FALSE, t, m_os_supported_message_types); } IEventQueueBuffer::Type @@ -128,9 +138,7 @@ MSWindowsEventQueueBuffer::addEvent(UInt32 dataID) bool MSWindowsEventQueueBuffer::isEmpty() const { - // don't use QS_POINTER, QS_TOUCH, or any meta-flags that include them (like QS_ALLINPUT) - // because they can cause GetQueueStatus() to always return 0 and we miss events - return (HIWORD(GetQueueStatus(QS_POSTMESSAGE)) == 0); + return (HIWORD(GetQueueStatus(m_os_supported_message_types)) == 0); } EventQueueTimer* |
