diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 8 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.h | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.cpp | 23 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.ui | 132 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.cpp | 9 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_player.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_tas.ui | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_web.cpp | 21 | ||||
| -rw-r--r-- | src/yuzu/configuration/input_profiles.cpp | 11 | ||||
| -rw-r--r-- | src/yuzu/configuration/input_profiles.h | 4 | 
12 files changed, 133 insertions, 89 deletions
| diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 8ecd87150..195074bf2 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -15,8 +15,7 @@  namespace FS = Common::FS; -Config::Config(Core::System& system_, const std::string& config_name, ConfigType config_type) -    : type(config_type), system{system_} { +Config::Config(const std::string& config_name, ConfigType config_type) : type(config_type) {      global = config_type == ConfigType::GlobalConfig;      Initialize(config_name); @@ -546,6 +545,8 @@ void Config::ReadDebuggingValues() {      ReadBasicSetting(Settings::values.use_debug_asserts);      ReadBasicSetting(Settings::values.use_auto_stub);      ReadBasicSetting(Settings::values.enable_all_controllers); +    ReadBasicSetting(Settings::values.create_crash_dumps); +    ReadBasicSetting(Settings::values.perform_vulkan_check);      qt_config->endGroup();  } @@ -1161,6 +1162,8 @@ void Config::SaveDebuggingValues() {      WriteBasicSetting(Settings::values.use_debug_asserts);      WriteBasicSetting(Settings::values.disable_macro_jit);      WriteBasicSetting(Settings::values.enable_all_controllers); +    WriteBasicSetting(Settings::values.create_crash_dumps); +    WriteBasicSetting(Settings::values.perform_vulkan_check);      qt_config->endGroup();  } @@ -1547,7 +1550,6 @@ void Config::Reload() {      ReadValues();      // To apply default value changes      SaveValues(); -    system.ApplySettings();  }  void Config::Save() { diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h index 486ceea94..06fa7d2d0 100644 --- a/src/yuzu/configuration/config.h +++ b/src/yuzu/configuration/config.h @@ -25,7 +25,7 @@ public:          InputProfile,      }; -    explicit Config(Core::System& system_, const std::string& config_name = "qt-config", +    explicit Config(const std::string& config_name = "qt-config",                      ConfigType config_type = ConfigType::GlobalConfig);      ~Config(); @@ -194,8 +194,6 @@ private:      std::unique_ptr<QSettings> qt_config;      std::string qt_config_loc;      bool global; - -    Core::System& system;  };  // These metatype declarations cannot be in common/settings.h because core is devoid of QT diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp index 04d397750..dacc75a20 100644 --- a/src/yuzu/configuration/configure_debug.cpp +++ b/src/yuzu/configuration/configure_debug.cpp @@ -2,6 +2,7 @@  // SPDX-License-Identifier: GPL-2.0-or-later  #include <QDesktopServices> +#include <QMessageBox>  #include <QUrl>  #include "common/fs/path_util.h"  #include "common/logging/backend.h" @@ -26,6 +27,16 @@ ConfigureDebug::ConfigureDebug(const Core::System& system_, QWidget* parent)      connect(ui->toggle_gdbstub, &QCheckBox::toggled,              [&]() { ui->gdbport_spinbox->setEnabled(ui->toggle_gdbstub->isChecked()); }); + +    connect(ui->create_crash_dumps, &QCheckBox::stateChanged, [&](int) { +        if (crash_dump_warning_shown) { +            return; +        } +        QMessageBox::warning(this, tr("Restart Required"), +                             tr("yuzu is required to restart in order to apply this setting."), +                             QMessageBox::Ok, QMessageBox::Ok); +        crash_dump_warning_shown = true; +    });  }  ConfigureDebug::~ConfigureDebug() = default; @@ -66,12 +77,20 @@ void ConfigureDebug::SetConfiguration() {      ui->disable_loop_safety_checks->setChecked(          Settings::values.disable_shader_loop_safety_checks.GetValue());      ui->extended_logging->setChecked(Settings::values.extended_logging.GetValue()); +    ui->perform_vulkan_check->setChecked(Settings::values.perform_vulkan_check.GetValue());  #ifdef YUZU_USE_QT_WEB_ENGINE      ui->disable_web_applet->setChecked(UISettings::values.disable_web_applet.GetValue());  #else      ui->disable_web_applet->setEnabled(false); -    ui->disable_web_applet->setText(QString::fromUtf8("Web applet not compiled")); +    ui->disable_web_applet->setText(tr("Web applet not compiled")); +#endif + +#ifdef YUZU_DBGHELP +    ui->create_crash_dumps->setChecked(Settings::values.create_crash_dumps.GetValue()); +#else +    ui->create_crash_dumps->setEnabled(false); +    ui->create_crash_dumps->setText(tr("MiniDump creation not compiled"));  #endif  } @@ -84,6 +103,7 @@ void ConfigureDebug::ApplyConfiguration() {      Settings::values.enable_fs_access_log = ui->fs_access_log->isChecked();      Settings::values.reporting_services = ui->reporting_services->isChecked();      Settings::values.dump_audio_commands = ui->dump_audio_commands->isChecked(); +    Settings::values.create_crash_dumps = ui->create_crash_dumps->isChecked();      Settings::values.quest_flag = ui->quest_flag->isChecked();      Settings::values.use_debug_asserts = ui->use_debug_asserts->isChecked();      Settings::values.use_auto_stub = ui->use_auto_stub->isChecked(); @@ -98,6 +118,7 @@ void ConfigureDebug::ApplyConfiguration() {          ui->disable_loop_safety_checks->isChecked();      Settings::values.disable_macro_jit = ui->disable_macro_jit->isChecked();      Settings::values.extended_logging = ui->extended_logging->isChecked(); +    Settings::values.perform_vulkan_check = ui->perform_vulkan_check->isChecked();      UISettings::values.disable_web_applet = ui->disable_web_applet->isChecked();      Debugger::ToggleConsole();      Common::Log::Filter filter; diff --git a/src/yuzu/configuration/configure_debug.h b/src/yuzu/configuration/configure_debug.h index 42d30f170..030a0b7f7 100644 --- a/src/yuzu/configuration/configure_debug.h +++ b/src/yuzu/configuration/configure_debug.h @@ -32,4 +32,6 @@ private:      std::unique_ptr<Ui::ConfigureDebug> ui;      const Core::System& system; + +    bool crash_dump_warning_shown{false};  }; diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui index 47b8b80f1..102c8c66c 100644 --- a/src/yuzu/configuration/configure_debug.ui +++ b/src/yuzu/configuration/configure_debug.ui @@ -7,60 +7,60 @@    </property>   <widget class="QWidget">    <layout class="QVBoxLayout" name="verticalLayout_1"> -    <item> -      <layout class="QVBoxLayout" name="verticalLayout_2"> -       <item> -        <widget class="QGroupBox" name="groupBox"> -         <property name="title"> -          <string>Debugger</string> -         </property> -         <layout class="QVBoxLayout" name="verticalLayout_3"> +   <item> +    <layout class="QVBoxLayout" name="verticalLayout_2"> +     <item> +      <widget class="QGroupBox" name="groupBox"> +       <property name="title"> +        <string>Debugger</string> +       </property> +       <layout class="QVBoxLayout" name="verticalLayout_3"> +        <item> +         <layout class="QHBoxLayout" name="horizontalLayout_11">            <item> -           <layout class="QHBoxLayout" name="horizontalLayout_11"> -            <item> -             <widget class="QCheckBox" name="toggle_gdbstub"> -              <property name="text"> -               <string>Enable GDB Stub</string> -              </property> -             </widget> -            </item> -            <item> -             <spacer name="horizontalSpacer"> -              <property name="orientation"> -               <enum>Qt::Horizontal</enum> -              </property> -              <property name="sizeHint" stdset="0"> -               <size> -                <width>40</width> -                <height>20</height> -               </size> -              </property> -             </spacer> -            </item> -            <item> -             <widget class="QLabel" name="label_11"> -              <property name="text"> -               <string>Port:</string> -              </property> -             </widget> -            </item> -            <item> -             <widget class="QSpinBox" name="gdbport_spinbox"> -              <property name="minimum"> -                <number>1024</number> -              </property> -              <property name="maximum"> -               <number>65535</number> -              </property> -             </widget> -            </item> -           </layout> +           <widget class="QCheckBox" name="toggle_gdbstub"> +            <property name="text"> +             <string>Enable GDB Stub</string> +            </property> +           </widget> +          </item> +          <item> +           <spacer name="horizontalSpacer"> +            <property name="orientation"> +             <enum>Qt::Horizontal</enum> +            </property> +            <property name="sizeHint" stdset="0"> +             <size> +              <width>40</width> +              <height>20</height> +             </size> +            </property> +           </spacer> +          </item> +          <item> +           <widget class="QLabel" name="label_11"> +            <property name="text"> +             <string>Port:</string> +            </property> +           </widget> +          </item> +          <item> +           <widget class="QSpinBox" name="gdbport_spinbox"> +            <property name="minimum"> +             <number>1024</number> +            </property> +            <property name="maximum"> +             <number>65535</number> +            </property> +           </widget>            </item>           </layout> -        </widget> -       </item> -      </layout> +        </item> +       </layout> +      </widget>       </item> +    </layout> +   </item>     <item>      <widget class="QGroupBox" name="groupBox_2">       <property name="title"> @@ -231,6 +231,13 @@        <string>Debugging</string>       </property>       <layout class="QGridLayout" name="gridLayout_3"> +      <item row="2" column="0"> +       <widget class="QCheckBox" name="reporting_services"> +        <property name="text"> +         <string>Enable Verbose Reporting Services**</string> +        </property> +       </widget> +      </item>        <item row="0" column="0">         <widget class="QCheckBox" name="fs_access_log">          <property name="text"> @@ -238,20 +245,20 @@          </property>         </widget>        </item> -      <item row="1" column="0"> +      <item row="0" column="1">         <widget class="QCheckBox" name="dump_audio_commands"> -        <property name="text"> -         <string>Dump Audio Commands To Console**</string> -        </property>          <property name="toolTip">           <string>Enable this to output the latest generated audio command list to the console. Only affects games using the audio renderer.</string>          </property> +        <property name="text"> +         <string>Dump Audio Commands To Console**</string> +        </property>         </widget>        </item> -      <item row="2" column="0"> -       <widget class="QCheckBox" name="reporting_services"> +      <item row="2" column="1"> +       <widget class="QCheckBox" name="create_crash_dumps">          <property name="text"> -         <string>Enable Verbose Reporting Services**</string> +         <string>Create Minidump After Crash</string>          </property>         </widget>        </item> @@ -306,6 +313,16 @@          </property>         </widget>        </item> +      <item row="3" column="0"> +       <widget class="QCheckBox" name="perform_vulkan_check"> +        <property name="toolTip"> +         <string>Enables yuzu to check for a working Vulkan environment when the program starts up. Disable this if this is causing issues with external programs seeing yuzu.</string> +        </property> +        <property name="text"> +         <string>Perform Startup Vulkan Check</string> +        </property> +       </widget> +      </item>       </layout>      </widget>     </item> @@ -340,7 +357,6 @@    <tabstop>disable_loop_safety_checks</tabstop>    <tabstop>fs_access_log</tabstop>    <tabstop>reporting_services</tabstop> -  <tabstop>dump_audio_commands</tabstop>    <tabstop>quest_flag</tabstop>    <tabstop>enable_cpu_debugging</tabstop>    <tabstop>use_debug_asserts</tabstop> diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 16fba3deb..1db374d4a 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -65,7 +65,7 @@ void OnDockedModeChanged(bool last_state, bool new_state, Core::System& system)  ConfigureInput::ConfigureInput(Core::System& system_, QWidget* parent)      : QWidget(parent), ui(std::make_unique<Ui::ConfigureInput>()), -      profiles(std::make_unique<InputProfiles>(system_)), system{system_} { +      profiles(std::make_unique<InputProfiles>()), system{system_} {      ui->setupUi(this);  } @@ -163,10 +163,9 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem,              [this, input_subsystem, &hid_core] {                  CallConfigureDialog<ConfigureRingController>(*this, input_subsystem, hid_core);              }); -    connect(advanced, &ConfigureInputAdvanced::CallCameraDialog, -            [this, input_subsystem, &hid_core] { -                CallConfigureDialog<ConfigureCamera>(*this, input_subsystem); -            }); +    connect(advanced, &ConfigureInputAdvanced::CallCameraDialog, [this, input_subsystem] { +        CallConfigureDialog<ConfigureCamera>(*this, input_subsystem); +    });      connect(ui->vibrationButton, &QPushButton::clicked,              [this, &hid_core] { CallConfigureDialog<ConfigureVibration>(*this, hid_core); }); diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index 9b4f765ce..9e5a40fe7 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -1417,7 +1417,7 @@ void ConfigureInputPlayer::HandleClick(          ui->controllerFrame->BeginMappingAnalog(button_id);      } -    timeout_timer->start(2500); // Cancel after 2.5 seconds +    timeout_timer->start(4000); // Cancel after 4 seconds      poll_timer->start(25);      // Check for new inputs every 25ms  } diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp index af8343b2e..c3cb8f61d 100644 --- a/src/yuzu/configuration/configure_per_game.cpp +++ b/src/yuzu/configuration/configure_per_game.cpp @@ -42,8 +42,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st      const auto file_path = std::filesystem::path(Common::FS::ToU8String(file_name));      const auto config_file_name = title_id == 0 ? Common::FS::PathToUTF8String(file_path.filename())                                                  : fmt::format("{:016X}", title_id); -    game_config = -        std::make_unique<Config>(system, config_file_name, Config::ConfigType::PerGameConfig); +    game_config = std::make_unique<Config>(config_file_name, Config::ConfigType::PerGameConfig);      addons_tab = std::make_unique<ConfigurePerGameAddons>(system_, this);      audio_tab = std::make_unique<ConfigureAudio>(system_, this); diff --git a/src/yuzu/configuration/configure_tas.ui b/src/yuzu/configuration/configure_tas.ui index cf88a5bf0..625af0c89 100644 --- a/src/yuzu/configuration/configure_tas.ui +++ b/src/yuzu/configuration/configure_tas.ui @@ -16,6 +16,9 @@            <property name="text">             <string><html><head/><body><p>Reads controller input from scripts in the same format as TAS-nx scripts.<br/>For a more detailed explanation, please consult the <a href="https://yuzu-emu.org/help/feature/tas/"><span style=" text-decoration: underline; color:#039be5;">help page</span></a> on the yuzu website.</p></body></html></string>            </property> +          <property name="openExternalLinks"> +           <bool>true</bool> +          </property>           </widget>          </item>          <item row="1" column="0" colspan="4"> diff --git a/src/yuzu/configuration/configure_web.cpp b/src/yuzu/configuration/configure_web.cpp index d668c992b..ab526e4ca 100644 --- a/src/yuzu/configuration/configure_web.cpp +++ b/src/yuzu/configuration/configure_web.cpp @@ -128,20 +128,25 @@ void ConfigureWeb::RefreshTelemetryID() {  void ConfigureWeb::OnLoginChanged() {      if (ui->edit_token->text().isEmpty()) {          user_verified = true; - -        const QPixmap pixmap = QIcon::fromTheme(QStringLiteral("checked")).pixmap(16); -        ui->label_token_verified->setPixmap(pixmap); +        // Empty = no icon +        ui->label_token_verified->setPixmap(QPixmap()); +        ui->label_token_verified->setToolTip(QString());      } else {          user_verified = false; -        const QPixmap pixmap = QIcon::fromTheme(QStringLiteral("failed")).pixmap(16); +        // Show an info icon if it's been changed, clearer than showing failure +        const QPixmap pixmap = QIcon::fromTheme(QStringLiteral("info")).pixmap(16);          ui->label_token_verified->setPixmap(pixmap); +        ui->label_token_verified->setToolTip( +            tr("Unverified, please click Verify before saving configuration", "Tooltip"));      }  }  void ConfigureWeb::VerifyLogin() {      ui->button_verify_login->setDisabled(true);      ui->button_verify_login->setText(tr("Verifying...")); +    ui->label_token_verified->setPixmap(QIcon::fromTheme(QStringLiteral("sync")).pixmap(16)); +    ui->label_token_verified->setToolTip(tr("Verifying..."));      verify_watcher.setFuture(QtConcurrent::run(          [username = UsernameFromDisplayToken(ui->edit_token->text().toStdString()),           token = TokenFromDisplayToken(ui->edit_token->text().toStdString())] { @@ -155,13 +160,13 @@ void ConfigureWeb::OnLoginVerified() {      if (verify_watcher.result()) {          user_verified = true; -        const QPixmap pixmap = QIcon::fromTheme(QStringLiteral("checked")).pixmap(16); -        ui->label_token_verified->setPixmap(pixmap); +        ui->label_token_verified->setPixmap(QIcon::fromTheme(QStringLiteral("checked")).pixmap(16)); +        ui->label_token_verified->setToolTip(tr("Verified", "Tooltip"));          ui->username->setText(              QString::fromStdString(UsernameFromDisplayToken(ui->edit_token->text().toStdString())));      } else { -        const QPixmap pixmap = QIcon::fromTheme(QStringLiteral("failed")).pixmap(16); -        ui->label_token_verified->setPixmap(pixmap); +        ui->label_token_verified->setPixmap(QIcon::fromTheme(QStringLiteral("failed")).pixmap(16)); +        ui->label_token_verified->setToolTip(tr("Verification failed", "Tooltip"));          ui->username->setText(tr("Unspecified"));          QMessageBox::critical(this, tr("Verification failed"),                                tr("Verification failed. Check that you have entered your token " diff --git a/src/yuzu/configuration/input_profiles.cpp b/src/yuzu/configuration/input_profiles.cpp index 20b22e7de..9bb69cab1 100644 --- a/src/yuzu/configuration/input_profiles.cpp +++ b/src/yuzu/configuration/input_profiles.cpp @@ -27,7 +27,7 @@ std::filesystem::path GetNameWithoutExtension(std::filesystem::path filename) {  } // namespace -InputProfiles::InputProfiles(Core::System& system_) : system{system_} { +InputProfiles::InputProfiles() {      const auto input_profile_loc = FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "input";      if (!FS::IsDir(input_profile_loc)) { @@ -43,8 +43,8 @@ InputProfiles::InputProfiles(Core::System& system_) : system{system_} {              if (IsINI(filename) && IsProfileNameValid(name_without_ext)) {                  map_profiles.insert_or_assign( -                    name_without_ext, std::make_unique<Config>(system, name_without_ext, -                                                               Config::ConfigType::InputProfile)); +                    name_without_ext, +                    std::make_unique<Config>(name_without_ext, Config::ConfigType::InputProfile));              }              return true; @@ -67,6 +67,8 @@ std::vector<std::string> InputProfiles::GetInputProfileNames() {          profile_names.push_back(profile_name);      } +    std::stable_sort(profile_names.begin(), profile_names.end()); +      return profile_names;  } @@ -80,8 +82,7 @@ bool InputProfiles::CreateProfile(const std::string& profile_name, std::size_t p      }      map_profiles.insert_or_assign( -        profile_name, -        std::make_unique<Config>(system, profile_name, Config::ConfigType::InputProfile)); +        profile_name, std::make_unique<Config>(profile_name, Config::ConfigType::InputProfile));      return SaveProfile(profile_name, player_index);  } diff --git a/src/yuzu/configuration/input_profiles.h b/src/yuzu/configuration/input_profiles.h index 65fc9e62c..2bf3e4250 100644 --- a/src/yuzu/configuration/input_profiles.h +++ b/src/yuzu/configuration/input_profiles.h @@ -15,7 +15,7 @@ class Config;  class InputProfiles {  public: -    explicit InputProfiles(Core::System& system_); +    explicit InputProfiles();      virtual ~InputProfiles();      std::vector<std::string> GetInputProfileNames(); @@ -31,6 +31,4 @@ private:      bool ProfileExistsInMap(const std::string& profile_name) const;      std::unordered_map<std::string, std::unique_ptr<Config>> map_profiles; - -    Core::System& system;  }; | 
