From 7f8335f4ae4c87764faf91c1d866bded95d1e6ad Mon Sep 17 00:00:00 2001
From: lat9nq <22451773+lat9nq@users.noreply.github.com>
Date: Mon, 21 Aug 2023 16:33:56 -0400
Subject: [PATCH] config(qt): Sanitize docked handheld controller

---
 src/yuzu/configuration/configure_per_game.cpp | 8 ++++++++
 src/yuzu/configuration/configure_system.cpp   | 5 +++++
 2 files changed, 13 insertions(+)

diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp
index 4f9e8db083..e371f902e6 100644
--- a/src/yuzu/configuration/configure_per_game.cpp
+++ b/src/yuzu/configuration/configure_per_game.cpp
@@ -18,6 +18,7 @@
 
 #include "common/fs/fs_util.h"
 #include "common/settings_enums.h"
+#include "common/settings_input.h"
 #include "configuration/shared_widget.h"
 #include "core/core.h"
 #include "core/file_sys/control_metadata.h"
@@ -98,6 +99,13 @@ void ConfigurePerGame::ApplyConfiguration() {
     addons_tab->ApplyConfiguration();
     input_tab->ApplyConfiguration();
 
+    if (Settings::values.use_docked_mode.GetValue() == Settings::ConsoleMode::Docked &&
+        Settings::values.players.GetValue()[0].controller_type ==
+            Settings::ControllerType::Handheld) {
+        Settings::values.use_docked_mode.SetValue(Settings::ConsoleMode::Handheld);
+        Settings::values.use_docked_mode.SetGlobal(true);
+    }
+
     system.ApplySettings();
     Settings::LogSettings();
 
diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp
index c4833f4e70..0c8e5c8b4a 100644
--- a/src/yuzu/configuration/configure_system.cpp
+++ b/src/yuzu/configuration/configure_system.cpp
@@ -106,6 +106,11 @@ void ConfigureSystem::Setup(const ConfigurationShared::Builder& builder) {
     push(Settings::values.linkage.by_category[Settings::Category::System]);
 
     for (auto setting : settings) {
+        if (setting->Id() == Settings::values.use_docked_mode.Id() &&
+            Settings::IsConfiguringGlobal()) {
+            continue;
+        }
+
         ConfigurationShared::Widget* widget = builder.BuildWidget(setting, apply_funcs);
 
         if (widget == nullptr) {
-- 
GitLab