From 2e69015d74a903d7319dec164214b9f443980a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Fri, 26 Apr 2013 09:32:01 +0200 Subject: Increase the loopLevel when activating menu items. Apply 0293aff5c44202e5c62e229b74d8bd0bf9206185 from Qt 4. Without this, calls to deleteLater() may create delete later events with a loopLevel of 1. Those events will not be processed until QApplication::exec() returns. Add a QScopedLoopLevelCounter that increases the loopLevel for the duration of the activated() call. Task-number: QTBUG-30660 Change-Id: I7ab3bb3a53243691b8f7f64e025150e5cc7da2c8 Reviewed-by: Gabriel de Dietrich --- src/plugins/platforms/cocoa/qcocoamenu.mm | 3 +++ src/plugins/platforms/cocoa/qcocoamenuloader.mm | 3 +++ 2 files changed, 6 insertions(+) (limited to 'src') diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index 59172a24c6..565c77fd44 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -45,6 +45,8 @@ #include "qcocoaautoreleasepool.h" #include +#include +#include #include "qcocoaapplication.h" #include "qcocoamenuloader.h" #include "qcocoawindow.h" @@ -110,6 +112,7 @@ static inline QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *getMenuLoader() - (void) itemFired:(NSMenuItem*) item { QCocoaMenuItem *cocoaItem = reinterpret_cast([item tag]); + QScopedLoopLevelCounter loopLevelCounter(QGuiApplicationPrivate::instance()->threadData); cocoaItem->activated(); } diff --git a/src/plugins/platforms/cocoa/qcocoamenuloader.mm b/src/plugins/platforms/cocoa/qcocoamenuloader.mm index 4fb7969ff4..62b722d2d2 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuloader.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuloader.mm @@ -47,10 +47,12 @@ #include "qcocoamenuitem.h" #include +#include #include #include #include #include +#include QT_FORWARD_DECLARE_CLASS(QCFString) QT_FORWARD_DECLARE_CLASS(QString) @@ -305,6 +307,7 @@ QT_END_NAMESPACE if ([item tag]) { QCocoaMenuItem *cocoaItem = reinterpret_cast([item tag]); + QScopedLoopLevelCounter loopLevelCounter(QGuiApplicationPrivate::instance()->threadData); cocoaItem->activated(); } } -- cgit v1.2.3