diff options
-rw-r--r-- | src/yuzu/configuration/config.cpp | 4 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.ui | 7 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 21 | ||||
-rw-r--r-- | src/yuzu/main.h | 3 | ||||
-rw-r--r-- | src/yuzu/uisettings.h | 1 |
6 files changed, 38 insertions, 0 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 92d9fb161..0cc3688c2 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -705,6 +705,8 @@ void Config::ReadUIValues() { UISettings::values.callout_flags = ReadSetting(QStringLiteral("calloutFlags"), 0).toUInt(); UISettings::values.show_console = ReadSetting(QStringLiteral("showConsole"), false).toBool(); UISettings::values.profile_index = ReadSetting(QStringLiteral("profileIndex"), 0).toUInt(); + UISettings::values.pause_when_in_background = + ReadSetting(QStringLiteral("pauseWhenInBackground"), false).toBool(); ApplyDefaultProfileIfInputInvalid(); @@ -1103,6 +1105,8 @@ void Config::SaveUIValues() { WriteSetting(QStringLiteral("calloutFlags"), UISettings::values.callout_flags, 0); WriteSetting(QStringLiteral("showConsole"), UISettings::values.show_console, false); WriteSetting(QStringLiteral("profileIndex"), UISettings::values.profile_index, 0); + WriteSetting(QStringLiteral("pauseWhenInBackground"), + UISettings::values.pause_when_in_background, false); qt_config->endGroup(); } diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index 98bc9b391..34e1d7fea 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp @@ -31,6 +31,7 @@ void ConfigureGeneral::SetConfiguration() { ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing); ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot); ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); + ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background); ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit); ui->frame_limit->setEnabled(ui->toggle_frame_limit->isChecked()); @@ -42,6 +43,7 @@ void ConfigureGeneral::ApplyConfiguration() { UISettings::values.select_user_on_boot = ui->toggle_user_on_boot->isChecked(); UISettings::values.theme = ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); + UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked(); Settings::values.use_frame_limit = ui->toggle_frame_limit->isChecked(); Settings::values.frame_limit = ui->frame_limit->value(); diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui index 0bb91d64b..26b3486ff 100644 --- a/src/yuzu/configuration/configure_general.ui +++ b/src/yuzu/configuration/configure_general.ui @@ -65,6 +65,13 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="toggle_background_pause"> + <property name="text"> + <string>Pause emulation when in background</string> + </property> + </widget> + </item> </layout> </item> </layout> diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 2d82df739..757d42a3a 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -675,6 +675,24 @@ void GMainWindow::RestoreUIState() { Debugger::ToggleConsole(); } +void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { + if (!UISettings::values.pause_when_in_background) { + return; + } + if (state != Qt::ApplicationHidden && state != Qt::ApplicationInactive && + state != Qt::ApplicationActive) { + LOG_DEBUG(Frontend, "ApplicationState unusual flag: {} ", state); + } + if (ui.action_Pause->isEnabled() && + (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { + auto_paused = true; + OnPauseGame(); + } else if (ui.action_Start->isEnabled() && auto_paused && state == Qt::ApplicationActive) { + auto_paused = false; + OnStartGame(); + } +} + void GMainWindow::ConnectWidgetEvents() { connect(game_list, &GameList::GameChosen, this, &GMainWindow::OnGameListLoadFile); connect(game_list, &GameList::OpenDirectory, this, &GMainWindow::OnGameListOpenDirectory); @@ -2311,6 +2329,9 @@ int main(int argc, char* argv[]) { // After settings have been loaded by GMainWindow, apply the filter main_window.show(); + QObject::connect(&app, &QGuiApplication::applicationStateChanged, &main_window, + &GMainWindow::OnAppFocusStateChanged); + Settings::LogSettings(); int result = app.exec(); diff --git a/src/yuzu/main.h b/src/yuzu/main.h index e942d1248..fd4b9ccf5 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -119,6 +119,7 @@ public slots: void SoftwareKeyboardGetText(const Core::Frontend::SoftwareKeyboardParameters& parameters); void SoftwareKeyboardInvokeCheckDialog(std::u16string error_message); void WebBrowserOpenPage(std::string_view filename, std::string_view arguments); + void OnAppFocusStateChanged(Qt::ApplicationState state); private: void InitializeWidgets(); @@ -244,6 +245,8 @@ private: // The path to the game currently running QString game_path; + bool auto_paused = false; + // FS std::shared_ptr<FileSys::VfsFilesystem> vfs; std::unique_ptr<FileSys::ManualContentProvider> provider; diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index c57290006..84824caae 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -58,6 +58,7 @@ struct Values { bool confirm_before_closing; bool first_start; + bool pause_when_in_background; bool select_user_on_boot; |