diff options
| author | 2023-04-01 09:49:08 -0400 | |
|---|---|---|
| committer | 2023-04-01 09:49:08 -0400 | |
| commit | b2772bcb0d994a9646282e98aca5d97b70f843f4 (patch) | |
| tree | d2a1f4b3990c946d63652c23361174a33cd3e782 | |
| parent | Merge pull request #9999 from german77/new_hid_hurra (diff) | |
| parent | applet: controller: Implement cancel button (diff) | |
| download | yuzu-b2772bcb0d994a9646282e98aca5d97b70f843f4.tar.gz yuzu-b2772bcb0d994a9646282e98aca5d97b70f843f4.tar.xz yuzu-b2772bcb0d994a9646282e98aca5d97b70f843f4.zip | |
Merge pull request #9997 from german77/cancel_controller
applet: controller: Implement cancel button
| -rw-r--r-- | src/core/frontend/applets/controller.cpp | 2 | ||||
| -rw-r--r-- | src/core/frontend/applets/controller.h | 2 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/applet_controller.cpp | 12 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/applet_controller.h | 9 | ||||
| -rw-r--r-- | src/yuzu/applets/qt_controller.cpp | 8 | ||||
| -rw-r--r-- | src/yuzu/applets/qt_controller.h | 2 | ||||
| -rw-r--r-- | src/yuzu/applets/qt_controller.ui | 8 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 7 | ||||
| -rw-r--r-- | src/yuzu/main.h | 2 |
9 files changed, 33 insertions, 19 deletions
diff --git a/src/core/frontend/applets/controller.cpp b/src/core/frontend/applets/controller.cpp index 8e586e938..3300d4f79 100644 --- a/src/core/frontend/applets/controller.cpp +++ b/src/core/frontend/applets/controller.cpp | |||
| @@ -71,7 +71,7 @@ void DefaultControllerApplet::ReconfigureControllers(ReconfigureCallback callbac | |||
| 71 | } | 71 | } |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | callback(); | 74 | callback(true); |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | } // namespace Core::Frontend | 77 | } // namespace Core::Frontend |
diff --git a/src/core/frontend/applets/controller.h b/src/core/frontend/applets/controller.h index 5c488387d..19a2db6bf 100644 --- a/src/core/frontend/applets/controller.h +++ b/src/core/frontend/applets/controller.h | |||
| @@ -37,7 +37,7 @@ struct ControllerParameters { | |||
| 37 | 37 | ||
| 38 | class ControllerApplet : public Applet { | 38 | class ControllerApplet : public Applet { |
| 39 | public: | 39 | public: |
| 40 | using ReconfigureCallback = std::function<void()>; | 40 | using ReconfigureCallback = std::function<void(bool)>; |
| 41 | 41 | ||
| 42 | virtual ~ControllerApplet(); | 42 | virtual ~ControllerApplet(); |
| 43 | 43 | ||
diff --git a/src/core/hle/service/am/applets/applet_controller.cpp b/src/core/hle/service/am/applets/applet_controller.cpp index 2d1d115d7..9840d2547 100644 --- a/src/core/hle/service/am/applets/applet_controller.cpp +++ b/src/core/hle/service/am/applets/applet_controller.cpp | |||
| @@ -224,7 +224,8 @@ void Controller::Execute() { | |||
| 224 | parameters.allow_dual_joycons, parameters.allow_left_joycon, | 224 | parameters.allow_dual_joycons, parameters.allow_left_joycon, |
| 225 | parameters.allow_right_joycon); | 225 | parameters.allow_right_joycon); |
| 226 | 226 | ||
| 227 | frontend.ReconfigureControllers([this] { ConfigurationComplete(); }, parameters); | 227 | frontend.ReconfigureControllers( |
| 228 | [this](bool is_success) { ConfigurationComplete(is_success); }, parameters); | ||
| 228 | break; | 229 | break; |
| 229 | } | 230 | } |
| 230 | case ControllerSupportMode::ShowControllerStrapGuide: | 231 | case ControllerSupportMode::ShowControllerStrapGuide: |
| @@ -232,16 +233,16 @@ void Controller::Execute() { | |||
| 232 | case ControllerSupportMode::ShowControllerKeyRemappingForSystem: | 233 | case ControllerSupportMode::ShowControllerKeyRemappingForSystem: |
| 233 | UNIMPLEMENTED_MSG("ControllerSupportMode={} is not implemented", | 234 | UNIMPLEMENTED_MSG("ControllerSupportMode={} is not implemented", |
| 234 | controller_private_arg.mode); | 235 | controller_private_arg.mode); |
| 235 | ConfigurationComplete(); | 236 | ConfigurationComplete(true); |
| 236 | break; | 237 | break; |
| 237 | default: { | 238 | default: { |
| 238 | ConfigurationComplete(); | 239 | ConfigurationComplete(true); |
| 239 | break; | 240 | break; |
| 240 | } | 241 | } |
| 241 | } | 242 | } |
| 242 | } | 243 | } |
| 243 | 244 | ||
| 244 | void Controller::ConfigurationComplete() { | 245 | void Controller::ConfigurationComplete(bool is_success) { |
| 245 | ControllerSupportResultInfo result_info{}; | 246 | ControllerSupportResultInfo result_info{}; |
| 246 | 247 | ||
| 247 | // If enable_single_mode is enabled, player_count is 1 regardless of any other parameters. | 248 | // If enable_single_mode is enabled, player_count is 1 regardless of any other parameters. |
| @@ -250,7 +251,8 @@ void Controller::ConfigurationComplete() { | |||
| 250 | 251 | ||
| 251 | result_info.selected_id = static_cast<u32>(system.HIDCore().GetFirstNpadId()); | 252 | result_info.selected_id = static_cast<u32>(system.HIDCore().GetFirstNpadId()); |
| 252 | 253 | ||
| 253 | result_info.result = 0; | 254 | result_info.result = |
| 255 | is_success ? ControllerSupportResult::Success : ControllerSupportResult::Cancel; | ||
| 254 | 256 | ||
| 255 | LOG_DEBUG(Service_HID, "Result Info: player_count={}, selected_id={}, result={}", | 257 | LOG_DEBUG(Service_HID, "Result Info: player_count={}, selected_id={}, result={}", |
| 256 | result_info.player_count, result_info.selected_id, result_info.result); | 258 | result_info.player_count, result_info.selected_id, result_info.result); |
diff --git a/src/core/hle/service/am/applets/applet_controller.h b/src/core/hle/service/am/applets/applet_controller.h index 1fbabee11..f6c64f633 100644 --- a/src/core/hle/service/am/applets/applet_controller.h +++ b/src/core/hle/service/am/applets/applet_controller.h | |||
| @@ -48,6 +48,11 @@ enum class ControllerSupportCaller : u8 { | |||
| 48 | MaxControllerSupportCaller, | 48 | MaxControllerSupportCaller, |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | enum class ControllerSupportResult : u32 { | ||
| 52 | Success = 0, | ||
| 53 | Cancel = 2, | ||
| 54 | }; | ||
| 55 | |||
| 51 | struct ControllerSupportArgPrivate { | 56 | struct ControllerSupportArgPrivate { |
| 52 | u32 arg_private_size{}; | 57 | u32 arg_private_size{}; |
| 53 | u32 arg_size{}; | 58 | u32 arg_size{}; |
| @@ -112,7 +117,7 @@ struct ControllerSupportResultInfo { | |||
| 112 | s8 player_count{}; | 117 | s8 player_count{}; |
| 113 | INSERT_PADDING_BYTES(3); | 118 | INSERT_PADDING_BYTES(3); |
| 114 | u32 selected_id{}; | 119 | u32 selected_id{}; |
| 115 | u32 result{}; | 120 | ControllerSupportResult result{}; |
| 116 | }; | 121 | }; |
| 117 | static_assert(sizeof(ControllerSupportResultInfo) == 0xC, | 122 | static_assert(sizeof(ControllerSupportResultInfo) == 0xC, |
| 118 | "ControllerSupportResultInfo has incorrect size."); | 123 | "ControllerSupportResultInfo has incorrect size."); |
| @@ -131,7 +136,7 @@ public: | |||
| 131 | void Execute() override; | 136 | void Execute() override; |
| 132 | Result RequestExit() override; | 137 | Result RequestExit() override; |
| 133 | 138 | ||
| 134 | void ConfigurationComplete(); | 139 | void ConfigurationComplete(bool is_success); |
| 135 | 140 | ||
| 136 | private: | 141 | private: |
| 137 | const Core::Frontend::ControllerApplet& frontend; | 142 | const Core::Frontend::ControllerApplet& frontend; |
diff --git a/src/yuzu/applets/qt_controller.cpp b/src/yuzu/applets/qt_controller.cpp index 79018a7f6..00aafb8f8 100644 --- a/src/yuzu/applets/qt_controller.cpp +++ b/src/yuzu/applets/qt_controller.cpp | |||
| @@ -300,7 +300,7 @@ bool QtControllerSelectorDialog::CheckIfParametersMet() { | |||
| 300 | if (num_connected_players < min_supported_players || | 300 | if (num_connected_players < min_supported_players || |
| 301 | num_connected_players > max_supported_players) { | 301 | num_connected_players > max_supported_players) { |
| 302 | parameters_met = false; | 302 | parameters_met = false; |
| 303 | ui->buttonBox->setEnabled(parameters_met); | 303 | ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(parameters_met); |
| 304 | return parameters_met; | 304 | return parameters_met; |
| 305 | } | 305 | } |
| 306 | 306 | ||
| @@ -327,7 +327,7 @@ bool QtControllerSelectorDialog::CheckIfParametersMet() { | |||
| 327 | }(); | 327 | }(); |
| 328 | 328 | ||
| 329 | parameters_met = all_controllers_compatible; | 329 | parameters_met = all_controllers_compatible; |
| 330 | ui->buttonBox->setEnabled(parameters_met); | 330 | ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(parameters_met); |
| 331 | return parameters_met; | 331 | return parameters_met; |
| 332 | } | 332 | } |
| 333 | 333 | ||
| @@ -697,8 +697,8 @@ void QtControllerSelector::ReconfigureControllers( | |||
| 697 | emit MainWindowReconfigureControllers(parameters); | 697 | emit MainWindowReconfigureControllers(parameters); |
| 698 | } | 698 | } |
| 699 | 699 | ||
| 700 | void QtControllerSelector::MainWindowReconfigureFinished() { | 700 | void QtControllerSelector::MainWindowReconfigureFinished(bool is_success) { |
| 701 | if (callback) { | 701 | if (callback) { |
| 702 | callback(); | 702 | callback(is_success); |
| 703 | } | 703 | } |
| 704 | } | 704 | } |
diff --git a/src/yuzu/applets/qt_controller.h b/src/yuzu/applets/qt_controller.h index 2ef7e488f..2fdc35857 100644 --- a/src/yuzu/applets/qt_controller.h +++ b/src/yuzu/applets/qt_controller.h | |||
| @@ -167,7 +167,7 @@ signals: | |||
| 167 | void MainWindowRequestExit() const; | 167 | void MainWindowRequestExit() const; |
| 168 | 168 | ||
| 169 | private: | 169 | private: |
| 170 | void MainWindowReconfigureFinished(); | 170 | void MainWindowReconfigureFinished(bool is_success); |
| 171 | 171 | ||
| 172 | mutable ReconfigureCallback callback; | 172 | mutable ReconfigureCallback callback; |
| 173 | }; | 173 | }; |
diff --git a/src/yuzu/applets/qt_controller.ui b/src/yuzu/applets/qt_controller.ui index f5eccba70..729e921ee 100644 --- a/src/yuzu/applets/qt_controller.ui +++ b/src/yuzu/applets/qt_controller.ui | |||
| @@ -2629,7 +2629,7 @@ | |||
| 2629 | <bool>true</bool> | 2629 | <bool>true</bool> |
| 2630 | </property> | 2630 | </property> |
| 2631 | <property name="standardButtons"> | 2631 | <property name="standardButtons"> |
| 2632 | <set>QDialogButtonBox::Ok</set> | 2632 | <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
| 2633 | </property> | 2633 | </property> |
| 2634 | </widget> | 2634 | </widget> |
| 2635 | </item> | 2635 | </item> |
| @@ -2649,5 +2649,11 @@ | |||
| 2649 | <receiver>QtControllerSelectorDialog</receiver> | 2649 | <receiver>QtControllerSelectorDialog</receiver> |
| 2650 | <slot>accept()</slot> | 2650 | <slot>accept()</slot> |
| 2651 | </connection> | 2651 | </connection> |
| 2652 | <connection> | ||
| 2653 | <sender>buttonBox</sender> | ||
| 2654 | <signal>rejected()</signal> | ||
| 2655 | <receiver>QtControllerSelectorDialog</receiver> | ||
| 2656 | <slot>reject()</slot> | ||
| 2657 | </connection> | ||
| 2652 | </connections> | 2658 | </connections> |
| 2653 | </ui> | 2659 | </ui> |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 0c60a90cb..2ebfef551 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -634,15 +634,16 @@ void GMainWindow::ControllerSelectorReconfigureControllers( | |||
| 634 | Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | | 634 | Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | |
| 635 | Qt::WindowSystemMenuHint); | 635 | Qt::WindowSystemMenuHint); |
| 636 | controller_applet->setWindowModality(Qt::WindowModal); | 636 | controller_applet->setWindowModality(Qt::WindowModal); |
| 637 | controller_applet->exec(); | 637 | bool is_success = controller_applet->exec() != QDialog::Rejected; |
| 638 | |||
| 639 | emit ControllerSelectorReconfigureFinished(); | ||
| 640 | 638 | ||
| 641 | // Don't forget to apply settings. | 639 | // Don't forget to apply settings. |
| 640 | system->HIDCore().DisableAllControllerConfiguration(); | ||
| 642 | system->ApplySettings(); | 641 | system->ApplySettings(); |
| 643 | config->Save(); | 642 | config->Save(); |
| 644 | 643 | ||
| 645 | UpdateStatusButtons(); | 644 | UpdateStatusButtons(); |
| 645 | |||
| 646 | emit ControllerSelectorReconfigureFinished(is_success); | ||
| 646 | } | 647 | } |
| 647 | 648 | ||
| 648 | void GMainWindow::ControllerSelectorRequestExit() { | 649 | void GMainWindow::ControllerSelectorRequestExit() { |
diff --git a/src/yuzu/main.h b/src/yuzu/main.h index a99938eaa..58a65bd33 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h | |||
| @@ -165,7 +165,7 @@ signals: | |||
| 165 | 165 | ||
| 166 | void AmiiboSettingsFinished(bool is_success, const std::string& name); | 166 | void AmiiboSettingsFinished(bool is_success, const std::string& name); |
| 167 | 167 | ||
| 168 | void ControllerSelectorReconfigureFinished(); | 168 | void ControllerSelectorReconfigureFinished(bool is_success); |
| 169 | 169 | ||
| 170 | void ErrorDisplayFinished(); | 170 | void ErrorDisplayFinished(); |
| 171 | 171 | ||