diff options
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoamenubar.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenubar.mm | 69 |
1 files changed, 4 insertions, 65 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index 61ac5eb7f0..871cf10e8a 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -79,14 +79,13 @@ QCocoaMenuBar::~QCocoaMenuBar() static_menubars.removeOne(this); if (!m_window.isNull() && m_window->menubar() == this) { - m_window->setMenubar(0); + m_window->setMenubar(nullptr); // Delete the children first so they do not cause // the native menu items to be hidden after // the menu bar was updated qDeleteAll(children()); updateMenuBarImmediately(); - resetKnownMenuItemsToQt(); } } @@ -230,7 +229,7 @@ void QCocoaMenuBar::handleReparent(QWindow *newParentWindow) if (!m_window.isNull()) m_window->setMenubar(nullptr); - if (newParentWindow == nullptr) { + if (!newParentWindow) { m_window.clear(); } else { newParentWindow->create(); @@ -259,73 +258,13 @@ QCocoaMenuBar *QCocoaMenuBar::findGlobalMenubar() return NULL; } -void QCocoaMenuBar::redirectKnownMenuItemsToFirstResponder() -{ - // QTBUG-17291: http://forums.macrumors.com/showthread.php?t=1249452 - // When a dialog is opened, shortcuts for actions inside the dialog (cut, paste, ...) - // continue to go through the same menu items which claimed those shortcuts. - // They are not keystrokes which we can intercept in any other way; the OS intercepts them. - // The menu items had to be created by the application. That's why we need roles - // to identify those "special" menu items which can be useful even when non-Qt - // native widgets are in focus. When the native widget is focused it will be the - // first responder, so the menu item needs to have its target be the first responder; - // this is done by setting it to nil. - - // This function will find all menu items on all menus which have - // "special" roles, set the target and also set the standard actions which - // apply to those roles. But afterwards it is necessary to call - // resetKnownMenuItemsToQt() to put back the target and action so that - // those menu items will go back to invoking their associated QActions. - foreach (QCocoaMenuBar *mb, static_menubars) - foreach (QCocoaMenu *m, mb->m_menus) - foreach (QCocoaMenuItem *i, m->items()) { - bool known = true; - switch (i->effectiveRole()) { - case QPlatformMenuItem::CutRole: - [i->nsItem() setAction:@selector(cut:)]; - break; - case QPlatformMenuItem::CopyRole: - [i->nsItem() setAction:@selector(copy:)]; - break; - case QPlatformMenuItem::PasteRole: - [i->nsItem() setAction:@selector(paste:)]; - break; - case QPlatformMenuItem::SelectAllRole: - [i->nsItem() setAction:@selector(selectAll:)]; - break; - // We may discover later that there are other roles/actions which - // are meaningful to standard native widgets; they can be added. - default: - known = false; - break; - } - if (known) - [i->nsItem() setTarget:nil]; - } -} - -void QCocoaMenuBar::resetKnownMenuItemsToQt() -{ - // Undo the effect of redirectKnownMenuItemsToFirstResponder(): - // reset the menu items' target/action. - foreach (QCocoaMenuBar *mb, static_menubars) { - foreach (QCocoaMenu *m, mb->m_menus) { - foreach (QCocoaMenuItem *i, m->items()) { - if (i->effectiveRole() >= QPlatformMenuItem::ApplicationSpecificRole) { - m->setItemTargetAction(i); - } - } - } - } -} - void QCocoaMenuBar::updateMenuBarImmediately() { QMacAutoReleasePool pool; QCocoaMenuBar *mb = findGlobalMenubar(); QCocoaWindow *cw = findWindowForMenubar(); - QWindow *win = cw ? cw->window() : 0; + QWindow *win = cw ? cw->window() : nullptr; if (win && (win->flags() & Qt::Popup) == Qt::Popup) { // context menus, comboboxes, etc. don't need to update the menubar, // but if an application has only Qt::Tool window(s) on start, @@ -438,7 +377,7 @@ QPlatformMenu *QCocoaMenuBar::menuForTag(quintptr tag) const return menu; } - return 0; + return nullptr; } NSMenuItem *QCocoaMenuBar::itemForRole(QPlatformMenuItem::MenuRole r) |