diff options
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.mm | 32 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenubar.mm | 15 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuitem.mm | 5 |
3 files changed, 42 insertions, 10 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index 6e56d7930a..e4baaab3d3 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -44,6 +44,8 @@ #include "qcocoahelpers.h" #include "qcocoaautoreleasepool.h" +#include <QtCore/QtDebug> + @interface QT_MANGLE_NAMESPACE(QCocoaMenuDelegate) : NSObject <NSMenuDelegate> { QCocoaMenu *m_menu; } @@ -134,7 +136,10 @@ void QCocoaMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem * if (beforeItem) { int index = m_menuItems.indexOf(beforeItem); // if a before item is supplied, it should be in the menu - Q_ASSERT(index >= 0); + if (index < 0) { + qWarning() << Q_FUNC_INFO << "Before menu item not found"; + return; + } m_menuItems.insert(index, cocoaItem); } else { m_menuItems.append(cocoaItem); @@ -152,7 +157,10 @@ void QCocoaMenu::insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem) if (item->isMerged()) return; - Q_ASSERT([item->nsItem() menu] == NULL); + if ([item->nsItem() menu]) { + qWarning() << Q_FUNC_INFO << "Menu item is already in a menu, remove it from the other menu first before inserting"; + return; + } // if the item we're inserting before is merged, skip along until // we find a non-merged real item to insert ahead of. while (beforeItem && beforeItem->isMerged()) { @@ -160,7 +168,10 @@ void QCocoaMenu::insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem) } if (beforeItem) { - Q_ASSERT(!beforeItem->isMerged()); + if (beforeItem->isMerged()) { + qWarning() << Q_FUNC_INFO << "No non-merged before menu item found"; + return; + } NSUInteger nativeIndex = [m_nativeMenu indexOfItem:beforeItem->nsItem()]; [m_nativeMenu insertItem: item->nsItem() atIndex: nativeIndex]; } else { @@ -172,10 +183,16 @@ void QCocoaMenu::removeMenuItem(QPlatformMenuItem *menuItem) { QCocoaAutoReleasePool pool; QCocoaMenuItem *cocoaItem = static_cast<QCocoaMenuItem *>(menuItem); - Q_ASSERT(m_menuItems.contains(cocoaItem)); + if (!m_menuItems.contains(cocoaItem)) { + qWarning() << Q_FUNC_INFO << "Menu does not contain the item to be removed"; + return; + } m_menuItems.removeOne(cocoaItem); if (!cocoaItem->isMerged()) { - Q_ASSERT(m_nativeMenu == [cocoaItem->nsItem() menu]); + if (m_nativeMenu != [cocoaItem->nsItem() menu]) { + qWarning() << Q_FUNC_INFO << "Item to remove does not belong to this menu"; + return; + } [m_nativeMenu removeItem: cocoaItem->nsItem()]; } } @@ -192,7 +209,10 @@ void QCocoaMenu::syncMenuItem(QPlatformMenuItem *menuItem) { QCocoaAutoReleasePool pool; QCocoaMenuItem *cocoaItem = static_cast<QCocoaMenuItem *>(menuItem); - Q_ASSERT(m_menuItems.contains(cocoaItem)); + if (!m_menuItems.contains(cocoaItem)) { + qWarning() << Q_FUNC_INFO << "Item does not belong to this menu"; + return; + } bool wasMerged = cocoaItem->isMerged(); NSMenuItem *oldItem = [m_nativeMenu itemWithTag:(NSInteger) cocoaItem]; diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index c1072df87d..8434cb75e9 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -90,9 +90,15 @@ void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *befor qDebug() << "QCocoaMenuBar" << this << "insertMenu" << menu << "before" << before; #endif - Q_ASSERT(!m_menus.contains(menu)); + if (m_menus.contains(menu)) { + qWarning() << Q_FUNC_INFO << "This menu already belongs to the menubar, remove it first"; + return; + } if (beforeMenu) { - Q_ASSERT(m_menus.contains(beforeMenu)); + if (!m_menus.contains(beforeMenu)) { + qWarning() << Q_FUNC_INFO << "The before menu does not belong to the menubar"; + return; + } m_menus.insert(m_menus.indexOf(beforeMenu), menu); NSUInteger nativeIndex = [m_nativeMenu indexOfItem:beforeMenu->nsMenuItem()]; [m_nativeMenu insertItem: menu->nsMenuItem() atIndex: nativeIndex]; @@ -107,7 +113,10 @@ void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *befor void QCocoaMenuBar::removeMenu(QPlatformMenu *platformMenu) { QCocoaMenu *menu = static_cast<QCocoaMenu *>(platformMenu); - Q_ASSERT(m_menus.contains(menu)); + if (!m_menus.contains(menu)) { + qWarning() << Q_FUNC_INFO << "Trying to remove a menu that does not belong to the menubar"; + return; + } m_menus.removeOne(menu); NSUInteger realIndex = [m_nativeMenu indexOfItem:menu->nsMenuItem()]; diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm index da3ba09283..150d3eef7d 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm @@ -347,7 +347,10 @@ QKeySequence QCocoaMenuItem::mergeAccel() void QCocoaMenuItem::syncMerged() { - Q_ASSERT(m_merged); + if (!m_merged) { + qWarning() << Q_FUNC_INFO << "Trying to sync a non-merged item"; + return; + } [m_native setTag:reinterpret_cast<NSInteger>(this)]; [m_native setHidden: !m_isVisible]; } |