From 873d26b335d9b43d51100083a1b53f8733cb93b0 Mon Sep 17 00:00:00 2001
From: german77 <juangerman-13@hotmail.com>
Date: Fri, 7 Jan 2022 16:55:55 -0600
Subject: [PATCH] yuzu: Use pad parameter to choose the correct controller

---
 src/core/hid/emulated_controller.cpp              |  8 ++++++--
 src/yuzu/configuration/configure_input_player.cpp | 15 ++++++++-------
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp
index 71fc058074..52a56ef1aa 100644
--- a/src/core/hid/emulated_controller.cpp
+++ b/src/core/hid/emulated_controller.cpp
@@ -389,7 +389,8 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices(
             devices.begin(), devices.end(), [param](const Common::ParamPackage param_) {
                 return param.Get("engine", "") == param_.Get("engine", "") &&
                        param.Get("guid", "") == param_.Get("guid", "") &&
-                       param.Get("port", 0) == param_.Get("port", 0);
+                       param.Get("port", 0) == param_.Get("port", 0) &&
+                       param.Get("pad", 0) == param_.Get("pad", 0);
             });
         if (devices_it != devices.end()) {
             continue;
@@ -398,6 +399,7 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices(
         device.Set("engine", param.Get("engine", ""));
         device.Set("guid", param.Get("guid", ""));
         device.Set("port", param.Get("port", 0));
+        device.Set("pad", param.Get("pad", 0));
         devices.push_back(device);
     }
 
@@ -412,7 +414,8 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices(
             devices.begin(), devices.end(), [param](const Common::ParamPackage param_) {
                 return param.Get("engine", "") == param_.Get("engine", "") &&
                        param.Get("guid", "") == param_.Get("guid", "") &&
-                       param.Get("port", 0) == param_.Get("port", 0);
+                       param.Get("port", 0) == param_.Get("port", 0) &&
+                       param.Get("pad", 0) == param_.Get("pad", 0);
             });
         if (devices_it != devices.end()) {
             continue;
@@ -421,6 +424,7 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices(
         device.Set("engine", param.Get("engine", ""));
         device.Set("guid", param.Get("guid", ""));
         device.Set("port", param.Get("port", 0));
+        device.Set("pad", param.Get("pad", 0));
         devices.push_back(device);
     }
     return devices;
diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp
index 8c6249fc21..b9342466eb 100644
--- a/src/yuzu/configuration/configure_input_player.cpp
+++ b/src/yuzu/configuration/configure_input_player.cpp
@@ -747,15 +747,16 @@ void ConfigureInputPlayer::UpdateInputDeviceCombobox() {
     const auto first_engine = devices[0].Get("engine", "");
     const auto first_guid = devices[0].Get("guid", "");
     const auto first_port = devices[0].Get("port", 0);
+    const auto first_pad = devices[0].Get("pad", 0);
 
     if (devices.size() == 1) {
-        const auto devices_it =
-            std::find_if(input_devices.begin(), input_devices.end(),
-                         [first_engine, first_guid, first_port](const Common::ParamPackage param) {
-                             return param.Get("engine", "") == first_engine &&
-                                    param.Get("guid", "") == first_guid &&
-                                    param.Get("port", 0) == first_port;
-                         });
+        const auto devices_it = std::find_if(
+            input_devices.begin(), input_devices.end(),
+            [first_engine, first_guid, first_port, first_pad](const Common::ParamPackage param) {
+                return param.Get("engine", "") == first_engine &&
+                       param.Get("guid", "") == first_guid && param.Get("port", 0) == first_port &&
+                       param.Get("pad", 0) == first_pad;
+            });
         const int device_index =
             devices_it != input_devices.end()
                 ? static_cast<int>(std::distance(input_devices.begin(), devices_it))