diff options
| -rw-r--r-- | src/yuzu/configuration/configure_input.cpp | 36 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.h | 1 |
2 files changed, 27 insertions, 10 deletions
diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index e8f9ebfd8..5a48e388b 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp | |||
| @@ -115,17 +115,9 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem, | |||
| 115 | for (std::size_t i = 0; i < player_tabs.size(); ++i) { | 115 | for (std::size_t i = 0; i < player_tabs.size(); ++i) { |
| 116 | player_tabs[i]->setLayout(new QHBoxLayout(player_tabs[i])); | 116 | player_tabs[i]->setLayout(new QHBoxLayout(player_tabs[i])); |
| 117 | player_tabs[i]->layout()->addWidget(player_controllers[i]); | 117 | player_tabs[i]->layout()->addWidget(player_controllers[i]); |
| 118 | connect(player_controllers[i], &ConfigureInputPlayer::Connected, [&, i](bool is_connected) { | 118 | connect(player_connected[i], &QCheckBox::clicked, [this, i](int checked) { |
| 119 | // Ensures that the controllers are always connected in sequential order | 119 | // Ensures that the controllers are always connected in sequential order |
| 120 | if (is_connected) { | 120 | this->propagateMouseClickOnPlayers(i, checked, true); |
| 121 | for (std::size_t index = 0; index <= i; ++index) { | ||
| 122 | player_connected[index]->setChecked(is_connected); | ||
| 123 | } | ||
| 124 | } else { | ||
| 125 | for (std::size_t index = i; index < player_tabs.size(); ++index) { | ||
| 126 | player_connected[index]->setChecked(is_connected); | ||
| 127 | } | ||
| 128 | } | ||
| 129 | }); | 121 | }); |
| 130 | connect(player_controllers[i], &ConfigureInputPlayer::RefreshInputDevices, this, | 122 | connect(player_controllers[i], &ConfigureInputPlayer::RefreshInputDevices, this, |
| 131 | &ConfigureInput::UpdateAllInputDevices); | 123 | &ConfigureInput::UpdateAllInputDevices); |
| @@ -183,6 +175,30 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem, | |||
| 183 | LoadConfiguration(); | 175 | LoadConfiguration(); |
| 184 | } | 176 | } |
| 185 | 177 | ||
| 178 | void ConfigureInput::propagateMouseClickOnPlayers(size_t player_index, bool checked, bool origin) { | ||
| 179 | // Origin has already been toggled | ||
| 180 | if (!origin) { | ||
| 181 | player_connected[player_index]->setChecked(checked); | ||
| 182 | } | ||
| 183 | |||
| 184 | if (checked) { | ||
| 185 | // Check all previous buttons when checked | ||
| 186 | if (player_index > 0) { | ||
| 187 | propagateMouseClickOnPlayers(player_index - 1, checked, false); | ||
| 188 | } | ||
| 189 | } else { | ||
| 190 | // Unchecked all following buttons when unchecked | ||
| 191 | if (player_index < player_tabs.size() - 1) { | ||
| 192 | // Reconnect current player if it was the last one checked | ||
| 193 | // (player number was reduced by more than one) | ||
| 194 | if (origin && player_connected[player_index + 1]->checkState() == Qt::Checked) { | ||
| 195 | player_connected[player_index]->setCheckState(Qt::Checked); | ||
| 196 | } | ||
| 197 | propagateMouseClickOnPlayers(player_index + 1, checked, false); | ||
| 198 | } | ||
| 199 | } | ||
| 200 | } | ||
| 201 | |||
| 186 | QList<QWidget*> ConfigureInput::GetSubTabs() const { | 202 | QList<QWidget*> ConfigureInput::GetSubTabs() const { |
| 187 | return { | 203 | return { |
| 188 | ui->tabPlayer1, ui->tabPlayer2, ui->tabPlayer3, ui->tabPlayer4, ui->tabPlayer5, | 204 | ui->tabPlayer1, ui->tabPlayer2, ui->tabPlayer3, ui->tabPlayer4, ui->tabPlayer5, |
diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h index c89189c36..abb7f7089 100644 --- a/src/yuzu/configuration/configure_input.h +++ b/src/yuzu/configuration/configure_input.h | |||
| @@ -56,6 +56,7 @@ private: | |||
| 56 | void UpdateDockedState(bool is_handheld); | 56 | void UpdateDockedState(bool is_handheld); |
| 57 | void UpdateAllInputDevices(); | 57 | void UpdateAllInputDevices(); |
| 58 | void UpdateAllInputProfiles(std::size_t player_index); | 58 | void UpdateAllInputProfiles(std::size_t player_index); |
| 59 | void propagateMouseClickOnPlayers(size_t player_index, bool origin, bool checked); | ||
| 59 | 60 | ||
| 60 | /// Load configuration settings. | 61 | /// Load configuration settings. |
| 61 | void LoadConfiguration(); | 62 | void LoadConfiguration(); |