Fix and restore macOS native menu (#1111)

* Fix and restore macOS native menu

* Handle menu more elegantly by making norole default

Handle menu roles more universally by making norole default and manually define previously automatically assigned roles
This commit is contained in:
RedBlackAka 2025-06-03 19:12:24 +02:00 committed by GitHub
parent cfe767e301
commit bc1edd1f1a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -389,11 +389,6 @@ GMainWindow::GMainWindow(Core::System& system_)
LOG_INFO(Frontend, "Host Swap: {:.2f} GiB", mem_info.total_swap_memory / f64{1_GiB}); LOG_INFO(Frontend, "Host Swap: {:.2f} GiB", mem_info.total_swap_memory / f64{1_GiB});
UpdateWindowTitle(); UpdateWindowTitle();
#ifdef __APPLE__
// Workaround for https://github.com/azahar-emu/azahar/issues/933
ui->menubar->setNativeMenuBar(false);
#endif
show(); show();
#ifdef ENABLE_QT_UPDATE_CHECKER #ifdef ENABLE_QT_UPDATE_CHECKER
@ -1001,7 +996,9 @@ void GMainWindow::ConnectWidgetEvents() {
} }
void GMainWindow::ConnectMenuEvents() { void GMainWindow::ConnectMenuEvents() {
const auto connect_menu = [&](QAction* action, const auto& event_fn) { const auto connect_menu = [&](QAction* action, const auto& event_fn,
QAction::MenuRole role = QAction::NoRole) {
action->setMenuRole(role);
connect(action, &QAction::triggered, this, event_fn); connect(action, &QAction::triggered, this, event_fn);
// Add actions to this window so that hiding menus in fullscreen won't disable them // Add actions to this window so that hiding menus in fullscreen won't disable them
addAction(action); addAction(action);
@ -1018,7 +1015,7 @@ void GMainWindow::ConnectMenuEvents() {
connect_menu(ui->menu_Boot_Home_Menu->actions().at(region), connect_menu(ui->menu_Boot_Home_Menu->actions().at(region),
[this, region] { OnMenuBootHomeMenu(region); }); [this, region] { OnMenuBootHomeMenu(region); });
} }
connect_menu(ui->action_Exit, &QMainWindow::close); connect_menu(ui->action_Exit, &QMainWindow::close, QAction::QuitRole);
connect_menu(ui->action_Load_Amiibo, &GMainWindow::OnLoadAmiibo); connect_menu(ui->action_Load_Amiibo, &GMainWindow::OnLoadAmiibo);
connect_menu(ui->action_Remove_Amiibo, &GMainWindow::OnRemoveAmiibo); connect_menu(ui->action_Remove_Amiibo, &GMainWindow::OnRemoveAmiibo);
@ -1030,7 +1027,7 @@ void GMainWindow::ConnectMenuEvents() {
QDesktopServices::openUrl(QUrl(QStringLiteral( QDesktopServices::openUrl(QUrl(QStringLiteral(
"https://github.com/azahar-emu/compatibility-list/blob/master/CONTRIBUTING.md"))); "https://github.com/azahar-emu/compatibility-list/blob/master/CONTRIBUTING.md")));
}); });
connect_menu(ui->action_Configure, &GMainWindow::OnConfigure); connect_menu(ui->action_Configure, &GMainWindow::OnConfigure, QAction::PreferencesRole);
connect_menu(ui->action_Configure_Current_Game, &GMainWindow::OnConfigurePerGame); connect_menu(ui->action_Configure_Current_Game, &GMainWindow::OnConfigurePerGame);
// View // View
@ -1094,7 +1091,7 @@ void GMainWindow::ConnectMenuEvents() {
connect_menu(ui->action_FAQ, []() { connect_menu(ui->action_FAQ, []() {
QDesktopServices::openUrl(QUrl(QStringLiteral("https://azahar-emu.org/pages/faq/"))); QDesktopServices::openUrl(QUrl(QStringLiteral("https://azahar-emu.org/pages/faq/")));
}); });
connect_menu(ui->action_About, &GMainWindow::OnMenuAboutCitra); connect_menu(ui->action_About, &GMainWindow::OnMenuAboutCitra, QAction::AboutRole);
} }
void GMainWindow::UpdateMenuState() { void GMainWindow::UpdateMenuState() {