diff options
Diffstat (limited to 'src')
38 files changed, 250 insertions, 69 deletions
diff --git a/src/core/frontend/applets/applet.h b/src/core/frontend/applets/applet.h new file mode 100644 index 000000000..77fffe306 --- /dev/null +++ b/src/core/frontend/applets/applet.h | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | namespace Core::Frontend { | ||
| 7 | |||
| 8 | class Applet { | ||
| 9 | public: | ||
| 10 | virtual ~Applet() = default; | ||
| 11 | virtual void Close() const = 0; | ||
| 12 | }; | ||
| 13 | |||
| 14 | } // namespace Core::Frontend | ||
diff --git a/src/core/frontend/applets/cabinet.cpp b/src/core/frontend/applets/cabinet.cpp index 26c7fefe3..2d501eeae 100644 --- a/src/core/frontend/applets/cabinet.cpp +++ b/src/core/frontend/applets/cabinet.cpp | |||
| @@ -10,6 +10,8 @@ namespace Core::Frontend { | |||
| 10 | 10 | ||
| 11 | CabinetApplet::~CabinetApplet() = default; | 11 | CabinetApplet::~CabinetApplet() = default; |
| 12 | 12 | ||
| 13 | void DefaultCabinetApplet::Close() const {} | ||
| 14 | |||
| 13 | void DefaultCabinetApplet::ShowCabinetApplet( | 15 | void DefaultCabinetApplet::ShowCabinetApplet( |
| 14 | const CabinetCallback& callback, const CabinetParameters& parameters, | 16 | const CabinetCallback& callback, const CabinetParameters& parameters, |
| 15 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const { | 17 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const { |
diff --git a/src/core/frontend/applets/cabinet.h b/src/core/frontend/applets/cabinet.h index c28a235c1..74dc5a4f6 100644 --- a/src/core/frontend/applets/cabinet.h +++ b/src/core/frontend/applets/cabinet.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include <functional> | 6 | #include <functional> |
| 7 | #include "core/frontend/applets/applet.h" | ||
| 7 | #include "core/hle/service/nfp/nfp_types.h" | 8 | #include "core/hle/service/nfp/nfp_types.h" |
| 8 | 9 | ||
| 9 | namespace Service::NFP { | 10 | namespace Service::NFP { |
| @@ -20,7 +21,7 @@ struct CabinetParameters { | |||
| 20 | 21 | ||
| 21 | using CabinetCallback = std::function<void(bool, const std::string&)>; | 22 | using CabinetCallback = std::function<void(bool, const std::string&)>; |
| 22 | 23 | ||
| 23 | class CabinetApplet { | 24 | class CabinetApplet : public Applet { |
| 24 | public: | 25 | public: |
| 25 | virtual ~CabinetApplet(); | 26 | virtual ~CabinetApplet(); |
| 26 | virtual void ShowCabinetApplet(const CabinetCallback& callback, | 27 | virtual void ShowCabinetApplet(const CabinetCallback& callback, |
| @@ -30,6 +31,7 @@ public: | |||
| 30 | 31 | ||
| 31 | class DefaultCabinetApplet final : public CabinetApplet { | 32 | class DefaultCabinetApplet final : public CabinetApplet { |
| 32 | public: | 33 | public: |
| 34 | void Close() const override; | ||
| 33 | void ShowCabinetApplet(const CabinetCallback& callback, const CabinetParameters& parameters, | 35 | void ShowCabinetApplet(const CabinetCallback& callback, const CabinetParameters& parameters, |
| 34 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const override; | 36 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const override; |
| 35 | }; | 37 | }; |
diff --git a/src/core/frontend/applets/controller.cpp b/src/core/frontend/applets/controller.cpp index 52919484e..8e586e938 100644 --- a/src/core/frontend/applets/controller.cpp +++ b/src/core/frontend/applets/controller.cpp | |||
| @@ -16,6 +16,8 @@ DefaultControllerApplet::DefaultControllerApplet(HID::HIDCore& hid_core_) : hid_ | |||
| 16 | 16 | ||
| 17 | DefaultControllerApplet::~DefaultControllerApplet() = default; | 17 | DefaultControllerApplet::~DefaultControllerApplet() = default; |
| 18 | 18 | ||
| 19 | void DefaultControllerApplet::Close() const {} | ||
| 20 | |||
| 19 | void DefaultControllerApplet::ReconfigureControllers(ReconfigureCallback callback, | 21 | void DefaultControllerApplet::ReconfigureControllers(ReconfigureCallback callback, |
| 20 | const ControllerParameters& parameters) const { | 22 | const ControllerParameters& parameters) const { |
| 21 | LOG_INFO(Service_HID, "called, deducing the best configuration based on the given parameters!"); | 23 | LOG_INFO(Service_HID, "called, deducing the best configuration based on the given parameters!"); |
diff --git a/src/core/frontend/applets/controller.h b/src/core/frontend/applets/controller.h index adb2feefd..5c488387d 100644 --- a/src/core/frontend/applets/controller.h +++ b/src/core/frontend/applets/controller.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <vector> | 7 | #include <vector> |
| 8 | 8 | ||
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "core/frontend/applets/applet.h" | ||
| 10 | 11 | ||
| 11 | namespace Core::HID { | 12 | namespace Core::HID { |
| 12 | class HIDCore; | 13 | class HIDCore; |
| @@ -34,7 +35,7 @@ struct ControllerParameters { | |||
| 34 | bool allow_gamecube_controller{}; | 35 | bool allow_gamecube_controller{}; |
| 35 | }; | 36 | }; |
| 36 | 37 | ||
| 37 | class ControllerApplet { | 38 | class ControllerApplet : public Applet { |
| 38 | public: | 39 | public: |
| 39 | using ReconfigureCallback = std::function<void()>; | 40 | using ReconfigureCallback = std::function<void()>; |
| 40 | 41 | ||
| @@ -49,6 +50,7 @@ public: | |||
| 49 | explicit DefaultControllerApplet(HID::HIDCore& hid_core_); | 50 | explicit DefaultControllerApplet(HID::HIDCore& hid_core_); |
| 50 | ~DefaultControllerApplet() override; | 51 | ~DefaultControllerApplet() override; |
| 51 | 52 | ||
| 53 | void Close() const override; | ||
| 52 | void ReconfigureControllers(ReconfigureCallback callback, | 54 | void ReconfigureControllers(ReconfigureCallback callback, |
| 53 | const ControllerParameters& parameters) const override; | 55 | const ControllerParameters& parameters) const override; |
| 54 | 56 | ||
diff --git a/src/core/frontend/applets/error.cpp b/src/core/frontend/applets/error.cpp index 69c2b2b4d..2e6f7a3d9 100644 --- a/src/core/frontend/applets/error.cpp +++ b/src/core/frontend/applets/error.cpp | |||
| @@ -8,6 +8,8 @@ namespace Core::Frontend { | |||
| 8 | 8 | ||
| 9 | ErrorApplet::~ErrorApplet() = default; | 9 | ErrorApplet::~ErrorApplet() = default; |
| 10 | 10 | ||
| 11 | void DefaultErrorApplet::Close() const {} | ||
| 12 | |||
| 11 | void DefaultErrorApplet::ShowError(Result error, FinishedCallback finished) const { | 13 | void DefaultErrorApplet::ShowError(Result error, FinishedCallback finished) const { |
| 12 | LOG_CRITICAL(Service_Fatal, "Application requested error display: {:04}-{:04} (raw={:08X})", | 14 | LOG_CRITICAL(Service_Fatal, "Application requested error display: {:04}-{:04} (raw={:08X})", |
| 13 | error.module.Value(), error.description.Value(), error.raw); | 15 | error.module.Value(), error.description.Value(), error.raw); |
diff --git a/src/core/frontend/applets/error.h b/src/core/frontend/applets/error.h index 884f2f653..3a12196ce 100644 --- a/src/core/frontend/applets/error.h +++ b/src/core/frontend/applets/error.h | |||
| @@ -6,11 +6,12 @@ | |||
| 6 | #include <chrono> | 6 | #include <chrono> |
| 7 | #include <functional> | 7 | #include <functional> |
| 8 | 8 | ||
| 9 | #include "core/frontend/applets/applet.h" | ||
| 9 | #include "core/hle/result.h" | 10 | #include "core/hle/result.h" |
| 10 | 11 | ||
| 11 | namespace Core::Frontend { | 12 | namespace Core::Frontend { |
| 12 | 13 | ||
| 13 | class ErrorApplet { | 14 | class ErrorApplet : public Applet { |
| 14 | public: | 15 | public: |
| 15 | using FinishedCallback = std::function<void()>; | 16 | using FinishedCallback = std::function<void()>; |
| 16 | 17 | ||
| @@ -28,6 +29,7 @@ public: | |||
| 28 | 29 | ||
| 29 | class DefaultErrorApplet final : public ErrorApplet { | 30 | class DefaultErrorApplet final : public ErrorApplet { |
| 30 | public: | 31 | public: |
| 32 | void Close() const override; | ||
| 31 | void ShowError(Result error, FinishedCallback finished) const override; | 33 | void ShowError(Result error, FinishedCallback finished) const override; |
| 32 | void ShowErrorWithTimestamp(Result error, std::chrono::seconds time, | 34 | void ShowErrorWithTimestamp(Result error, std::chrono::seconds time, |
| 33 | FinishedCallback finished) const override; | 35 | FinishedCallback finished) const override; |
diff --git a/src/core/frontend/applets/general_frontend.cpp b/src/core/frontend/applets/general_frontend.cpp index 29a00fb6f..b4b213a31 100644 --- a/src/core/frontend/applets/general_frontend.cpp +++ b/src/core/frontend/applets/general_frontend.cpp | |||
| @@ -10,6 +10,8 @@ ParentalControlsApplet::~ParentalControlsApplet() = default; | |||
| 10 | 10 | ||
| 11 | DefaultParentalControlsApplet::~DefaultParentalControlsApplet() = default; | 11 | DefaultParentalControlsApplet::~DefaultParentalControlsApplet() = default; |
| 12 | 12 | ||
| 13 | void DefaultParentalControlsApplet::Close() const {} | ||
| 14 | |||
| 13 | void DefaultParentalControlsApplet::VerifyPIN(std::function<void(bool)> finished, | 15 | void DefaultParentalControlsApplet::VerifyPIN(std::function<void(bool)> finished, |
| 14 | bool suspend_future_verification_temporarily) { | 16 | bool suspend_future_verification_temporarily) { |
| 15 | LOG_INFO(Service_AM, | 17 | LOG_INFO(Service_AM, |
| @@ -39,6 +41,8 @@ PhotoViewerApplet::~PhotoViewerApplet() = default; | |||
| 39 | 41 | ||
| 40 | DefaultPhotoViewerApplet::~DefaultPhotoViewerApplet() = default; | 42 | DefaultPhotoViewerApplet::~DefaultPhotoViewerApplet() = default; |
| 41 | 43 | ||
| 44 | void DefaultPhotoViewerApplet::Close() const {} | ||
| 45 | |||
| 42 | void DefaultPhotoViewerApplet::ShowPhotosForApplication(u64 title_id, | 46 | void DefaultPhotoViewerApplet::ShowPhotosForApplication(u64 title_id, |
| 43 | std::function<void()> finished) const { | 47 | std::function<void()> finished) const { |
| 44 | LOG_INFO(Service_AM, | 48 | LOG_INFO(Service_AM, |
diff --git a/src/core/frontend/applets/general_frontend.h b/src/core/frontend/applets/general_frontend.h index cbec8b4ad..319838ac7 100644 --- a/src/core/frontend/applets/general_frontend.h +++ b/src/core/frontend/applets/general_frontend.h | |||
| @@ -6,9 +6,11 @@ | |||
| 6 | #include <functional> | 6 | #include <functional> |
| 7 | #include "common/common_types.h" | 7 | #include "common/common_types.h" |
| 8 | 8 | ||
| 9 | #include "core/frontend/applets/applet.h" | ||
| 10 | |||
| 9 | namespace Core::Frontend { | 11 | namespace Core::Frontend { |
| 10 | 12 | ||
| 11 | class ParentalControlsApplet { | 13 | class ParentalControlsApplet : public Applet { |
| 12 | public: | 14 | public: |
| 13 | virtual ~ParentalControlsApplet(); | 15 | virtual ~ParentalControlsApplet(); |
| 14 | 16 | ||
| @@ -33,6 +35,7 @@ class DefaultParentalControlsApplet final : public ParentalControlsApplet { | |||
| 33 | public: | 35 | public: |
| 34 | ~DefaultParentalControlsApplet() override; | 36 | ~DefaultParentalControlsApplet() override; |
| 35 | 37 | ||
| 38 | void Close() const override; | ||
| 36 | void VerifyPIN(std::function<void(bool)> finished, | 39 | void VerifyPIN(std::function<void(bool)> finished, |
| 37 | bool suspend_future_verification_temporarily) override; | 40 | bool suspend_future_verification_temporarily) override; |
| 38 | void VerifyPINForSettings(std::function<void(bool)> finished) override; | 41 | void VerifyPINForSettings(std::function<void(bool)> finished) override; |
| @@ -40,7 +43,7 @@ public: | |||
| 40 | void ChangePIN(std::function<void()> finished) override; | 43 | void ChangePIN(std::function<void()> finished) override; |
| 41 | }; | 44 | }; |
| 42 | 45 | ||
| 43 | class PhotoViewerApplet { | 46 | class PhotoViewerApplet : public Applet { |
| 44 | public: | 47 | public: |
| 45 | virtual ~PhotoViewerApplet(); | 48 | virtual ~PhotoViewerApplet(); |
| 46 | 49 | ||
| @@ -52,6 +55,7 @@ class DefaultPhotoViewerApplet final : public PhotoViewerApplet { | |||
| 52 | public: | 55 | public: |
| 53 | ~DefaultPhotoViewerApplet() override; | 56 | ~DefaultPhotoViewerApplet() override; |
| 54 | 57 | ||
| 58 | void Close() const override; | ||
| 55 | void ShowPhotosForApplication(u64 title_id, std::function<void()> finished) const override; | 59 | void ShowPhotosForApplication(u64 title_id, std::function<void()> finished) const override; |
| 56 | void ShowAllPhotos(std::function<void()> finished) const override; | 60 | void ShowAllPhotos(std::function<void()> finished) const override; |
| 57 | }; | 61 | }; |
diff --git a/src/core/frontend/applets/mii_edit.cpp b/src/core/frontend/applets/mii_edit.cpp index bc8c57067..2988c3e72 100644 --- a/src/core/frontend/applets/mii_edit.cpp +++ b/src/core/frontend/applets/mii_edit.cpp | |||
| @@ -8,6 +8,8 @@ namespace Core::Frontend { | |||
| 8 | 8 | ||
| 9 | MiiEditApplet::~MiiEditApplet() = default; | 9 | MiiEditApplet::~MiiEditApplet() = default; |
| 10 | 10 | ||
| 11 | void DefaultMiiEditApplet::Close() const {} | ||
| 12 | |||
| 11 | void DefaultMiiEditApplet::ShowMiiEdit(const MiiEditCallback& callback) const { | 13 | void DefaultMiiEditApplet::ShowMiiEdit(const MiiEditCallback& callback) const { |
| 12 | LOG_WARNING(Service_AM, "(STUBBED) called"); | 14 | LOG_WARNING(Service_AM, "(STUBBED) called"); |
| 13 | 15 | ||
diff --git a/src/core/frontend/applets/mii_edit.h b/src/core/frontend/applets/mii_edit.h index d828f06ec..9d86ee658 100644 --- a/src/core/frontend/applets/mii_edit.h +++ b/src/core/frontend/applets/mii_edit.h | |||
| @@ -5,9 +5,11 @@ | |||
| 5 | 5 | ||
| 6 | #include <functional> | 6 | #include <functional> |
| 7 | 7 | ||
| 8 | #include "core/frontend/applets/applet.h" | ||
| 9 | |||
| 8 | namespace Core::Frontend { | 10 | namespace Core::Frontend { |
| 9 | 11 | ||
| 10 | class MiiEditApplet { | 12 | class MiiEditApplet : public Applet { |
| 11 | public: | 13 | public: |
| 12 | using MiiEditCallback = std::function<void()>; | 14 | using MiiEditCallback = std::function<void()>; |
| 13 | 15 | ||
| @@ -18,6 +20,7 @@ public: | |||
| 18 | 20 | ||
| 19 | class DefaultMiiEditApplet final : public MiiEditApplet { | 21 | class DefaultMiiEditApplet final : public MiiEditApplet { |
| 20 | public: | 22 | public: |
| 23 | void Close() const override; | ||
| 21 | void ShowMiiEdit(const MiiEditCallback& callback) const override; | 24 | void ShowMiiEdit(const MiiEditCallback& callback) const override; |
| 22 | }; | 25 | }; |
| 23 | 26 | ||
diff --git a/src/core/frontend/applets/profile_select.cpp b/src/core/frontend/applets/profile_select.cpp index da4cfbf87..910d20c0d 100644 --- a/src/core/frontend/applets/profile_select.cpp +++ b/src/core/frontend/applets/profile_select.cpp | |||
| @@ -9,6 +9,8 @@ namespace Core::Frontend { | |||
| 9 | 9 | ||
| 10 | ProfileSelectApplet::~ProfileSelectApplet() = default; | 10 | ProfileSelectApplet::~ProfileSelectApplet() = default; |
| 11 | 11 | ||
| 12 | void DefaultProfileSelectApplet::Close() const {} | ||
| 13 | |||
| 12 | void DefaultProfileSelectApplet::SelectProfile(SelectProfileCallback callback) const { | 14 | void DefaultProfileSelectApplet::SelectProfile(SelectProfileCallback callback) const { |
| 13 | Service::Account::ProfileManager manager; | 15 | Service::Account::ProfileManager manager; |
| 14 | callback(manager.GetUser(Settings::values.current_user.GetValue()).value_or(Common::UUID{})); | 16 | callback(manager.GetUser(Settings::values.current_user.GetValue()).value_or(Common::UUID{})); |
diff --git a/src/core/frontend/applets/profile_select.h b/src/core/frontend/applets/profile_select.h index 138429533..76e963535 100644 --- a/src/core/frontend/applets/profile_select.h +++ b/src/core/frontend/applets/profile_select.h | |||
| @@ -7,9 +7,11 @@ | |||
| 7 | #include <optional> | 7 | #include <optional> |
| 8 | #include "common/uuid.h" | 8 | #include "common/uuid.h" |
| 9 | 9 | ||
| 10 | #include "core/frontend/applets/applet.h" | ||
| 11 | |||
| 10 | namespace Core::Frontend { | 12 | namespace Core::Frontend { |
| 11 | 13 | ||
| 12 | class ProfileSelectApplet { | 14 | class ProfileSelectApplet : public Applet { |
| 13 | public: | 15 | public: |
| 14 | using SelectProfileCallback = std::function<void(std::optional<Common::UUID>)>; | 16 | using SelectProfileCallback = std::function<void(std::optional<Common::UUID>)>; |
| 15 | 17 | ||
| @@ -20,6 +22,7 @@ public: | |||
| 20 | 22 | ||
| 21 | class DefaultProfileSelectApplet final : public ProfileSelectApplet { | 23 | class DefaultProfileSelectApplet final : public ProfileSelectApplet { |
| 22 | public: | 24 | public: |
| 25 | void Close() const override; | ||
| 23 | void SelectProfile(SelectProfileCallback callback) const override; | 26 | void SelectProfile(SelectProfileCallback callback) const override; |
| 24 | }; | 27 | }; |
| 25 | 28 | ||
diff --git a/src/core/frontend/applets/software_keyboard.cpp b/src/core/frontend/applets/software_keyboard.cpp index a3720f4d7..7655d215b 100644 --- a/src/core/frontend/applets/software_keyboard.cpp +++ b/src/core/frontend/applets/software_keyboard.cpp | |||
| @@ -13,6 +13,8 @@ SoftwareKeyboardApplet::~SoftwareKeyboardApplet() = default; | |||
| 13 | 13 | ||
| 14 | DefaultSoftwareKeyboardApplet::~DefaultSoftwareKeyboardApplet() = default; | 14 | DefaultSoftwareKeyboardApplet::~DefaultSoftwareKeyboardApplet() = default; |
| 15 | 15 | ||
| 16 | void DefaultSoftwareKeyboardApplet::Close() const {} | ||
| 17 | |||
| 16 | void DefaultSoftwareKeyboardApplet::InitializeKeyboard( | 18 | void DefaultSoftwareKeyboardApplet::InitializeKeyboard( |
| 17 | bool is_inline, KeyboardInitializeParameters initialize_parameters, | 19 | bool is_inline, KeyboardInitializeParameters initialize_parameters, |
| 18 | SubmitNormalCallback submit_normal_callback_, SubmitInlineCallback submit_inline_callback_) { | 20 | SubmitNormalCallback submit_normal_callback_, SubmitInlineCallback submit_inline_callback_) { |
diff --git a/src/core/frontend/applets/software_keyboard.h b/src/core/frontend/applets/software_keyboard.h index 8aef103d3..8ed96da24 100644 --- a/src/core/frontend/applets/software_keyboard.h +++ b/src/core/frontend/applets/software_keyboard.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | #include "common/common_types.h" | 8 | #include "common/common_types.h" |
| 9 | 9 | ||
| 10 | #include "core/frontend/applets/applet.h" | ||
| 10 | #include "core/hle/service/am/applets/applet_software_keyboard_types.h" | 11 | #include "core/hle/service/am/applets/applet_software_keyboard_types.h" |
| 11 | 12 | ||
| 12 | namespace Core::Frontend { | 13 | namespace Core::Frontend { |
| @@ -52,7 +53,7 @@ struct InlineTextParameters { | |||
| 52 | s32 cursor_position; | 53 | s32 cursor_position; |
| 53 | }; | 54 | }; |
| 54 | 55 | ||
| 55 | class SoftwareKeyboardApplet { | 56 | class SoftwareKeyboardApplet : public Applet { |
| 56 | public: | 57 | public: |
| 57 | using SubmitInlineCallback = | 58 | using SubmitInlineCallback = |
| 58 | std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>; | 59 | std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>; |
| @@ -84,6 +85,8 @@ class DefaultSoftwareKeyboardApplet final : public SoftwareKeyboardApplet { | |||
| 84 | public: | 85 | public: |
| 85 | ~DefaultSoftwareKeyboardApplet() override; | 86 | ~DefaultSoftwareKeyboardApplet() override; |
| 86 | 87 | ||
| 88 | void Close() const override; | ||
| 89 | |||
| 87 | void InitializeKeyboard(bool is_inline, KeyboardInitializeParameters initialize_parameters, | 90 | void InitializeKeyboard(bool is_inline, KeyboardInitializeParameters initialize_parameters, |
| 88 | SubmitNormalCallback submit_normal_callback_, | 91 | SubmitNormalCallback submit_normal_callback_, |
| 89 | SubmitInlineCallback submit_inline_callback_) override; | 92 | SubmitInlineCallback submit_inline_callback_) override; |
diff --git a/src/core/frontend/applets/web_browser.cpp b/src/core/frontend/applets/web_browser.cpp index b09cb7102..6e703ef06 100644 --- a/src/core/frontend/applets/web_browser.cpp +++ b/src/core/frontend/applets/web_browser.cpp | |||
| @@ -10,6 +10,8 @@ WebBrowserApplet::~WebBrowserApplet() = default; | |||
| 10 | 10 | ||
| 11 | DefaultWebBrowserApplet::~DefaultWebBrowserApplet() = default; | 11 | DefaultWebBrowserApplet::~DefaultWebBrowserApplet() = default; |
| 12 | 12 | ||
| 13 | void DefaultWebBrowserApplet::Close() const {} | ||
| 14 | |||
| 13 | void DefaultWebBrowserApplet::OpenLocalWebPage(const std::string& local_url, | 15 | void DefaultWebBrowserApplet::OpenLocalWebPage(const std::string& local_url, |
| 14 | ExtractROMFSCallback extract_romfs_callback, | 16 | ExtractROMFSCallback extract_romfs_callback, |
| 15 | OpenWebPageCallback callback) const { | 17 | OpenWebPageCallback callback) const { |
diff --git a/src/core/frontend/applets/web_browser.h b/src/core/frontend/applets/web_browser.h index 4f72284ad..178bbdd3f 100644 --- a/src/core/frontend/applets/web_browser.h +++ b/src/core/frontend/applets/web_browser.h | |||
| @@ -5,11 +5,12 @@ | |||
| 5 | 5 | ||
| 6 | #include <functional> | 6 | #include <functional> |
| 7 | 7 | ||
| 8 | #include "core/frontend/applets/applet.h" | ||
| 8 | #include "core/hle/service/am/applets/applet_web_browser_types.h" | 9 | #include "core/hle/service/am/applets/applet_web_browser_types.h" |
| 9 | 10 | ||
| 10 | namespace Core::Frontend { | 11 | namespace Core::Frontend { |
| 11 | 12 | ||
| 12 | class WebBrowserApplet { | 13 | class WebBrowserApplet : public Applet { |
| 13 | public: | 14 | public: |
| 14 | using ExtractROMFSCallback = std::function<void()>; | 15 | using ExtractROMFSCallback = std::function<void()>; |
| 15 | using OpenWebPageCallback = | 16 | using OpenWebPageCallback = |
| @@ -29,6 +30,8 @@ class DefaultWebBrowserApplet final : public WebBrowserApplet { | |||
| 29 | public: | 30 | public: |
| 30 | ~DefaultWebBrowserApplet() override; | 31 | ~DefaultWebBrowserApplet() override; |
| 31 | 32 | ||
| 33 | void Close() const override; | ||
| 34 | |||
| 32 | void OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback, | 35 | void OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback, |
| 33 | OpenWebPageCallback callback) const override; | 36 | OpenWebPageCallback callback) const override; |
| 34 | 37 | ||
diff --git a/src/core/hle/service/am/applets/applet_cabinet.cpp b/src/core/hle/service/am/applets/applet_cabinet.cpp index d76a9ef5a..93c9f2a55 100644 --- a/src/core/hle/service/am/applets/applet_cabinet.cpp +++ b/src/core/hle/service/am/applets/applet_cabinet.cpp | |||
| @@ -175,7 +175,7 @@ void Cabinet::Cancel() { | |||
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | Result Cabinet::RequestExit() { | 177 | Result Cabinet::RequestExit() { |
| 178 | this->Cancel(); | 178 | frontend.Close(); |
| 179 | R_SUCCEED(); | 179 | R_SUCCEED(); |
| 180 | } | 180 | } |
| 181 | 181 | ||
diff --git a/src/core/hle/service/am/applets/applet_controller.cpp b/src/core/hle/service/am/applets/applet_controller.cpp index 11b64dbbd..2d1d115d7 100644 --- a/src/core/hle/service/am/applets/applet_controller.cpp +++ b/src/core/hle/service/am/applets/applet_controller.cpp | |||
| @@ -263,7 +263,7 @@ void Controller::ConfigurationComplete() { | |||
| 263 | } | 263 | } |
| 264 | 264 | ||
| 265 | Result Controller::RequestExit() { | 265 | Result Controller::RequestExit() { |
| 266 | this->ConfigurationComplete(); | 266 | frontend.Close(); |
| 267 | R_SUCCEED(); | 267 | R_SUCCEED(); |
| 268 | } | 268 | } |
| 269 | 269 | ||
diff --git a/src/core/hle/service/am/applets/applet_error.cpp b/src/core/hle/service/am/applets/applet_error.cpp index d6935c09d..b46ea840c 100644 --- a/src/core/hle/service/am/applets/applet_error.cpp +++ b/src/core/hle/service/am/applets/applet_error.cpp | |||
| @@ -210,7 +210,7 @@ void Error::DisplayCompleted() { | |||
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | Result Error::RequestExit() { | 212 | Result Error::RequestExit() { |
| 213 | this->DisplayCompleted(); | 213 | frontend.Close(); |
| 214 | R_SUCCEED(); | 214 | R_SUCCEED(); |
| 215 | } | 215 | } |
| 216 | 216 | ||
diff --git a/src/core/hle/service/am/applets/applet_general_backend.cpp b/src/core/hle/service/am/applets/applet_general_backend.cpp index baf680040..8b352020e 100644 --- a/src/core/hle/service/am/applets/applet_general_backend.cpp +++ b/src/core/hle/service/am/applets/applet_general_backend.cpp | |||
| @@ -151,7 +151,7 @@ void Auth::AuthFinished(bool is_successful) { | |||
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | Result Auth::RequestExit() { | 153 | Result Auth::RequestExit() { |
| 154 | this->AuthFinished(false); | 154 | frontend.Close(); |
| 155 | R_SUCCEED(); | 155 | R_SUCCEED(); |
| 156 | } | 156 | } |
| 157 | 157 | ||
| @@ -208,7 +208,7 @@ void PhotoViewer::ViewFinished() { | |||
| 208 | } | 208 | } |
| 209 | 209 | ||
| 210 | Result PhotoViewer::RequestExit() { | 210 | Result PhotoViewer::RequestExit() { |
| 211 | this->ViewFinished(); | 211 | frontend.Close(); |
| 212 | R_SUCCEED(); | 212 | R_SUCCEED(); |
| 213 | } | 213 | } |
| 214 | 214 | ||
diff --git a/src/core/hle/service/am/applets/applet_mii_edit.cpp b/src/core/hle/service/am/applets/applet_mii_edit.cpp index a4a3f3cfa..d1f652c09 100644 --- a/src/core/hle/service/am/applets/applet_mii_edit.cpp +++ b/src/core/hle/service/am/applets/applet_mii_edit.cpp | |||
| @@ -136,7 +136,7 @@ void MiiEdit::MiiEditOutputForCharInfoEditing(MiiEditResult result, | |||
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | Result MiiEdit::RequestExit() { | 138 | Result MiiEdit::RequestExit() { |
| 139 | this->MiiEditOutput(MiiEditResult::Cancel, -1); | 139 | frontend.Close(); |
| 140 | R_SUCCEED(); | 140 | R_SUCCEED(); |
| 141 | } | 141 | } |
| 142 | 142 | ||
diff --git a/src/core/hle/service/am/applets/applet_profile_select.cpp b/src/core/hle/service/am/applets/applet_profile_select.cpp index 5486d80dc..07abc2563 100644 --- a/src/core/hle/service/am/applets/applet_profile_select.cpp +++ b/src/core/hle/service/am/applets/applet_profile_select.cpp | |||
| @@ -74,7 +74,7 @@ void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) { | |||
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | Result ProfileSelect::RequestExit() { | 76 | Result ProfileSelect::RequestExit() { |
| 77 | this->SelectionComplete(std::nullopt); | 77 | frontend.Close(); |
| 78 | R_SUCCEED(); | 78 | R_SUCCEED(); |
| 79 | } | 79 | } |
| 80 | 80 | ||
diff --git a/src/core/hle/service/am/applets/applet_software_keyboard.cpp b/src/core/hle/service/am/applets/applet_software_keyboard.cpp index 6f7499731..4145bb84f 100644 --- a/src/core/hle/service/am/applets/applet_software_keyboard.cpp +++ b/src/core/hle/service/am/applets/applet_software_keyboard.cpp | |||
| @@ -771,7 +771,7 @@ void SoftwareKeyboard::ExitKeyboard() { | |||
| 771 | } | 771 | } |
| 772 | 772 | ||
| 773 | Result SoftwareKeyboard::RequestExit() { | 773 | Result SoftwareKeyboard::RequestExit() { |
| 774 | this->ExitKeyboard(); | 774 | frontend.Close(); |
| 775 | R_SUCCEED(); | 775 | R_SUCCEED(); |
| 776 | } | 776 | } |
| 777 | 777 | ||
diff --git a/src/core/hle/service/am/applets/applet_web_browser.cpp b/src/core/hle/service/am/applets/applet_web_browser.cpp index 59359e4d3..2accf7898 100644 --- a/src/core/hle/service/am/applets/applet_web_browser.cpp +++ b/src/core/hle/service/am/applets/applet_web_browser.cpp | |||
| @@ -364,7 +364,7 @@ void WebBrowser::WebBrowserExit(WebExitReason exit_reason, std::string last_url) | |||
| 364 | } | 364 | } |
| 365 | 365 | ||
| 366 | Result WebBrowser::RequestExit() { | 366 | Result WebBrowser::RequestExit() { |
| 367 | this->WebBrowserExit(WebExitReason::ExitRequested); | 367 | frontend.Close(); |
| 368 | R_SUCCEED(); | 368 | R_SUCCEED(); |
| 369 | } | 369 | } |
| 370 | 370 | ||
diff --git a/src/yuzu/applets/qt_amiibo_settings.cpp b/src/yuzu/applets/qt_amiibo_settings.cpp index 93ad4b4f9..4559df5b1 100644 --- a/src/yuzu/applets/qt_amiibo_settings.cpp +++ b/src/yuzu/applets/qt_amiibo_settings.cpp | |||
| @@ -245,12 +245,19 @@ void QtAmiiboSettingsDialog::SetSettingsDescription() { | |||
| 245 | QtAmiiboSettings::QtAmiiboSettings(GMainWindow& parent) { | 245 | QtAmiiboSettings::QtAmiiboSettings(GMainWindow& parent) { |
| 246 | connect(this, &QtAmiiboSettings::MainWindowShowAmiiboSettings, &parent, | 246 | connect(this, &QtAmiiboSettings::MainWindowShowAmiiboSettings, &parent, |
| 247 | &GMainWindow::AmiiboSettingsShowDialog, Qt::QueuedConnection); | 247 | &GMainWindow::AmiiboSettingsShowDialog, Qt::QueuedConnection); |
| 248 | connect(this, &QtAmiiboSettings::MainWindowRequestExit, &parent, | ||
| 249 | &GMainWindow::AmiiboSettingsRequestExit, Qt::QueuedConnection); | ||
| 248 | connect(&parent, &GMainWindow::AmiiboSettingsFinished, this, | 250 | connect(&parent, &GMainWindow::AmiiboSettingsFinished, this, |
| 249 | &QtAmiiboSettings::MainWindowFinished, Qt::QueuedConnection); | 251 | &QtAmiiboSettings::MainWindowFinished, Qt::QueuedConnection); |
| 250 | } | 252 | } |
| 251 | 253 | ||
| 252 | QtAmiiboSettings::~QtAmiiboSettings() = default; | 254 | QtAmiiboSettings::~QtAmiiboSettings() = default; |
| 253 | 255 | ||
| 256 | void QtAmiiboSettings::Close() const { | ||
| 257 | callback = {}; | ||
| 258 | emit MainWindowRequestExit(); | ||
| 259 | } | ||
| 260 | |||
| 254 | void QtAmiiboSettings::ShowCabinetApplet( | 261 | void QtAmiiboSettings::ShowCabinetApplet( |
| 255 | const Core::Frontend::CabinetCallback& callback_, | 262 | const Core::Frontend::CabinetCallback& callback_, |
| 256 | const Core::Frontend::CabinetParameters& parameters, | 263 | const Core::Frontend::CabinetParameters& parameters, |
| @@ -260,5 +267,7 @@ void QtAmiiboSettings::ShowCabinetApplet( | |||
| 260 | } | 267 | } |
| 261 | 268 | ||
| 262 | void QtAmiiboSettings::MainWindowFinished(bool is_success, const std::string& name) { | 269 | void QtAmiiboSettings::MainWindowFinished(bool is_success, const std::string& name) { |
| 263 | callback(is_success, name); | 270 | if (callback) { |
| 271 | callback(is_success, name); | ||
| 272 | } | ||
| 264 | } | 273 | } |
diff --git a/src/yuzu/applets/qt_amiibo_settings.h b/src/yuzu/applets/qt_amiibo_settings.h index 930c96739..bc389a33f 100644 --- a/src/yuzu/applets/qt_amiibo_settings.h +++ b/src/yuzu/applets/qt_amiibo_settings.h | |||
| @@ -68,6 +68,7 @@ public: | |||
| 68 | explicit QtAmiiboSettings(GMainWindow& parent); | 68 | explicit QtAmiiboSettings(GMainWindow& parent); |
| 69 | ~QtAmiiboSettings() override; | 69 | ~QtAmiiboSettings() override; |
| 70 | 70 | ||
| 71 | void Close() const override; | ||
| 71 | void ShowCabinetApplet(const Core::Frontend::CabinetCallback& callback_, | 72 | void ShowCabinetApplet(const Core::Frontend::CabinetCallback& callback_, |
| 72 | const Core::Frontend::CabinetParameters& parameters, | 73 | const Core::Frontend::CabinetParameters& parameters, |
| 73 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const override; | 74 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const override; |
| @@ -75,6 +76,7 @@ public: | |||
| 75 | signals: | 76 | signals: |
| 76 | void MainWindowShowAmiiboSettings(const Core::Frontend::CabinetParameters& parameters, | 77 | void MainWindowShowAmiiboSettings(const Core::Frontend::CabinetParameters& parameters, |
| 77 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const; | 78 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const; |
| 79 | void MainWindowRequestExit() const; | ||
| 78 | 80 | ||
| 79 | private: | 81 | private: |
| 80 | void MainWindowFinished(bool is_success, const std::string& name); | 82 | void MainWindowFinished(bool is_success, const std::string& name); |
diff --git a/src/yuzu/applets/qt_controller.cpp b/src/yuzu/applets/qt_controller.cpp index c30b54499..79018a7f6 100644 --- a/src/yuzu/applets/qt_controller.cpp +++ b/src/yuzu/applets/qt_controller.cpp | |||
| @@ -678,12 +678,19 @@ void QtControllerSelectorDialog::DisableUnsupportedPlayers() { | |||
| 678 | QtControllerSelector::QtControllerSelector(GMainWindow& parent) { | 678 | QtControllerSelector::QtControllerSelector(GMainWindow& parent) { |
| 679 | connect(this, &QtControllerSelector::MainWindowReconfigureControllers, &parent, | 679 | connect(this, &QtControllerSelector::MainWindowReconfigureControllers, &parent, |
| 680 | &GMainWindow::ControllerSelectorReconfigureControllers, Qt::QueuedConnection); | 680 | &GMainWindow::ControllerSelectorReconfigureControllers, Qt::QueuedConnection); |
| 681 | connect(this, &QtControllerSelector::MainWindowRequestExit, &parent, | ||
| 682 | &GMainWindow::ControllerSelectorRequestExit, Qt::QueuedConnection); | ||
| 681 | connect(&parent, &GMainWindow::ControllerSelectorReconfigureFinished, this, | 683 | connect(&parent, &GMainWindow::ControllerSelectorReconfigureFinished, this, |
| 682 | &QtControllerSelector::MainWindowReconfigureFinished, Qt::QueuedConnection); | 684 | &QtControllerSelector::MainWindowReconfigureFinished, Qt::QueuedConnection); |
| 683 | } | 685 | } |
| 684 | 686 | ||
| 685 | QtControllerSelector::~QtControllerSelector() = default; | 687 | QtControllerSelector::~QtControllerSelector() = default; |
| 686 | 688 | ||
| 689 | void QtControllerSelector::Close() const { | ||
| 690 | callback = {}; | ||
| 691 | emit MainWindowRequestExit(); | ||
| 692 | } | ||
| 693 | |||
| 687 | void QtControllerSelector::ReconfigureControllers( | 694 | void QtControllerSelector::ReconfigureControllers( |
| 688 | ReconfigureCallback callback_, const Core::Frontend::ControllerParameters& parameters) const { | 695 | ReconfigureCallback callback_, const Core::Frontend::ControllerParameters& parameters) const { |
| 689 | callback = std::move(callback_); | 696 | callback = std::move(callback_); |
| @@ -691,5 +698,7 @@ void QtControllerSelector::ReconfigureControllers( | |||
| 691 | } | 698 | } |
| 692 | 699 | ||
| 693 | void QtControllerSelector::MainWindowReconfigureFinished() { | 700 | void QtControllerSelector::MainWindowReconfigureFinished() { |
| 694 | callback(); | 701 | if (callback) { |
| 702 | callback(); | ||
| 703 | } | ||
| 695 | } | 704 | } |
diff --git a/src/yuzu/applets/qt_controller.h b/src/yuzu/applets/qt_controller.h index 16e99f507..2ef7e488f 100644 --- a/src/yuzu/applets/qt_controller.h +++ b/src/yuzu/applets/qt_controller.h | |||
| @@ -156,6 +156,7 @@ public: | |||
| 156 | explicit QtControllerSelector(GMainWindow& parent); | 156 | explicit QtControllerSelector(GMainWindow& parent); |
| 157 | ~QtControllerSelector() override; | 157 | ~QtControllerSelector() override; |
| 158 | 158 | ||
| 159 | void Close() const override; | ||
| 159 | void ReconfigureControllers( | 160 | void ReconfigureControllers( |
| 160 | ReconfigureCallback callback_, | 161 | ReconfigureCallback callback_, |
| 161 | const Core::Frontend::ControllerParameters& parameters) const override; | 162 | const Core::Frontend::ControllerParameters& parameters) const override; |
| @@ -163,6 +164,7 @@ public: | |||
| 163 | signals: | 164 | signals: |
| 164 | void MainWindowReconfigureControllers( | 165 | void MainWindowReconfigureControllers( |
| 165 | const Core::Frontend::ControllerParameters& parameters) const; | 166 | const Core::Frontend::ControllerParameters& parameters) const; |
| 167 | void MainWindowRequestExit() const; | ||
| 166 | 168 | ||
| 167 | private: | 169 | private: |
| 168 | void MainWindowReconfigureFinished(); | 170 | void MainWindowReconfigureFinished(); |
diff --git a/src/yuzu/applets/qt_error.cpp b/src/yuzu/applets/qt_error.cpp index e0190a979..1dc4f0383 100644 --- a/src/yuzu/applets/qt_error.cpp +++ b/src/yuzu/applets/qt_error.cpp | |||
| @@ -8,12 +8,19 @@ | |||
| 8 | QtErrorDisplay::QtErrorDisplay(GMainWindow& parent) { | 8 | QtErrorDisplay::QtErrorDisplay(GMainWindow& parent) { |
| 9 | connect(this, &QtErrorDisplay::MainWindowDisplayError, &parent, | 9 | connect(this, &QtErrorDisplay::MainWindowDisplayError, &parent, |
| 10 | &GMainWindow::ErrorDisplayDisplayError, Qt::QueuedConnection); | 10 | &GMainWindow::ErrorDisplayDisplayError, Qt::QueuedConnection); |
| 11 | connect(this, &QtErrorDisplay::MainWindowRequestExit, &parent, | ||
| 12 | &GMainWindow::ErrorDisplayRequestExit, Qt::QueuedConnection); | ||
| 11 | connect(&parent, &GMainWindow::ErrorDisplayFinished, this, | 13 | connect(&parent, &GMainWindow::ErrorDisplayFinished, this, |
| 12 | &QtErrorDisplay::MainWindowFinishedError, Qt::DirectConnection); | 14 | &QtErrorDisplay::MainWindowFinishedError, Qt::DirectConnection); |
| 13 | } | 15 | } |
| 14 | 16 | ||
| 15 | QtErrorDisplay::~QtErrorDisplay() = default; | 17 | QtErrorDisplay::~QtErrorDisplay() = default; |
| 16 | 18 | ||
| 19 | void QtErrorDisplay::Close() const { | ||
| 20 | callback = {}; | ||
| 21 | emit MainWindowRequestExit(); | ||
| 22 | } | ||
| 23 | |||
| 17 | void QtErrorDisplay::ShowError(Result error, FinishedCallback finished) const { | 24 | void QtErrorDisplay::ShowError(Result error, FinishedCallback finished) const { |
| 18 | callback = std::move(finished); | 25 | callback = std::move(finished); |
| 19 | emit MainWindowDisplayError( | 26 | emit MainWindowDisplayError( |
| @@ -55,5 +62,7 @@ void QtErrorDisplay::ShowCustomErrorText(Result error, std::string dialog_text, | |||
| 55 | } | 62 | } |
| 56 | 63 | ||
| 57 | void QtErrorDisplay::MainWindowFinishedError() { | 64 | void QtErrorDisplay::MainWindowFinishedError() { |
| 58 | callback(); | 65 | if (callback) { |
| 66 | callback(); | ||
| 67 | } | ||
| 59 | } | 68 | } |
diff --git a/src/yuzu/applets/qt_error.h b/src/yuzu/applets/qt_error.h index e4e174721..957f170ad 100644 --- a/src/yuzu/applets/qt_error.h +++ b/src/yuzu/applets/qt_error.h | |||
| @@ -16,6 +16,7 @@ public: | |||
| 16 | explicit QtErrorDisplay(GMainWindow& parent); | 16 | explicit QtErrorDisplay(GMainWindow& parent); |
| 17 | ~QtErrorDisplay() override; | 17 | ~QtErrorDisplay() override; |
| 18 | 18 | ||
| 19 | void Close() const override; | ||
| 19 | void ShowError(Result error, FinishedCallback finished) const override; | 20 | void ShowError(Result error, FinishedCallback finished) const override; |
| 20 | void ShowErrorWithTimestamp(Result error, std::chrono::seconds time, | 21 | void ShowErrorWithTimestamp(Result error, std::chrono::seconds time, |
| 21 | FinishedCallback finished) const override; | 22 | FinishedCallback finished) const override; |
| @@ -24,6 +25,7 @@ public: | |||
| 24 | 25 | ||
| 25 | signals: | 26 | signals: |
| 26 | void MainWindowDisplayError(QString error_code, QString error_text) const; | 27 | void MainWindowDisplayError(QString error_code, QString error_text) const; |
| 28 | void MainWindowRequestExit() const; | ||
| 27 | 29 | ||
| 28 | private: | 30 | private: |
| 29 | void MainWindowFinishedError(); | 31 | void MainWindowFinishedError(); |
diff --git a/src/yuzu/applets/qt_profile_select.cpp b/src/yuzu/applets/qt_profile_select.cpp index 4145c5299..c0a1d5ab7 100644 --- a/src/yuzu/applets/qt_profile_select.cpp +++ b/src/yuzu/applets/qt_profile_select.cpp | |||
| @@ -157,17 +157,26 @@ void QtProfileSelectionDialog::SelectUser(const QModelIndex& index) { | |||
| 157 | QtProfileSelector::QtProfileSelector(GMainWindow& parent) { | 157 | QtProfileSelector::QtProfileSelector(GMainWindow& parent) { |
| 158 | connect(this, &QtProfileSelector::MainWindowSelectProfile, &parent, | 158 | connect(this, &QtProfileSelector::MainWindowSelectProfile, &parent, |
| 159 | &GMainWindow::ProfileSelectorSelectProfile, Qt::QueuedConnection); | 159 | &GMainWindow::ProfileSelectorSelectProfile, Qt::QueuedConnection); |
| 160 | connect(this, &QtProfileSelector::MainWindowRequestExit, &parent, | ||
| 161 | &GMainWindow::ProfileSelectorRequestExit, Qt::QueuedConnection); | ||
| 160 | connect(&parent, &GMainWindow::ProfileSelectorFinishedSelection, this, | 162 | connect(&parent, &GMainWindow::ProfileSelectorFinishedSelection, this, |
| 161 | &QtProfileSelector::MainWindowFinishedSelection, Qt::DirectConnection); | 163 | &QtProfileSelector::MainWindowFinishedSelection, Qt::DirectConnection); |
| 162 | } | 164 | } |
| 163 | 165 | ||
| 164 | QtProfileSelector::~QtProfileSelector() = default; | 166 | QtProfileSelector::~QtProfileSelector() = default; |
| 165 | 167 | ||
| 168 | void QtProfileSelector::Close() const { | ||
| 169 | callback = {}; | ||
| 170 | emit MainWindowRequestExit(); | ||
| 171 | } | ||
| 172 | |||
| 166 | void QtProfileSelector::SelectProfile(SelectProfileCallback callback_) const { | 173 | void QtProfileSelector::SelectProfile(SelectProfileCallback callback_) const { |
| 167 | callback = std::move(callback_); | 174 | callback = std::move(callback_); |
| 168 | emit MainWindowSelectProfile(); | 175 | emit MainWindowSelectProfile(); |
| 169 | } | 176 | } |
| 170 | 177 | ||
| 171 | void QtProfileSelector::MainWindowFinishedSelection(std::optional<Common::UUID> uuid) { | 178 | void QtProfileSelector::MainWindowFinishedSelection(std::optional<Common::UUID> uuid) { |
| 172 | callback(uuid); | 179 | if (callback) { |
| 180 | callback(uuid); | ||
| 181 | } | ||
| 173 | } | 182 | } |
diff --git a/src/yuzu/applets/qt_profile_select.h b/src/yuzu/applets/qt_profile_select.h index 637a3bda2..9f214d071 100644 --- a/src/yuzu/applets/qt_profile_select.h +++ b/src/yuzu/applets/qt_profile_select.h | |||
| @@ -65,10 +65,12 @@ public: | |||
| 65 | explicit QtProfileSelector(GMainWindow& parent); | 65 | explicit QtProfileSelector(GMainWindow& parent); |
| 66 | ~QtProfileSelector() override; | 66 | ~QtProfileSelector() override; |
| 67 | 67 | ||
| 68 | void Close() const override; | ||
| 68 | void SelectProfile(SelectProfileCallback callback_) const override; | 69 | void SelectProfile(SelectProfileCallback callback_) const override; |
| 69 | 70 | ||
| 70 | signals: | 71 | signals: |
| 71 | void MainWindowSelectProfile() const; | 72 | void MainWindowSelectProfile() const; |
| 73 | void MainWindowRequestExit() const; | ||
| 72 | 74 | ||
| 73 | private: | 75 | private: |
| 74 | void MainWindowFinishedSelection(std::optional<Common::UUID> uuid); | 76 | void MainWindowFinishedSelection(std::optional<Common::UUID> uuid); |
diff --git a/src/yuzu/applets/qt_software_keyboard.h b/src/yuzu/applets/qt_software_keyboard.h index 30ac8ecf6..ac23ce047 100644 --- a/src/yuzu/applets/qt_software_keyboard.h +++ b/src/yuzu/applets/qt_software_keyboard.h | |||
| @@ -233,6 +233,10 @@ public: | |||
| 233 | explicit QtSoftwareKeyboard(GMainWindow& parent); | 233 | explicit QtSoftwareKeyboard(GMainWindow& parent); |
| 234 | ~QtSoftwareKeyboard() override; | 234 | ~QtSoftwareKeyboard() override; |
| 235 | 235 | ||
| 236 | void Close() const override { | ||
| 237 | ExitKeyboard(); | ||
| 238 | } | ||
| 239 | |||
| 236 | void InitializeKeyboard(bool is_inline, | 240 | void InitializeKeyboard(bool is_inline, |
| 237 | Core::Frontend::KeyboardInitializeParameters initialize_parameters, | 241 | Core::Frontend::KeyboardInitializeParameters initialize_parameters, |
| 238 | SubmitNormalCallback submit_normal_callback_, | 242 | SubmitNormalCallback submit_normal_callback_, |
diff --git a/src/yuzu/applets/qt_web_browser.cpp b/src/yuzu/applets/qt_web_browser.cpp index 0a5912326..28acc0ff8 100644 --- a/src/yuzu/applets/qt_web_browser.cpp +++ b/src/yuzu/applets/qt_web_browser.cpp | |||
| @@ -393,6 +393,8 @@ void QtNXWebEngineView::FocusFirstLinkElement() { | |||
| 393 | QtWebBrowser::QtWebBrowser(GMainWindow& main_window) { | 393 | QtWebBrowser::QtWebBrowser(GMainWindow& main_window) { |
| 394 | connect(this, &QtWebBrowser::MainWindowOpenWebPage, &main_window, | 394 | connect(this, &QtWebBrowser::MainWindowOpenWebPage, &main_window, |
| 395 | &GMainWindow::WebBrowserOpenWebPage, Qt::QueuedConnection); | 395 | &GMainWindow::WebBrowserOpenWebPage, Qt::QueuedConnection); |
| 396 | connect(this, &QtWebBrowser::MainWindowRequestExit, &main_window, | ||
| 397 | &GMainWindow::WebBrowserRequestExit, Qt::QueuedConnection); | ||
| 396 | connect(&main_window, &GMainWindow::WebBrowserExtractOfflineRomFS, this, | 398 | connect(&main_window, &GMainWindow::WebBrowserExtractOfflineRomFS, this, |
| 397 | &QtWebBrowser::MainWindowExtractOfflineRomFS, Qt::QueuedConnection); | 399 | &QtWebBrowser::MainWindowExtractOfflineRomFS, Qt::QueuedConnection); |
| 398 | connect(&main_window, &GMainWindow::WebBrowserClosed, this, | 400 | connect(&main_window, &GMainWindow::WebBrowserClosed, this, |
| @@ -401,6 +403,11 @@ QtWebBrowser::QtWebBrowser(GMainWindow& main_window) { | |||
| 401 | 403 | ||
| 402 | QtWebBrowser::~QtWebBrowser() = default; | 404 | QtWebBrowser::~QtWebBrowser() = default; |
| 403 | 405 | ||
| 406 | void QtWebBrowser::Close() const { | ||
| 407 | callback = {}; | ||
| 408 | emit MainWindowRequestExit(); | ||
| 409 | } | ||
| 410 | |||
| 404 | void QtWebBrowser::OpenLocalWebPage(const std::string& local_url, | 411 | void QtWebBrowser::OpenLocalWebPage(const std::string& local_url, |
| 405 | ExtractROMFSCallback extract_romfs_callback_, | 412 | ExtractROMFSCallback extract_romfs_callback_, |
| 406 | OpenWebPageCallback callback_) const { | 413 | OpenWebPageCallback callback_) const { |
| @@ -436,5 +443,7 @@ void QtWebBrowser::MainWindowExtractOfflineRomFS() { | |||
| 436 | 443 | ||
| 437 | void QtWebBrowser::MainWindowWebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason, | 444 | void QtWebBrowser::MainWindowWebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason, |
| 438 | std::string last_url) { | 445 | std::string last_url) { |
| 439 | callback(exit_reason, last_url); | 446 | if (callback) { |
| 447 | callback(exit_reason, last_url); | ||
| 448 | } | ||
| 440 | } | 449 | } |
diff --git a/src/yuzu/applets/qt_web_browser.h b/src/yuzu/applets/qt_web_browser.h index ceae7926e..1234108ae 100644 --- a/src/yuzu/applets/qt_web_browser.h +++ b/src/yuzu/applets/qt_web_browser.h | |||
| @@ -196,6 +196,7 @@ public: | |||
| 196 | explicit QtWebBrowser(GMainWindow& parent); | 196 | explicit QtWebBrowser(GMainWindow& parent); |
| 197 | ~QtWebBrowser() override; | 197 | ~QtWebBrowser() override; |
| 198 | 198 | ||
| 199 | void Close() const override; | ||
| 199 | void OpenLocalWebPage(const std::string& local_url, | 200 | void OpenLocalWebPage(const std::string& local_url, |
| 200 | ExtractROMFSCallback extract_romfs_callback_, | 201 | ExtractROMFSCallback extract_romfs_callback_, |
| 201 | OpenWebPageCallback callback_) const override; | 202 | OpenWebPageCallback callback_) const override; |
| @@ -206,6 +207,7 @@ public: | |||
| 206 | signals: | 207 | signals: |
| 207 | void MainWindowOpenWebPage(const std::string& main_url, const std::string& additional_args, | 208 | void MainWindowOpenWebPage(const std::string& main_url, const std::string& additional_args, |
| 208 | bool is_local) const; | 209 | bool is_local) const; |
| 210 | void MainWindowRequestExit() const; | ||
| 209 | 211 | ||
| 210 | private: | 212 | private: |
| 211 | void MainWindowExtractOfflineRomFS(); | 213 | void MainWindowExtractOfflineRomFS(); |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index ae14884b5..19968bc21 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -596,27 +596,45 @@ void GMainWindow::RegisterMetaTypes() { | |||
| 596 | 596 | ||
| 597 | void GMainWindow::AmiiboSettingsShowDialog(const Core::Frontend::CabinetParameters& parameters, | 597 | void GMainWindow::AmiiboSettingsShowDialog(const Core::Frontend::CabinetParameters& parameters, |
| 598 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) { | 598 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device) { |
| 599 | QtAmiiboSettingsDialog dialog(this, parameters, input_subsystem.get(), nfp_device); | 599 | cabinet_applet = |
| 600 | new QtAmiiboSettingsDialog(this, parameters, input_subsystem.get(), nfp_device); | ||
| 601 | SCOPE_EXIT({ | ||
| 602 | cabinet_applet->deleteLater(); | ||
| 603 | cabinet_applet = nullptr; | ||
| 604 | }); | ||
| 600 | 605 | ||
| 601 | dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | | 606 | cabinet_applet->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | |
| 602 | Qt::WindowTitleHint | Qt::WindowSystemMenuHint); | 607 | Qt::WindowTitleHint | Qt::WindowSystemMenuHint); |
| 603 | dialog.setWindowModality(Qt::WindowModal); | 608 | cabinet_applet->setWindowModality(Qt::WindowModal); |
| 604 | if (dialog.exec() == QDialog::Rejected) { | 609 | |
| 610 | if (cabinet_applet->exec() == QDialog::Rejected) { | ||
| 605 | emit AmiiboSettingsFinished(false, {}); | 611 | emit AmiiboSettingsFinished(false, {}); |
| 606 | return; | 612 | return; |
| 607 | } | 613 | } |
| 608 | 614 | ||
| 609 | emit AmiiboSettingsFinished(true, dialog.GetName()); | 615 | emit AmiiboSettingsFinished(true, cabinet_applet->GetName()); |
| 616 | } | ||
| 617 | |||
| 618 | void GMainWindow::AmiiboSettingsRequestExit() { | ||
| 619 | if (cabinet_applet) { | ||
| 620 | cabinet_applet->reject(); | ||
| 621 | } | ||
| 610 | } | 622 | } |
| 611 | 623 | ||
| 612 | void GMainWindow::ControllerSelectorReconfigureControllers( | 624 | void GMainWindow::ControllerSelectorReconfigureControllers( |
| 613 | const Core::Frontend::ControllerParameters& parameters) { | 625 | const Core::Frontend::ControllerParameters& parameters) { |
| 614 | QtControllerSelectorDialog dialog(this, parameters, input_subsystem.get(), *system); | 626 | controller_applet = |
| 627 | new QtControllerSelectorDialog(this, parameters, input_subsystem.get(), *system); | ||
| 628 | SCOPE_EXIT({ | ||
| 629 | controller_applet->deleteLater(); | ||
| 630 | controller_applet = nullptr; | ||
| 631 | }); | ||
| 615 | 632 | ||
| 616 | dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | | 633 | controller_applet->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | |
| 617 | Qt::WindowTitleHint | Qt::WindowSystemMenuHint); | 634 | Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | |
| 618 | dialog.setWindowModality(Qt::WindowModal); | 635 | Qt::WindowSystemMenuHint); |
| 619 | dialog.exec(); | 636 | controller_applet->setWindowModality(Qt::WindowModal); |
| 637 | controller_applet->exec(); | ||
| 620 | 638 | ||
| 621 | emit ControllerSelectorReconfigureFinished(); | 639 | emit ControllerSelectorReconfigureFinished(); |
| 622 | 640 | ||
| @@ -627,19 +645,30 @@ void GMainWindow::ControllerSelectorReconfigureControllers( | |||
| 627 | UpdateStatusButtons(); | 645 | UpdateStatusButtons(); |
| 628 | } | 646 | } |
| 629 | 647 | ||
| 648 | void GMainWindow::ControllerSelectorRequestExit() { | ||
| 649 | if (controller_applet) { | ||
| 650 | controller_applet->reject(); | ||
| 651 | } | ||
| 652 | } | ||
| 653 | |||
| 630 | void GMainWindow::ProfileSelectorSelectProfile() { | 654 | void GMainWindow::ProfileSelectorSelectProfile() { |
| 631 | QtProfileSelectionDialog dialog(system->HIDCore(), this); | 655 | profile_select_applet = new QtProfileSelectionDialog(system->HIDCore(), this); |
| 632 | dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | | 656 | SCOPE_EXIT({ |
| 633 | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | | 657 | profile_select_applet->deleteLater(); |
| 634 | Qt::WindowCloseButtonHint); | 658 | profile_select_applet = nullptr; |
| 635 | dialog.setWindowModality(Qt::WindowModal); | 659 | }); |
| 636 | if (dialog.exec() == QDialog::Rejected) { | 660 | |
| 661 | profile_select_applet->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | | ||
| 662 | Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | | ||
| 663 | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); | ||
| 664 | profile_select_applet->setWindowModality(Qt::WindowModal); | ||
| 665 | if (profile_select_applet->exec() == QDialog::Rejected) { | ||
| 637 | emit ProfileSelectorFinishedSelection(std::nullopt); | 666 | emit ProfileSelectorFinishedSelection(std::nullopt); |
| 638 | return; | 667 | return; |
| 639 | } | 668 | } |
| 640 | 669 | ||
| 641 | const Service::Account::ProfileManager manager; | 670 | const Service::Account::ProfileManager manager; |
| 642 | const auto uuid = manager.GetUser(static_cast<std::size_t>(dialog.GetIndex())); | 671 | const auto uuid = manager.GetUser(static_cast<std::size_t>(profile_select_applet->GetIndex())); |
| 643 | if (!uuid.has_value()) { | 672 | if (!uuid.has_value()) { |
| 644 | emit ProfileSelectorFinishedSelection(std::nullopt); | 673 | emit ProfileSelectorFinishedSelection(std::nullopt); |
| 645 | return; | 674 | return; |
| @@ -648,6 +677,12 @@ void GMainWindow::ProfileSelectorSelectProfile() { | |||
| 648 | emit ProfileSelectorFinishedSelection(uuid); | 677 | emit ProfileSelectorFinishedSelection(uuid); |
| 649 | } | 678 | } |
| 650 | 679 | ||
| 680 | void GMainWindow::ProfileSelectorRequestExit() { | ||
| 681 | if (profile_select_applet) { | ||
| 682 | profile_select_applet->reject(); | ||
| 683 | } | ||
| 684 | } | ||
| 685 | |||
| 651 | void GMainWindow::SoftwareKeyboardInitialize( | 686 | void GMainWindow::SoftwareKeyboardInitialize( |
| 652 | bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters) { | 687 | bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters) { |
| 653 | if (software_keyboard) { | 688 | if (software_keyboard) { |
| @@ -772,7 +807,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, | |||
| 772 | return; | 807 | return; |
| 773 | } | 808 | } |
| 774 | 809 | ||
| 775 | QtNXWebEngineView web_browser_view(this, *system, input_subsystem.get()); | 810 | web_applet = new QtNXWebEngineView(this, *system, input_subsystem.get()); |
| 776 | 811 | ||
| 777 | ui->action_Pause->setEnabled(false); | 812 | ui->action_Pause->setEnabled(false); |
| 778 | ui->action_Restart->setEnabled(false); | 813 | ui->action_Restart->setEnabled(false); |
| @@ -799,9 +834,9 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, | |||
| 799 | loading_progress.setValue(1); | 834 | loading_progress.setValue(1); |
| 800 | 835 | ||
| 801 | if (is_local) { | 836 | if (is_local) { |
| 802 | web_browser_view.LoadLocalWebPage(main_url, additional_args); | 837 | web_applet->LoadLocalWebPage(main_url, additional_args); |
| 803 | } else { | 838 | } else { |
| 804 | web_browser_view.LoadExternalWebPage(main_url, additional_args); | 839 | web_applet->LoadExternalWebPage(main_url, additional_args); |
| 805 | } | 840 | } |
| 806 | 841 | ||
| 807 | if (render_window->IsLoadingComplete()) { | 842 | if (render_window->IsLoadingComplete()) { |
| @@ -810,15 +845,15 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, | |||
| 810 | 845 | ||
| 811 | const auto& layout = render_window->GetFramebufferLayout(); | 846 | const auto& layout = render_window->GetFramebufferLayout(); |
| 812 | const auto scale_ratio = devicePixelRatioF(); | 847 | const auto scale_ratio = devicePixelRatioF(); |
| 813 | web_browser_view.resize(layout.screen.GetWidth() / scale_ratio, | 848 | web_applet->resize(layout.screen.GetWidth() / scale_ratio, |
| 814 | layout.screen.GetHeight() / scale_ratio); | 849 | layout.screen.GetHeight() / scale_ratio); |
| 815 | web_browser_view.move(layout.screen.left / scale_ratio, | 850 | web_applet->move(layout.screen.left / scale_ratio, |
| 816 | (layout.screen.top / scale_ratio) + menuBar()->height()); | 851 | (layout.screen.top / scale_ratio) + menuBar()->height()); |
| 817 | web_browser_view.setZoomFactor(static_cast<qreal>(layout.screen.GetWidth() / scale_ratio) / | 852 | web_applet->setZoomFactor(static_cast<qreal>(layout.screen.GetWidth() / scale_ratio) / |
| 818 | static_cast<qreal>(Layout::ScreenUndocked::Width)); | 853 | static_cast<qreal>(Layout::ScreenUndocked::Width)); |
| 819 | 854 | ||
| 820 | web_browser_view.setFocus(); | 855 | web_applet->setFocus(); |
| 821 | web_browser_view.show(); | 856 | web_applet->show(); |
| 822 | 857 | ||
| 823 | loading_progress.setValue(2); | 858 | loading_progress.setValue(2); |
| 824 | 859 | ||
| @@ -831,7 +866,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, | |||
| 831 | 866 | ||
| 832 | // TODO (Morph): Remove this | 867 | // TODO (Morph): Remove this |
| 833 | QAction* exit_action = new QAction(tr("Disable Web Applet"), this); | 868 | QAction* exit_action = new QAction(tr("Disable Web Applet"), this); |
| 834 | connect(exit_action, &QAction::triggered, this, [this, &web_browser_view] { | 869 | connect(exit_action, &QAction::triggered, this, [this] { |
| 835 | const auto result = QMessageBox::warning( | 870 | const auto result = QMessageBox::warning( |
| 836 | this, tr("Disable Web Applet"), | 871 | this, tr("Disable Web Applet"), |
| 837 | tr("Disabling the web applet can lead to undefined behavior and should only be used " | 872 | tr("Disabling the web applet can lead to undefined behavior and should only be used " |
| @@ -840,21 +875,21 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, | |||
| 840 | QMessageBox::Yes | QMessageBox::No); | 875 | QMessageBox::Yes | QMessageBox::No); |
| 841 | if (result == QMessageBox::Yes) { | 876 | if (result == QMessageBox::Yes) { |
| 842 | UISettings::values.disable_web_applet = true; | 877 | UISettings::values.disable_web_applet = true; |
| 843 | web_browser_view.SetFinished(true); | 878 | web_applet->SetFinished(true); |
| 844 | } | 879 | } |
| 845 | }); | 880 | }); |
| 846 | ui->menubar->addAction(exit_action); | 881 | ui->menubar->addAction(exit_action); |
| 847 | 882 | ||
| 848 | while (!web_browser_view.IsFinished()) { | 883 | while (!web_applet->IsFinished()) { |
| 849 | QCoreApplication::processEvents(); | 884 | QCoreApplication::processEvents(); |
| 850 | 885 | ||
| 851 | if (!exit_check) { | 886 | if (!exit_check) { |
| 852 | web_browser_view.page()->runJavaScript( | 887 | web_applet->page()->runJavaScript( |
| 853 | QStringLiteral("end_applet;"), [&](const QVariant& variant) { | 888 | QStringLiteral("end_applet;"), [&](const QVariant& variant) { |
| 854 | exit_check = false; | 889 | exit_check = false; |
| 855 | if (variant.toBool()) { | 890 | if (variant.toBool()) { |
| 856 | web_browser_view.SetFinished(true); | 891 | web_applet->SetFinished(true); |
| 857 | web_browser_view.SetExitReason( | 892 | web_applet->SetExitReason( |
| 858 | Service::AM::Applets::WebExitReason::EndButtonPressed); | 893 | Service::AM::Applets::WebExitReason::EndButtonPressed); |
| 859 | } | 894 | } |
| 860 | }); | 895 | }); |
| @@ -862,22 +897,22 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, | |||
| 862 | exit_check = true; | 897 | exit_check = true; |
| 863 | } | 898 | } |
| 864 | 899 | ||
| 865 | if (web_browser_view.GetCurrentURL().contains(QStringLiteral("localhost"))) { | 900 | if (web_applet->GetCurrentURL().contains(QStringLiteral("localhost"))) { |
| 866 | if (!web_browser_view.IsFinished()) { | 901 | if (!web_applet->IsFinished()) { |
| 867 | web_browser_view.SetFinished(true); | 902 | web_applet->SetFinished(true); |
| 868 | web_browser_view.SetExitReason(Service::AM::Applets::WebExitReason::CallbackURL); | 903 | web_applet->SetExitReason(Service::AM::Applets::WebExitReason::CallbackURL); |
| 869 | } | 904 | } |
| 870 | 905 | ||
| 871 | web_browser_view.SetLastURL(web_browser_view.GetCurrentURL().toStdString()); | 906 | web_applet->SetLastURL(web_applet->GetCurrentURL().toStdString()); |
| 872 | } | 907 | } |
| 873 | 908 | ||
| 874 | std::this_thread::sleep_for(std::chrono::milliseconds(1)); | 909 | std::this_thread::sleep_for(std::chrono::milliseconds(1)); |
| 875 | } | 910 | } |
| 876 | 911 | ||
| 877 | const auto exit_reason = web_browser_view.GetExitReason(); | 912 | const auto exit_reason = web_applet->GetExitReason(); |
| 878 | const auto last_url = web_browser_view.GetLastURL(); | 913 | const auto last_url = web_applet->GetLastURL(); |
| 879 | 914 | ||
| 880 | web_browser_view.hide(); | 915 | web_applet->hide(); |
| 881 | 916 | ||
| 882 | render_window->setFocus(); | 917 | render_window->setFocus(); |
| 883 | 918 | ||
| @@ -903,6 +938,15 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, | |||
| 903 | #endif | 938 | #endif |
| 904 | } | 939 | } |
| 905 | 940 | ||
| 941 | void GMainWindow::WebBrowserRequestExit() { | ||
| 942 | #ifdef YUZU_USE_QT_WEB_ENGINE | ||
| 943 | if (web_applet) { | ||
| 944 | web_applet->SetExitReason(Service::AM::Applets::WebExitReason::ExitRequested); | ||
| 945 | web_applet->SetFinished(true); | ||
| 946 | } | ||
| 947 | #endif | ||
| 948 | } | ||
| 949 | |||
| 906 | void GMainWindow::InitializeWidgets() { | 950 | void GMainWindow::InitializeWidgets() { |
| 907 | #ifdef YUZU_ENABLE_COMPATIBILITY_REPORTING | 951 | #ifdef YUZU_ENABLE_COMPATIBILITY_REPORTING |
| 908 | ui->action_Report_Compatibility->setVisible(true); | 952 | ui->action_Report_Compatibility->setVisible(true); |
| @@ -3089,13 +3133,23 @@ void GMainWindow::OnSaveConfig() { | |||
| 3089 | } | 3133 | } |
| 3090 | 3134 | ||
| 3091 | void GMainWindow::ErrorDisplayDisplayError(QString error_code, QString error_text) { | 3135 | void GMainWindow::ErrorDisplayDisplayError(QString error_code, QString error_text) { |
| 3092 | OverlayDialog dialog(render_window, *system, error_code, error_text, QString{}, tr("OK"), | 3136 | error_applet = new OverlayDialog(render_window, *system, error_code, error_text, QString{}, |
| 3093 | Qt::AlignLeft | Qt::AlignVCenter); | 3137 | tr("OK"), Qt::AlignLeft | Qt::AlignVCenter); |
| 3094 | dialog.exec(); | 3138 | SCOPE_EXIT({ |
| 3139 | error_applet->deleteLater(); | ||
| 3140 | error_applet = nullptr; | ||
| 3141 | }); | ||
| 3142 | error_applet->exec(); | ||
| 3095 | 3143 | ||
| 3096 | emit ErrorDisplayFinished(); | 3144 | emit ErrorDisplayFinished(); |
| 3097 | } | 3145 | } |
| 3098 | 3146 | ||
| 3147 | void GMainWindow::ErrorDisplayRequestExit() { | ||
| 3148 | if (error_applet) { | ||
| 3149 | error_applet->reject(); | ||
| 3150 | } | ||
| 3151 | } | ||
| 3152 | |||
| 3099 | void GMainWindow::OnMenuReportCompatibility() { | 3153 | void GMainWindow::OnMenuReportCompatibility() { |
| 3100 | #if defined(ARCHITECTURE_x86_64) && !defined(__APPLE__) | 3154 | #if defined(ARCHITECTURE_x86_64) && !defined(__APPLE__) |
| 3101 | const auto& caps = Common::GetCPUCaps(); | 3155 | const auto& caps = Common::GetCPUCaps(); |
diff --git a/src/yuzu/main.h b/src/yuzu/main.h index a23b373a5..a99938eaa 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h | |||
| @@ -47,7 +47,11 @@ enum class DumpRomFSTarget; | |||
| 47 | enum class InstalledEntryType; | 47 | enum class InstalledEntryType; |
| 48 | class GameListPlaceholder; | 48 | class GameListPlaceholder; |
| 49 | 49 | ||
| 50 | class QtAmiiboSettingsDialog; | ||
| 51 | class QtControllerSelectorDialog; | ||
| 52 | class QtProfileSelectionDialog; | ||
| 50 | class QtSoftwareKeyboardDialog; | 53 | class QtSoftwareKeyboardDialog; |
| 54 | class QtNXWebEngineView; | ||
| 51 | 55 | ||
| 52 | enum class StartGameType { | 56 | enum class StartGameType { |
| 53 | Normal, // Can use custom configuration | 57 | Normal, // Can use custom configuration |
| @@ -184,8 +188,10 @@ public slots: | |||
| 184 | void OnSaveConfig(); | 188 | void OnSaveConfig(); |
| 185 | void AmiiboSettingsShowDialog(const Core::Frontend::CabinetParameters& parameters, | 189 | void AmiiboSettingsShowDialog(const Core::Frontend::CabinetParameters& parameters, |
| 186 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device); | 190 | std::shared_ptr<Service::NFP::NfpDevice> nfp_device); |
| 191 | void AmiiboSettingsRequestExit(); | ||
| 187 | void ControllerSelectorReconfigureControllers( | 192 | void ControllerSelectorReconfigureControllers( |
| 188 | const Core::Frontend::ControllerParameters& parameters); | 193 | const Core::Frontend::ControllerParameters& parameters); |
| 194 | void ControllerSelectorRequestExit(); | ||
| 189 | void SoftwareKeyboardInitialize( | 195 | void SoftwareKeyboardInitialize( |
| 190 | bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters); | 196 | bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters); |
| 191 | void SoftwareKeyboardShowNormal(); | 197 | void SoftwareKeyboardShowNormal(); |
| @@ -196,9 +202,12 @@ public slots: | |||
| 196 | void SoftwareKeyboardInlineTextChanged(Core::Frontend::InlineTextParameters text_parameters); | 202 | void SoftwareKeyboardInlineTextChanged(Core::Frontend::InlineTextParameters text_parameters); |
| 197 | void SoftwareKeyboardExit(); | 203 | void SoftwareKeyboardExit(); |
| 198 | void ErrorDisplayDisplayError(QString error_code, QString error_text); | 204 | void ErrorDisplayDisplayError(QString error_code, QString error_text); |
| 205 | void ErrorDisplayRequestExit(); | ||
| 199 | void ProfileSelectorSelectProfile(); | 206 | void ProfileSelectorSelectProfile(); |
| 207 | void ProfileSelectorRequestExit(); | ||
| 200 | void WebBrowserOpenWebPage(const std::string& main_url, const std::string& additional_args, | 208 | void WebBrowserOpenWebPage(const std::string& main_url, const std::string& additional_args, |
| 201 | bool is_local); | 209 | bool is_local); |
| 210 | void WebBrowserRequestExit(); | ||
| 202 | void OnAppFocusStateChanged(Qt::ApplicationState state); | 211 | void OnAppFocusStateChanged(Qt::ApplicationState state); |
| 203 | void OnTasStateChanged(); | 212 | void OnTasStateChanged(); |
| 204 | 213 | ||
| @@ -466,7 +475,12 @@ private: | |||
| 466 | QString last_filename_booted; | 475 | QString last_filename_booted; |
| 467 | 476 | ||
| 468 | // Applets | 477 | // Applets |
| 478 | QtAmiiboSettingsDialog* cabinet_applet = nullptr; | ||
| 479 | QtControllerSelectorDialog* controller_applet = nullptr; | ||
| 480 | QtProfileSelectionDialog* profile_select_applet = nullptr; | ||
| 481 | QDialog* error_applet = nullptr; | ||
| 469 | QtSoftwareKeyboardDialog* software_keyboard = nullptr; | 482 | QtSoftwareKeyboardDialog* software_keyboard = nullptr; |
| 483 | QtNXWebEngineView* web_applet = nullptr; | ||
| 470 | 484 | ||
| 471 | // True if amiibo file select is visible | 485 | // True if amiibo file select is visible |
| 472 | bool is_amiibo_file_select_active{}; | 486 | bool is_amiibo_file_select_active{}; |