Port yuzu-emu/yuzu#7506 & yuzu-emu/yuzu#7861: "Fix yuzu-emu/yuzu#7502" & "yuzu: Mute audio when in background" (#7321)

This commit is contained in:
Steveice10 2024-01-09 09:56:39 -08:00 committed by GitHub
parent 57696b2c11
commit 015e42be05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 37 additions and 11 deletions

View file

@ -768,6 +768,7 @@ void Config::ReadUIValues() {
ReadBasicSetting(UISettings::values.callout_flags); ReadBasicSetting(UISettings::values.callout_flags);
ReadBasicSetting(UISettings::values.show_console); ReadBasicSetting(UISettings::values.show_console);
ReadBasicSetting(UISettings::values.pause_when_in_background); ReadBasicSetting(UISettings::values.pause_when_in_background);
ReadBasicSetting(UISettings::values.mute_when_in_background);
ReadBasicSetting(UISettings::values.hide_mouse); ReadBasicSetting(UISettings::values.hide_mouse);
} }
@ -1239,6 +1240,7 @@ void Config::SaveUIValues() {
WriteBasicSetting(UISettings::values.callout_flags); WriteBasicSetting(UISettings::values.callout_flags);
WriteBasicSetting(UISettings::values.show_console); WriteBasicSetting(UISettings::values.show_console);
WriteBasicSetting(UISettings::values.pause_when_in_background); WriteBasicSetting(UISettings::values.pause_when_in_background);
WriteBasicSetting(UISettings::values.mute_when_in_background);
WriteBasicSetting(UISettings::values.hide_mouse); WriteBasicSetting(UISettings::values.hide_mouse);
} }

View file

@ -74,6 +74,8 @@ void ConfigureGeneral::SetConfiguration() {
ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue()); ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue());
ui->toggle_background_pause->setChecked( ui->toggle_background_pause->setChecked(
UISettings::values.pause_when_in_background.GetValue()); UISettings::values.pause_when_in_background.GetValue());
ui->toggle_background_mute->setChecked(
UISettings::values.mute_when_in_background.GetValue());
ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse.GetValue()); ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse.GetValue());
ui->toggle_update_check->setChecked( ui->toggle_update_check->setChecked(
@ -174,6 +176,7 @@ void ConfigureGeneral::ApplyConfiguration() {
if (Settings::IsConfiguringGlobal()) { if (Settings::IsConfiguringGlobal()) {
UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked();
UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked(); UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked();
UISettings::values.mute_when_in_background = ui->toggle_background_mute->isChecked();
UISettings::values.hide_mouse = ui->toggle_hide_mouse->isChecked(); UISettings::values.hide_mouse = ui->toggle_hide_mouse->isChecked();
UISettings::values.check_for_update_on_start = ui->toggle_update_check->isChecked(); UISettings::values.check_for_update_on_start = ui->toggle_update_check->isChecked();

View file

@ -36,6 +36,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="toggle_background_mute">
<property name="text">
<string>Mute audio when in background</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QCheckBox" name="toggle_hide_mouse"> <widget class="QCheckBox" name="toggle_hide_mouse">
<property name="text"> <property name="text">

View file

@ -778,22 +778,34 @@ void GMainWindow::RestoreUIState() {
} }
void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) {
if (!UISettings::values.pause_when_in_background) {
return;
}
if (state != Qt::ApplicationHidden && state != Qt::ApplicationInactive && if (state != Qt::ApplicationHidden && state != Qt::ApplicationInactive &&
state != Qt::ApplicationActive) { state != Qt::ApplicationActive) {
LOG_DEBUG(Frontend, "ApplicationState unusual flag: {} ", state); LOG_DEBUG(Frontend, "ApplicationState unusual flag: {} ", state);
} }
if (ui->action_Pause->isEnabled() && if (!emulation_running) {
return;
}
if (UISettings::values.pause_when_in_background) {
if (emu_thread->IsRunning() &&
(state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) {
auto_paused = true; auto_paused = true;
OnPauseGame(); OnPauseGame();
} else if (emulation_running && !emu_thread->IsRunning() && auto_paused && } else if (!emu_thread->IsRunning() && auto_paused && state == Qt::ApplicationActive) {
state == Qt::ApplicationActive) {
auto_paused = false; auto_paused = false;
OnStartGame(); OnStartGame();
} }
}
if (UISettings::values.mute_when_in_background) {
if (!Settings::values.audio_muted &&
(state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) {
Settings::values.audio_muted = true;
auto_muted = true;
} else if (auto_muted && state == Qt::ApplicationActive) {
Settings::values.audio_muted = false;
auto_muted = false;
}
UpdateVolumeUI();
}
} }
bool GApplicationEventFilter::eventFilter(QObject* object, QEvent* event) { bool GApplicationEventFilter::eventFilter(QObject* object, QEvent* event) {

View file

@ -325,6 +325,7 @@ private:
QString game_path; QString game_path;
bool auto_paused = false; bool auto_paused = false;
bool auto_muted = false;
QTimer mouse_hide_timer; QTimer mouse_hide_timer;
// Movie // Movie

View file

@ -80,6 +80,7 @@ struct Values {
Settings::Setting<bool> save_state_warning{true, "saveStateWarning"}; Settings::Setting<bool> save_state_warning{true, "saveStateWarning"};
Settings::Setting<bool> first_start{true, "firstStart"}; Settings::Setting<bool> first_start{true, "firstStart"};
Settings::Setting<bool> pause_when_in_background{false, "pauseWhenInBackground"}; Settings::Setting<bool> pause_when_in_background{false, "pauseWhenInBackground"};
Settings::Setting<bool> mute_when_in_background{false, "muteWhenInBackground"};
Settings::Setting<bool> hide_mouse{false, "hideInactiveMouse"}; Settings::Setting<bool> hide_mouse{false, "hideInactiveMouse"};
bool updater_found; bool updater_found;