diff options
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface.cpp | 10 | ||||
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface_p.h | 5 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 8c5a3bc215..3609d5dce6 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -527,6 +527,16 @@ void QWindowSystemInterface::deferredFlushWindowSystemEvents() void QWindowSystemInterface::flushWindowSystemEvents() { + const int count = QWindowSystemInterfacePrivate::windowSystemEventQueue.count(); + if (!count) + return; + if (!QGuiApplication::instance()) { + qWarning().nospace() + << "QWindowSystemInterface::flushWindowSystemEvents() invoked after " + "QGuiApplication destruction, discarding " << count << " events."; + QWindowSystemInterfacePrivate::windowSystemEventQueue.clear(); + return; + } if (QThread::currentThread() != QGuiApplication::instance()->thread()) { QMutexLocker locker(&QWindowSystemInterfacePrivate::flushEventMutex); QWindowSystemInterfacePrivate::FlushEventsEvent *e = new QWindowSystemInterfacePrivate::FlushEventsEvent(); diff --git a/src/gui/kernel/qwindowsysteminterface_p.h b/src/gui/kernel/qwindowsysteminterface_p.h index 431b2cbe1e..eca559abfa 100644 --- a/src/gui/kernel/qwindowsysteminterface_p.h +++ b/src/gui/kernel/qwindowsysteminterface_p.h @@ -387,9 +387,10 @@ public: mutable QMutex mutex; public: WindowSystemEventList() : impl(), mutex() {} - ~WindowSystemEventList() - { const QMutexLocker locker(&mutex); qDeleteAll(impl); impl.clear(); } + ~WindowSystemEventList() { clear(); } + void clear() + { const QMutexLocker locker(&mutex); qDeleteAll(impl); impl.clear(); } void prepend(WindowSystemEvent *e) { const QMutexLocker locker(&mutex); impl.prepend(e); } WindowSystemEvent *takeFirstOrReturnNull() |