Core: Never call QMainWindow::menuBar()

It replaces the global menu bar on macOS (that is a QMenuBar(nullptr))
with a window specific menu bar, resulting in an empty menu bar for Qt
Creator.

Amends a6e779606d

Change-Id: Id6e2c0b9b2dfe4ade88af0f9a6d3b008fed790be
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Eike Ziller
2023-09-08 14:36:32 +02:00
parent 6998bf6591
commit 2adebd0eb4

View File

@@ -526,6 +526,11 @@ void MainWindow::registerDefaultContainers()
ac->touchBar()->setApplicationTouchBar();
}
static QMenuBar *globalMenuBar()
{
return ActionManager::actionContainer(Constants::MENU_BAR)->menuBar();
}
void MainWindow::registerDefaultActions()
{
ActionContainer *mfile = ActionManager::actionContainer(Constants::M_FILE);
@@ -836,12 +841,12 @@ void MainWindow::registerDefaultActions()
m_toggleRightSideBarButton->setEnabled(false);
// Show Menubar Action
if (menuBar() && !menuBar()->isNativeMenuBar()) {
if (globalMenuBar() && !globalMenuBar()->isNativeMenuBar()) {
m_toggleMenubarAction = new QAction(Tr::tr("Show Menubar"), this);
m_toggleMenubarAction->setCheckable(true);
cmd = ActionManager::registerAction(m_toggleMenubarAction, Constants::TOGGLE_MENUBAR);
cmd->setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Alt+M")));
connect(m_toggleMenubarAction, &QAction::toggled, this, [this, cmd](bool visible) {
connect(m_toggleMenubarAction, &QAction::toggled, this, [cmd](bool visible) {
if (!visible) {
CheckableMessageBox::information(
Core::ICore::dialogParent(),
@@ -851,7 +856,7 @@ void MainWindow::registerDefaultActions()
+ cmd->keySequence().toString(QKeySequence::NativeText),
QString("ToogleMenuBarHint"));
}
menuBar()->setVisible(visible);
globalMenuBar()->setVisible(visible);
});
mview->addAction(cmd, Constants::G_VIEW_VIEWS);
}
@@ -1207,10 +1212,10 @@ void MainWindow::readSettings()
updateModeSelectorStyleMenu();
}
if (menuBar() && !menuBar()->isNativeMenuBar()) {
if (globalMenuBar() && !globalMenuBar()->isNativeMenuBar()) {
const bool isVisible = settings->value(menubarVisibleKey, true).toBool();
menuBar()->setVisible(isVisible);
globalMenuBar()->setVisible(isVisible);
if (m_toggleMenubarAction)
m_toggleMenubarAction->setChecked(isVisible);
}
@@ -1233,8 +1238,8 @@ void MainWindow::saveSettings()
StyleHelper::requestedBaseColor(),
QColor(StyleHelper::DEFAULT_BASE_COLOR));
if (menuBar() && !menuBar()->isNativeMenuBar())
settings->setValue(menubarVisibleKey, menuBar()->isVisible());
if (globalMenuBar() && !globalMenuBar()->isNativeMenuBar())
settings->setValue(menubarVisibleKey, globalMenuBar()->isVisible());
settings->endGroup();