diff options
| author | 2022-02-10 10:06:58 -0700 | |
|---|---|---|
| committer | 2022-02-10 10:06:58 -0700 | |
| commit | 1105614b86450f64e04d0d409aa9d91883f3258c (patch) | |
| tree | 4765a9261ff11f3ee7e33d96184c91ac32ba84ac | |
| parent | Merge pull request #7860 from german77/no-more-drift (diff) | |
| parent | yuzu: Mute audio when in background (diff) | |
| download | yuzu-1105614b86450f64e04d0d409aa9d91883f3258c.tar.gz yuzu-1105614b86450f64e04d0d409aa9d91883f3258c.tar.xz yuzu-1105614b86450f64e04d0d409aa9d91883f3258c.zip | |
Merge pull request #7861 from german77/user_features
yuzu: New hotkeys and mute audio on background
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 6 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.h | 2 | ||||
| -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 | 135 | ||||
| -rw-r--r-- | src/yuzu/main.h | 4 | ||||
| -rw-r--r-- | src/yuzu/uisettings.h | 1 |
7 files changed, 95 insertions, 62 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 2c8c10c50..9ee7992e7 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp | |||
| @@ -65,12 +65,14 @@ const std::array<int, 2> Config::default_stick_mod = { | |||
| 65 | // This must be in alphabetical order according to action name as it must have the same order as | 65 | // This must be in alphabetical order according to action name as it must have the same order as |
| 66 | // UISetting::values.shortcuts, which is alphabetically ordered. | 66 | // UISetting::values.shortcuts, which is alphabetically ordered. |
| 67 | // clang-format off | 67 | // clang-format off |
| 68 | const std::array<UISettings::Shortcut, 20> Config::default_hotkeys{{ | 68 | const std::array<UISettings::Shortcut, 22> Config::default_hotkeys{{ |
| 69 | {QStringLiteral("Audio Mute/Unmute"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+M"), QStringLiteral("Home+Dpad_Right"), Qt::WindowShortcut}}, | 69 | {QStringLiteral("Audio Mute/Unmute"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+M"), QStringLiteral("Home+Dpad_Right"), Qt::WindowShortcut}}, |
| 70 | {QStringLiteral("Audio Volume Down"), QStringLiteral("Main Window"), {QStringLiteral("-"), QStringLiteral("Home+Dpad_Down"), Qt::ApplicationShortcut}}, | 70 | {QStringLiteral("Audio Volume Down"), QStringLiteral("Main Window"), {QStringLiteral("-"), QStringLiteral("Home+Dpad_Down"), Qt::ApplicationShortcut}}, |
| 71 | {QStringLiteral("Audio Volume Up"), QStringLiteral("Main Window"), {QStringLiteral("+"), QStringLiteral("Home+Dpad_Up"), Qt::ApplicationShortcut}}, | 71 | {QStringLiteral("Audio Volume Up"), QStringLiteral("Main Window"), {QStringLiteral("+"), QStringLiteral("Home+Dpad_Up"), Qt::ApplicationShortcut}}, |
| 72 | {QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), QStringLiteral("Screenshot"), Qt::WidgetWithChildrenShortcut}}, | 72 | {QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), QStringLiteral("Screenshot"), Qt::WidgetWithChildrenShortcut}}, |
| 73 | {QStringLiteral("Change Adapting Filter"), QStringLiteral("Main Window"), {QStringLiteral("F8"), QStringLiteral("Home+L"), Qt::ApplicationShortcut}}, | ||
| 73 | {QStringLiteral("Change Docked Mode"), QStringLiteral("Main Window"), {QStringLiteral("F10"), QStringLiteral("Home+X"), Qt::ApplicationShortcut}}, | 74 | {QStringLiteral("Change Docked Mode"), QStringLiteral("Main Window"), {QStringLiteral("F10"), QStringLiteral("Home+X"), Qt::ApplicationShortcut}}, |
| 75 | {QStringLiteral("Change GPU Accuracy"), QStringLiteral("Main Window"), {QStringLiteral("F9"), QStringLiteral("Home+R"), Qt::ApplicationShortcut}}, | ||
| 74 | {QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), QStringLiteral("Home+Plus"), Qt::WindowShortcut}}, | 76 | {QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), QStringLiteral("Home+Plus"), Qt::WindowShortcut}}, |
| 75 | {QStringLiteral("Exit Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("Esc"), QStringLiteral(""), Qt::WindowShortcut}}, | 77 | {QStringLiteral("Exit Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("Esc"), QStringLiteral(""), Qt::WindowShortcut}}, |
| 76 | {QStringLiteral("Exit yuzu"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Q"), QStringLiteral("Home+Minus"), Qt::WindowShortcut}}, | 78 | {QStringLiteral("Exit yuzu"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Q"), QStringLiteral("Home+Minus"), Qt::WindowShortcut}}, |
| @@ -767,6 +769,7 @@ void Config::ReadUIValues() { | |||
| 767 | ReadBasicSetting(UISettings::values.callout_flags); | 769 | ReadBasicSetting(UISettings::values.callout_flags); |
| 768 | ReadBasicSetting(UISettings::values.show_console); | 770 | ReadBasicSetting(UISettings::values.show_console); |
| 769 | ReadBasicSetting(UISettings::values.pause_when_in_background); | 771 | ReadBasicSetting(UISettings::values.pause_when_in_background); |
| 772 | ReadBasicSetting(UISettings::values.mute_when_in_background); | ||
| 770 | ReadBasicSetting(UISettings::values.hide_mouse); | 773 | ReadBasicSetting(UISettings::values.hide_mouse); |
| 771 | 774 | ||
| 772 | qt_config->endGroup(); | 775 | qt_config->endGroup(); |
| @@ -1295,6 +1298,7 @@ void Config::SaveUIValues() { | |||
| 1295 | WriteBasicSetting(UISettings::values.callout_flags); | 1298 | WriteBasicSetting(UISettings::values.callout_flags); |
| 1296 | WriteBasicSetting(UISettings::values.show_console); | 1299 | WriteBasicSetting(UISettings::values.show_console); |
| 1297 | WriteBasicSetting(UISettings::values.pause_when_in_background); | 1300 | WriteBasicSetting(UISettings::values.pause_when_in_background); |
| 1301 | WriteBasicSetting(UISettings::values.mute_when_in_background); | ||
| 1298 | WriteBasicSetting(UISettings::values.hide_mouse); | 1302 | WriteBasicSetting(UISettings::values.hide_mouse); |
| 1299 | 1303 | ||
| 1300 | qt_config->endGroup(); | 1304 | qt_config->endGroup(); |
diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h index 60b20a62f..ae3e36a11 100644 --- a/src/yuzu/configuration/config.h +++ b/src/yuzu/configuration/config.h | |||
| @@ -46,7 +46,7 @@ public: | |||
| 46 | default_mouse_buttons; | 46 | default_mouse_buttons; |
| 47 | static const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> default_keyboard_keys; | 47 | static const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> default_keyboard_keys; |
| 48 | static const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> default_keyboard_mods; | 48 | static const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> default_keyboard_mods; |
| 49 | static const std::array<UISettings::Shortcut, 20> default_hotkeys; | 49 | static const std::array<UISettings::Shortcut, 22> default_hotkeys; |
| 50 | 50 | ||
| 51 | static constexpr UISettings::Theme default_theme{ | 51 | static constexpr UISettings::Theme default_theme{ |
| 52 | #ifdef _WIN32 | 52 | #ifdef _WIN32 |
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index 566879317..978a29fe6 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp | |||
| @@ -46,6 +46,7 @@ void ConfigureGeneral::SetConfiguration() { | |||
| 46 | ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue()); | 46 | ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue()); |
| 47 | ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot.GetValue()); | 47 | ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot.GetValue()); |
| 48 | ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background.GetValue()); | 48 | ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background.GetValue()); |
| 49 | ui->toggle_background_mute->setChecked(UISettings::values.mute_when_in_background.GetValue()); | ||
| 49 | ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse.GetValue()); | 50 | ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse.GetValue()); |
| 50 | 51 | ||
| 51 | ui->toggle_speed_limit->setChecked(Settings::values.use_speed_limit.GetValue()); | 52 | ui->toggle_speed_limit->setChecked(Settings::values.use_speed_limit.GetValue()); |
| @@ -95,6 +96,7 @@ void ConfigureGeneral::ApplyConfiguration() { | |||
| 95 | UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); | 96 | UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); |
| 96 | UISettings::values.select_user_on_boot = ui->toggle_user_on_boot->isChecked(); | 97 | UISettings::values.select_user_on_boot = ui->toggle_user_on_boot->isChecked(); |
| 97 | UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked(); | 98 | UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked(); |
| 99 | UISettings::values.mute_when_in_background = ui->toggle_background_mute->isChecked(); | ||
| 98 | UISettings::values.hide_mouse = ui->toggle_hide_mouse->isChecked(); | 100 | UISettings::values.hide_mouse = ui->toggle_hide_mouse->isChecked(); |
| 99 | 101 | ||
| 100 | Settings::values.fps_cap.SetValue(ui->fps_cap->value()); | 102 | Settings::values.fps_cap.SetValue(ui->fps_cap->value()); |
diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui index 112dc72b3..bfc771135 100644 --- a/src/yuzu/configuration/configure_general.ui +++ b/src/yuzu/configuration/configure_general.ui | |||
| @@ -164,6 +164,13 @@ | |||
| 164 | </widget> | 164 | </widget> |
| 165 | </item> | 165 | </item> |
| 166 | <item> | 166 | <item> |
| 167 | <widget class="QCheckBox" name="toggle_background_mute"> | ||
| 168 | <property name="text"> | ||
| 169 | <string>Mute audio when in background</string> | ||
| 170 | </property> | ||
| 171 | </widget> | ||
| 172 | </item> | ||
| 173 | <item> | ||
| 167 | <widget class="QCheckBox" name="toggle_hide_mouse"> | 174 | <widget class="QCheckBox" name="toggle_hide_mouse"> |
| 168 | <property name="text"> | 175 | <property name="text"> |
| 169 | <string>Hide mouse on inactivity</string> | 176 | <string>Hide mouse on inactivity</string> |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index c788db12d..cc5a8f65e 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -806,21 +806,8 @@ void GMainWindow::InitializeWidgets() { | |||
| 806 | filter_status_button = new QPushButton(); | 806 | filter_status_button = new QPushButton(); |
| 807 | filter_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); | 807 | filter_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); |
| 808 | filter_status_button->setFocusPolicy(Qt::NoFocus); | 808 | filter_status_button->setFocusPolicy(Qt::NoFocus); |
| 809 | connect(filter_status_button, &QPushButton::clicked, [&] { | 809 | connect(filter_status_button, &QPushButton::clicked, this, |
| 810 | auto filter = Settings::values.scaling_filter.GetValue(); | 810 | &GMainWindow::OnToggleAdaptingFilter); |
| 811 | if (filter == Settings::ScalingFilter::LastFilter) { | ||
| 812 | filter = Settings::ScalingFilter::NearestNeighbor; | ||
| 813 | } else { | ||
| 814 | filter = static_cast<Settings::ScalingFilter>(static_cast<u32>(filter) + 1); | ||
| 815 | } | ||
| 816 | if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && | ||
| 817 | filter == Settings::ScalingFilter::Fsr) { | ||
| 818 | filter = Settings::ScalingFilter::NearestNeighbor; | ||
| 819 | } | ||
| 820 | Settings::values.scaling_filter.SetValue(filter); | ||
| 821 | filter_status_button->setChecked(true); | ||
| 822 | UpdateFilterText(); | ||
| 823 | }); | ||
| 824 | auto filter = Settings::values.scaling_filter.GetValue(); | 811 | auto filter = Settings::values.scaling_filter.GetValue(); |
| 825 | if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && | 812 | if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && |
| 826 | filter == Settings::ScalingFilter::Fsr) { | 813 | filter == Settings::ScalingFilter::Fsr) { |
| @@ -835,25 +822,7 @@ void GMainWindow::InitializeWidgets() { | |||
| 835 | dock_status_button = new QPushButton(); | 822 | dock_status_button = new QPushButton(); |
| 836 | dock_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); | 823 | dock_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); |
| 837 | dock_status_button->setFocusPolicy(Qt::NoFocus); | 824 | dock_status_button->setFocusPolicy(Qt::NoFocus); |
| 838 | connect(dock_status_button, &QPushButton::clicked, [&] { | 825 | connect(dock_status_button, &QPushButton::clicked, this, &GMainWindow::OnToggleDockedMode); |
| 839 | const bool is_docked = Settings::values.use_docked_mode.GetValue(); | ||
| 840 | auto* player_1 = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); | ||
| 841 | auto* handheld = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld); | ||
| 842 | |||
| 843 | if (!is_docked && handheld->IsConnected()) { | ||
| 844 | QMessageBox::warning(this, tr("Invalid config detected"), | ||
| 845 | tr("Handheld controller can't be used on docked mode. Pro " | ||
| 846 | "controller will be selected.")); | ||
| 847 | handheld->Disconnect(); | ||
| 848 | player_1->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController); | ||
| 849 | player_1->Connect(); | ||
| 850 | controller_dialog->refreshConfiguration(); | ||
| 851 | } | ||
| 852 | |||
| 853 | Settings::values.use_docked_mode.SetValue(!is_docked); | ||
| 854 | dock_status_button->setChecked(!is_docked); | ||
| 855 | OnDockedModeChanged(is_docked, !is_docked, *system); | ||
| 856 | }); | ||
| 857 | dock_status_button->setText(tr("DOCK")); | 826 | dock_status_button->setText(tr("DOCK")); |
| 858 | dock_status_button->setCheckable(true); | 827 | dock_status_button->setCheckable(true); |
| 859 | dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); | 828 | dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); |
| @@ -863,22 +832,7 @@ void GMainWindow::InitializeWidgets() { | |||
| 863 | gpu_accuracy_button->setObjectName(QStringLiteral("GPUStatusBarButton")); | 832 | gpu_accuracy_button->setObjectName(QStringLiteral("GPUStatusBarButton")); |
| 864 | gpu_accuracy_button->setCheckable(true); | 833 | gpu_accuracy_button->setCheckable(true); |
| 865 | gpu_accuracy_button->setFocusPolicy(Qt::NoFocus); | 834 | gpu_accuracy_button->setFocusPolicy(Qt::NoFocus); |
| 866 | connect(gpu_accuracy_button, &QPushButton::clicked, [this] { | 835 | connect(gpu_accuracy_button, &QPushButton::clicked, this, &GMainWindow::OnToggleGpuAccuracy); |
| 867 | switch (Settings::values.gpu_accuracy.GetValue()) { | ||
| 868 | case Settings::GPUAccuracy::High: { | ||
| 869 | Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::Normal); | ||
| 870 | break; | ||
| 871 | } | ||
| 872 | case Settings::GPUAccuracy::Normal: | ||
| 873 | case Settings::GPUAccuracy::Extreme: | ||
| 874 | default: { | ||
| 875 | Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::High); | ||
| 876 | } | ||
| 877 | } | ||
| 878 | |||
| 879 | system->ApplySettings(); | ||
| 880 | UpdateGPUAccuracyButton(); | ||
| 881 | }); | ||
| 882 | UpdateGPUAccuracyButton(); | 836 | UpdateGPUAccuracyButton(); |
| 883 | statusBar()->insertPermanentWidget(0, gpu_accuracy_button); | 837 | statusBar()->insertPermanentWidget(0, gpu_accuracy_button); |
| 884 | 838 | ||
| @@ -1009,12 +963,10 @@ void GMainWindow::InitializeHotkeys() { | |||
| 1009 | ToggleFullscreen(); | 963 | ToggleFullscreen(); |
| 1010 | } | 964 | } |
| 1011 | }); | 965 | }); |
| 1012 | connect_shortcut(QStringLiteral("Change Docked Mode"), [&] { | 966 | connect_shortcut(QStringLiteral("Change Adapting Filter"), |
| 1013 | Settings::values.use_docked_mode.SetValue(!Settings::values.use_docked_mode.GetValue()); | 967 | &GMainWindow::OnToggleAdaptingFilter); |
| 1014 | OnDockedModeChanged(!Settings::values.use_docked_mode.GetValue(), | 968 | connect_shortcut(QStringLiteral("Change Docked Mode"), &GMainWindow::OnToggleDockedMode); |
| 1015 | Settings::values.use_docked_mode.GetValue(), *system); | 969 | connect_shortcut(QStringLiteral("Change GPU Accuracy"), &GMainWindow::OnToggleGpuAccuracy); |
| 1016 | dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); | ||
| 1017 | }); | ||
| 1018 | connect_shortcut(QStringLiteral("Audio Mute/Unmute"), | 970 | connect_shortcut(QStringLiteral("Audio Mute/Unmute"), |
| 1019 | [] { Settings::values.audio_muted = !Settings::values.audio_muted; }); | 971 | [] { Settings::values.audio_muted = !Settings::values.audio_muted; }); |
| 1020 | connect_shortcut(QStringLiteral("Audio Volume Down"), [] { | 972 | connect_shortcut(QStringLiteral("Audio Volume Down"), [] { |
| @@ -1082,14 +1034,14 @@ void GMainWindow::RestoreUIState() { | |||
| 1082 | } | 1034 | } |
| 1083 | 1035 | ||
| 1084 | void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { | 1036 | void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { |
| 1085 | if (!UISettings::values.pause_when_in_background) { | ||
| 1086 | return; | ||
| 1087 | } | ||
| 1088 | if (state != Qt::ApplicationHidden && state != Qt::ApplicationInactive && | 1037 | if (state != Qt::ApplicationHidden && state != Qt::ApplicationInactive && |
| 1089 | state != Qt::ApplicationActive) { | 1038 | state != Qt::ApplicationActive) { |
| 1090 | LOG_DEBUG(Frontend, "ApplicationState unusual flag: {} ", state); | 1039 | LOG_DEBUG(Frontend, "ApplicationState unusual flag: {} ", state); |
| 1091 | } | 1040 | } |
| 1092 | if (emulation_running) { | 1041 | if (!emulation_running) { |
| 1042 | return; | ||
| 1043 | } | ||
| 1044 | if (UISettings::values.pause_when_in_background) { | ||
| 1093 | if (emu_thread->IsRunning() && | 1045 | if (emu_thread->IsRunning() && |
| 1094 | (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { | 1046 | (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { |
| 1095 | auto_paused = true; | 1047 | auto_paused = true; |
| @@ -1099,6 +1051,16 @@ void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { | |||
| 1099 | OnStartGame(); | 1051 | OnStartGame(); |
| 1100 | } | 1052 | } |
| 1101 | } | 1053 | } |
| 1054 | if (UISettings::values.mute_when_in_background) { | ||
| 1055 | if (!Settings::values.audio_muted && | ||
| 1056 | (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { | ||
| 1057 | Settings::values.audio_muted = true; | ||
| 1058 | auto_muted = true; | ||
| 1059 | } else if (auto_muted && state == Qt::ApplicationActive) { | ||
| 1060 | Settings::values.audio_muted = false; | ||
| 1061 | auto_muted = false; | ||
| 1062 | } | ||
| 1063 | } | ||
| 1102 | } | 1064 | } |
| 1103 | 1065 | ||
| 1104 | void GMainWindow::ConnectWidgetEvents() { | 1066 | void GMainWindow::ConnectWidgetEvents() { |
| @@ -2868,6 +2830,59 @@ void GMainWindow::OnTasReset() { | |||
| 2868 | input_subsystem->GetTas()->Reset(); | 2830 | input_subsystem->GetTas()->Reset(); |
| 2869 | } | 2831 | } |
| 2870 | 2832 | ||
| 2833 | void GMainWindow::OnToggleDockedMode() { | ||
| 2834 | const bool is_docked = Settings::values.use_docked_mode.GetValue(); | ||
| 2835 | auto* player_1 = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); | ||
| 2836 | auto* handheld = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld); | ||
| 2837 | |||
| 2838 | if (!is_docked && handheld->IsConnected()) { | ||
| 2839 | QMessageBox::warning(this, tr("Invalid config detected"), | ||
| 2840 | tr("Handheld controller can't be used on docked mode. Pro " | ||
| 2841 | "controller will be selected.")); | ||
| 2842 | handheld->Disconnect(); | ||
| 2843 | player_1->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController); | ||
| 2844 | player_1->Connect(); | ||
| 2845 | controller_dialog->refreshConfiguration(); | ||
| 2846 | } | ||
| 2847 | |||
| 2848 | Settings::values.use_docked_mode.SetValue(!is_docked); | ||
| 2849 | dock_status_button->setChecked(!is_docked); | ||
| 2850 | OnDockedModeChanged(is_docked, !is_docked, *system); | ||
| 2851 | } | ||
| 2852 | |||
| 2853 | void GMainWindow::OnToggleGpuAccuracy() { | ||
| 2854 | switch (Settings::values.gpu_accuracy.GetValue()) { | ||
| 2855 | case Settings::GPUAccuracy::High: { | ||
| 2856 | Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::Normal); | ||
| 2857 | break; | ||
| 2858 | } | ||
| 2859 | case Settings::GPUAccuracy::Normal: | ||
| 2860 | case Settings::GPUAccuracy::Extreme: | ||
| 2861 | default: { | ||
| 2862 | Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::High); | ||
| 2863 | } | ||
| 2864 | } | ||
| 2865 | |||
| 2866 | system->ApplySettings(); | ||
| 2867 | UpdateGPUAccuracyButton(); | ||
| 2868 | } | ||
| 2869 | |||
| 2870 | void GMainWindow::OnToggleAdaptingFilter() { | ||
| 2871 | auto filter = Settings::values.scaling_filter.GetValue(); | ||
| 2872 | if (filter == Settings::ScalingFilter::LastFilter) { | ||
| 2873 | filter = Settings::ScalingFilter::NearestNeighbor; | ||
| 2874 | } else { | ||
| 2875 | filter = static_cast<Settings::ScalingFilter>(static_cast<u32>(filter) + 1); | ||
| 2876 | } | ||
| 2877 | if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && | ||
| 2878 | filter == Settings::ScalingFilter::Fsr) { | ||
| 2879 | filter = Settings::ScalingFilter::NearestNeighbor; | ||
| 2880 | } | ||
| 2881 | Settings::values.scaling_filter.SetValue(filter); | ||
| 2882 | filter_status_button->setChecked(true); | ||
| 2883 | UpdateFilterText(); | ||
| 2884 | } | ||
| 2885 | |||
| 2871 | void GMainWindow::OnConfigurePerGame() { | 2886 | void GMainWindow::OnConfigurePerGame() { |
| 2872 | const u64 title_id = system->GetCurrentProcessProgramID(); | 2887 | const u64 title_id = system->GetCurrentProcessProgramID(); |
| 2873 | OpenPerGameConfiguration(title_id, game_path.toStdString()); | 2888 | OpenPerGameConfiguration(title_id, game_path.toStdString()); |
diff --git a/src/yuzu/main.h b/src/yuzu/main.h index ca4ab9af5..6a35b9e3d 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h | |||
| @@ -284,6 +284,9 @@ private slots: | |||
| 284 | void OnTasStartStop(); | 284 | void OnTasStartStop(); |
| 285 | void OnTasRecord(); | 285 | void OnTasRecord(); |
| 286 | void OnTasReset(); | 286 | void OnTasReset(); |
| 287 | void OnToggleDockedMode(); | ||
| 288 | void OnToggleGpuAccuracy(); | ||
| 289 | void OnToggleAdaptingFilter(); | ||
| 287 | void OnConfigurePerGame(); | 290 | void OnConfigurePerGame(); |
| 288 | void OnLoadAmiibo(); | 291 | void OnLoadAmiibo(); |
| 289 | void OnOpenYuzuFolder(); | 292 | void OnOpenYuzuFolder(); |
| @@ -369,6 +372,7 @@ private: | |||
| 369 | QString game_path; | 372 | QString game_path; |
| 370 | 373 | ||
| 371 | bool auto_paused = false; | 374 | bool auto_paused = false; |
| 375 | bool auto_muted = false; | ||
| 372 | QTimer mouse_hide_timer; | 376 | QTimer mouse_hide_timer; |
| 373 | 377 | ||
| 374 | // FS | 378 | // FS |
diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index f7298ddad..06e8b46da 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h | |||
| @@ -73,6 +73,7 @@ struct Values { | |||
| 73 | Settings::BasicSetting<bool> confirm_before_closing{true, "confirmClose"}; | 73 | Settings::BasicSetting<bool> confirm_before_closing{true, "confirmClose"}; |
| 74 | Settings::BasicSetting<bool> first_start{true, "firstStart"}; | 74 | Settings::BasicSetting<bool> first_start{true, "firstStart"}; |
| 75 | Settings::BasicSetting<bool> pause_when_in_background{false, "pauseWhenInBackground"}; | 75 | Settings::BasicSetting<bool> pause_when_in_background{false, "pauseWhenInBackground"}; |
| 76 | Settings::BasicSetting<bool> mute_when_in_background{false, "muteWhenInBackground"}; | ||
| 76 | Settings::BasicSetting<bool> hide_mouse{true, "hideInactiveMouse"}; | 77 | Settings::BasicSetting<bool> hide_mouse{true, "hideInactiveMouse"}; |
| 77 | 78 | ||
| 78 | Settings::BasicSetting<bool> select_user_on_boot{false, "select_user_on_boot"}; | 79 | Settings::BasicSetting<bool> select_user_on_boot{false, "select_user_on_boot"}; |