Raise loopLevel for deleteLater in event filters
authorJohn Stanley <jpsinthemix@verizon.net>
Fri, 10 Feb 2012 21:34:29 +0000 (16:34 -0500)
committerQt by Nokia <qt-info@nokia.com>
Sat, 11 Feb 2012 00:19:49 +0000 (01:19 +0100)
Change-Id: Ibd0cd2a2efbcb13a54fe8ba055e7243c0c01b26e
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
src/corelib/kernel/qabstracteventdispatcher.cpp

index 0348faf..3075eab 100644 (file)
@@ -413,8 +413,12 @@ QAbstractEventDispatcher::EventFilter QAbstractEventDispatcher::setEventFilter(E
 bool QAbstractEventDispatcher::filterEvent(void *message)
 {
     Q_D(QAbstractEventDispatcher);
-    if (d->event_filter)
+    if (d->event_filter) {
+        // Raise the loopLevel so that deleteLater() calls in or triggered
+        // by event_filter() will be processed from the main event loop.
+        QScopedLoopLevelCounter loopLevelCounter(d->threadData);
         return d->event_filter(message);
+    }
     return false;
 }