@ -894,6 +894,8 @@ void GMainWindow::ConnectMenuEvents() {
connect ( ui . action_Open_FAQ , & QAction : : triggered , this , & GMainWindow : : OnOpenFAQ ) ;
connect ( ui . action_Restart , & QAction : : triggered , this , [ this ] { BootGame ( QString ( game_path ) ) ; } ) ;
connect ( ui . action_Configure , & QAction : : triggered , this , & GMainWindow : : OnConfigure ) ;
connect ( ui . action_Configure_Current_Game , & QAction : : triggered , this ,
& GMainWindow : : OnConfigurePerGame ) ;
// View
connect ( ui . action_Single_Window_Mode , & QAction : : triggered , this ,
@ -1167,6 +1169,7 @@ void GMainWindow::ShutdownGame() {
ui . action_Pause - > setEnabled ( false ) ;
ui . action_Stop - > setEnabled ( false ) ;
ui . action_Restart - > setEnabled ( false ) ;
ui . action_Configure_Current_Game - > setEnabled ( false ) ;
ui . action_Report_Compatibility - > setEnabled ( false ) ;
ui . action_Load_Amiibo - > setEnabled ( false ) ;
ui . action_Capture_Screenshot - > setEnabled ( false ) ;
@ -1718,26 +1721,7 @@ void GMainWindow::OnGameListOpenPerGameProperties(const std::string& file) {
return ;
}
ConfigurePerGame dialog ( this , title_id ) ;
dialog . LoadFromFile ( v_file ) ;
auto result = dialog . exec ( ) ;
if ( result = = QDialog : : Accepted ) {
dialog . ApplyConfiguration ( ) ;
const auto reload = UISettings : : values . is_game_list_reload_pending . exchange ( false ) ;
if ( reload ) {
game_list - > PopulateAsync ( UISettings : : values . game_dirs ) ;
}
// Do not cause the global config to write local settings into the config file
Settings : : RestoreGlobalState ( ) ;
if ( ! Core : : System : : GetInstance ( ) . IsPoweredOn ( ) ) {
config - > Save ( ) ;
}
} else {
Settings : : RestoreGlobalState ( ) ;
}
OpenPerGameConfiguration ( title_id , file ) ;
}
void GMainWindow : : OnMenuLoadFile ( ) {
@ -2066,6 +2050,7 @@ void GMainWindow::OnStartGame() {
ui . action_Pause - > setEnabled ( true ) ;
ui . action_Stop - > setEnabled ( true ) ;
ui . action_Restart - > setEnabled ( true ) ;
ui . action_Configure_Current_Game - > setEnabled ( true ) ;
ui . action_Report_Compatibility - > setEnabled ( true ) ;
discord_rpc - > Update ( ) ;
@ -2255,6 +2240,36 @@ void GMainWindow::OnConfigure() {
UpdateStatusButtons ( ) ;
}
void GMainWindow : : OnConfigurePerGame ( ) {
const u64 title_id = Core : : System : : GetInstance ( ) . CurrentProcess ( ) - > GetTitleID ( ) ;
OpenPerGameConfiguration ( title_id , game_path . toStdString ( ) ) ;
}
void GMainWindow : : OpenPerGameConfiguration ( u64 title_id , const std : : string & file_name ) {
const auto v_file = Core : : GetGameFileFromPath ( vfs , file_name ) ;
ConfigurePerGame dialog ( this , title_id ) ;
dialog . LoadFromFile ( v_file ) ;
auto result = dialog . exec ( ) ;
if ( result = = QDialog : : Accepted ) {
dialog . ApplyConfiguration ( ) ;
const auto reload = UISettings : : values . is_game_list_reload_pending . exchange ( false ) ;
if ( reload ) {
game_list - > PopulateAsync ( UISettings : : values . game_dirs ) ;
}
// Do not cause the global config to write local settings into the config file
Settings : : RestoreGlobalState ( ) ;
if ( ! Core : : System : : GetInstance ( ) . IsPoweredOn ( ) ) {
config - > Save ( ) ;
}
} else {
Settings : : RestoreGlobalState ( ) ;
}
}
void GMainWindow : : OnLoadAmiibo ( ) {
const QString extensions { QStringLiteral ( " *.bin " ) } ;
const QString file_filter = tr ( " Amiibo File (%1);; All Files (*.*) " ) . arg ( extensions ) ;