From 2c686e47b756a95e3553236f0e3fa7b211f19d90 Mon Sep 17 00:00:00 2001 From: Axel Spoerl Date: Tue, 3 Jun 2025 15:39:03 +0200 Subject: [PATCH] QCocoaMenu: Explicitly remove NSMenu from supermenu on destruction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The d'tor of QCocoaMenu calls dismiss() to remove the current menu. dismiss() calls cancelTracking, which doesn't always remove the menu from its parent. Remove the menu from its parent in addition. Fixes: QTBUG-135634 Pick-to: 6.8 6.5 Change-Id: Ic8e9b4172c3b2035b7e9ad1b576725923987abf2 Reviewed-by: Tor Arne Vestbø (cherry picked from commit 36ebec92e81fb8ee7d965ad1a84221d6c779f562) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit 641422686dc82627af829a405c4af570d78ab8cc) --- src/plugins/platforms/cocoa/qcocoamenu.mm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index 4a51fe9d7c2..03df80b4634 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -44,6 +44,16 @@ QCocoaMenu::~QCocoaMenu() if (isOpen()) dismiss(); + + if (NSMenu *superMenu = m_nativeMenu.supermenu) { + for (NSMenuItem *item in superMenu.itemArray) { + if (item.submenu == m_nativeMenu) { + [superMenu removeItem:item]; + break; + } + } + } + [m_nativeMenu release]; }