summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/am/am.cpp12
-rw-r--r--src/core/hle/service/am/am.h3
-rw-r--r--src/core/hle/service/am/applets/applets.cpp39
-rw-r--r--src/core/hle/service/am/applets/applets.h20
-rw-r--r--src/core/hle/service/am/applets/controller.cpp2
-rw-r--r--src/core/hle/service/am/applets/controller.h1
-rw-r--r--src/core/hle/service/am/applets/error.cpp2
-rw-r--r--src/core/hle/service/am/applets/error.h1
-rw-r--r--src/core/hle/service/am/applets/general_backend.cpp6
-rw-r--r--src/core/hle/service/am/applets/general_backend.h3
-rw-r--r--src/core/hle/service/am/applets/profile_select.cpp2
-rw-r--r--src/core/hle/service/am/applets/profile_select.h1
-rw-r--r--src/core/hle/service/am/applets/software_keyboard.cpp2
-rw-r--r--src/core/hle/service/am/applets/software_keyboard.h1
-rw-r--r--src/core/hle/service/am/applets/web_browser.cpp2
-rw-r--r--src/core/hle/service/am/applets/web_browser.h1
16 files changed, 65 insertions, 33 deletions
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index c59054468..4c8216b47 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -619,16 +619,20 @@ std::size_t AppletMessageQueue::GetMessageCount() const {
619 return messages.size(); 619 return messages.size();
620} 620}
621 621
622void AppletMessageQueue::RequestExit() {
623 PushMessage(AppletMessage::ExitRequested);
624}
625
626void AppletMessageQueue::FocusStateChanged() {
627 PushMessage(AppletMessage::FocusStateChanged);
628}
629
622void AppletMessageQueue::OperationModeChanged() { 630void AppletMessageQueue::OperationModeChanged() {
623 PushMessage(AppletMessage::OperationModeChanged); 631 PushMessage(AppletMessage::OperationModeChanged);
624 PushMessage(AppletMessage::PerformanceModeChanged); 632 PushMessage(AppletMessage::PerformanceModeChanged);
625 on_operation_mode_changed->GetWritableEvent()->Signal(); 633 on_operation_mode_changed->GetWritableEvent()->Signal();
626} 634}
627 635
628void AppletMessageQueue::RequestExit() {
629 PushMessage(AppletMessage::ExitRequested);
630}
631
632ICommonStateGetter::ICommonStateGetter(Core::System& system_, 636ICommonStateGetter::ICommonStateGetter(Core::System& system_,
633 std::shared_ptr<AppletMessageQueue> msg_queue_) 637 std::shared_ptr<AppletMessageQueue> msg_queue_)
634 : ServiceFramework{system_, "ICommonStateGetter"}, msg_queue{std::move(msg_queue_)} { 638 : ServiceFramework{system_, "ICommonStateGetter"}, msg_queue{std::move(msg_queue_)} {
diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h
index aefbdf0d5..756434716 100644
--- a/src/core/hle/service/am/am.h
+++ b/src/core/hle/service/am/am.h
@@ -61,8 +61,9 @@ public:
61 void PushMessage(AppletMessage msg); 61 void PushMessage(AppletMessage msg);
62 AppletMessage PopMessage(); 62 AppletMessage PopMessage();
63 std::size_t GetMessageCount() const; 63 std::size_t GetMessageCount() const;
64 void OperationModeChanged();
65 void RequestExit(); 64 void RequestExit();
65 void FocusStateChanged();
66 void OperationModeChanged();
66 67
67private: 68private:
68 std::queue<AppletMessage> messages; 69 std::queue<AppletMessage> messages;
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp
index 5ddad851a..a56df6a7e 100644
--- a/src/core/hle/service/am/applets/applets.cpp
+++ b/src/core/hle/service/am/applets/applets.cpp
@@ -17,6 +17,8 @@
17#include "core/hle/kernel/k_writable_event.h" 17#include "core/hle/kernel/k_writable_event.h"
18#include "core/hle/kernel/server_session.h" 18#include "core/hle/kernel/server_session.h"
19#include "core/hle/service/am/am.h" 19#include "core/hle/service/am/am.h"
20#include "core/hle/service/am/applet_ae.h"
21#include "core/hle/service/am/applet_oe.h"
20#include "core/hle/service/am/applets/applets.h" 22#include "core/hle/service/am/applets/applets.h"
21#include "core/hle/service/am/applets/controller.h" 23#include "core/hle/service/am/applets/controller.h"
22#include "core/hle/service/am/applets/error.h" 24#include "core/hle/service/am/applets/error.h"
@@ -24,17 +26,20 @@
24#include "core/hle/service/am/applets/profile_select.h" 26#include "core/hle/service/am/applets/profile_select.h"
25#include "core/hle/service/am/applets/software_keyboard.h" 27#include "core/hle/service/am/applets/software_keyboard.h"
26#include "core/hle/service/am/applets/web_browser.h" 28#include "core/hle/service/am/applets/web_browser.h"
29#include "core/hle/service/sm/sm.h"
27 30
28namespace Service::AM::Applets { 31namespace Service::AM::Applets {
29 32
30AppletDataBroker::AppletDataBroker(Kernel::KernelCore& kernel) { 33AppletDataBroker::AppletDataBroker(Core::System& system_, LibraryAppletMode applet_mode_)
34 : system{system_}, applet_mode{applet_mode_} {
31 state_changed_event = 35 state_changed_event =
32 Kernel::KEvent::Create(kernel, "ILibraryAppletAccessor:StateChangedEvent"); 36 Kernel::KEvent::Create(system.Kernel(), "ILibraryAppletAccessor:StateChangedEvent");
33 state_changed_event->Initialize(); 37 state_changed_event->Initialize();
34 pop_out_data_event = Kernel::KEvent::Create(kernel, "ILibraryAppletAccessor:PopDataOutEvent"); 38 pop_out_data_event =
39 Kernel::KEvent::Create(system.Kernel(), "ILibraryAppletAccessor:PopDataOutEvent");
35 pop_out_data_event->Initialize(); 40 pop_out_data_event->Initialize();
36 pop_interactive_out_data_event = 41 pop_interactive_out_data_event = Kernel::KEvent::Create(
37 Kernel::KEvent::Create(kernel, "ILibraryAppletAccessor:PopInteractiveDataOutEvent"); 42 system.Kernel(), "ILibraryAppletAccessor:PopInteractiveDataOutEvent");
38 pop_interactive_out_data_event->Initialize(); 43 pop_interactive_out_data_event->Initialize();
39} 44}
40 45
@@ -114,6 +119,27 @@ void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&&
114 119
115void AppletDataBroker::SignalStateChanged() const { 120void AppletDataBroker::SignalStateChanged() const {
116 state_changed_event->GetWritableEvent()->Signal(); 121 state_changed_event->GetWritableEvent()->Signal();
122
123 switch (applet_mode) {
124 case LibraryAppletMode::AllForeground:
125 case LibraryAppletMode::AllForegroundInitiallyHidden: {
126 auto applet_oe = system.ServiceManager().GetService<AppletOE>("appletOE");
127 auto applet_ae = system.ServiceManager().GetService<AppletAE>("appletAE");
128
129 if (applet_oe) {
130 applet_oe->GetMessageQueue()->FocusStateChanged();
131 break;
132 }
133
134 if (applet_ae) {
135 applet_ae->GetMessageQueue()->FocusStateChanged();
136 break;
137 }
138 break;
139 }
140 default:
141 break;
142 }
117} 143}
118 144
119std::shared_ptr<Kernel::KReadableEvent> AppletDataBroker::GetNormalDataEvent() const { 145std::shared_ptr<Kernel::KReadableEvent> AppletDataBroker::GetNormalDataEvent() const {
@@ -128,7 +154,8 @@ std::shared_ptr<Kernel::KReadableEvent> AppletDataBroker::GetStateChangedEvent()
128 return state_changed_event->GetReadableEvent(); 154 return state_changed_event->GetReadableEvent();
129} 155}
130 156
131Applet::Applet(Kernel::KernelCore& kernel_) : broker{kernel_} {} 157Applet::Applet(Core::System& system_, LibraryAppletMode applet_mode_)
158 : broker{system_, applet_mode_}, applet_mode{applet_mode_} {}
132 159
133Applet::~Applet() = default; 160Applet::~Applet() = default;
134 161
diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h
index 26b482015..4215d2232 100644
--- a/src/core/hle/service/am/applets/applets.h
+++ b/src/core/hle/service/am/applets/applets.h
@@ -72,7 +72,7 @@ enum class LibraryAppletMode : u32 {
72 72
73class AppletDataBroker final { 73class AppletDataBroker final {
74public: 74public:
75 explicit AppletDataBroker(Kernel::KernelCore& kernel_); 75 explicit AppletDataBroker(Core::System& system_, LibraryAppletMode applet_mode_);
76 ~AppletDataBroker(); 76 ~AppletDataBroker();
77 77
78 struct RawChannelData { 78 struct RawChannelData {
@@ -102,6 +102,9 @@ public:
102 std::shared_ptr<Kernel::KReadableEvent> GetStateChangedEvent() const; 102 std::shared_ptr<Kernel::KReadableEvent> GetStateChangedEvent() const;
103 103
104private: 104private:
105 Core::System& system;
106 LibraryAppletMode applet_mode;
107
105 // Queues are named from applet's perspective 108 // Queues are named from applet's perspective
106 109
107 // PopNormalDataToApplet and PushNormalDataFromGame 110 // PopNormalDataToApplet and PushNormalDataFromGame
@@ -127,7 +130,7 @@ private:
127 130
128class Applet { 131class Applet {
129public: 132public:
130 explicit Applet(Kernel::KernelCore& kernel_); 133 explicit Applet(Core::System& system_, LibraryAppletMode applet_mode_);
131 virtual ~Applet(); 134 virtual ~Applet();
132 135
133 virtual void Initialize(); 136 virtual void Initialize();
@@ -137,10 +140,6 @@ public:
137 virtual void ExecuteInteractive() = 0; 140 virtual void ExecuteInteractive() = 0;
138 virtual void Execute() = 0; 141 virtual void Execute() = 0;
139 142
140 bool IsInitialized() const {
141 return initialized;
142 }
143
144 AppletDataBroker& GetBroker() { 143 AppletDataBroker& GetBroker() {
145 return broker; 144 return broker;
146 } 145 }
@@ -149,6 +148,14 @@ public:
149 return broker; 148 return broker;
150 } 149 }
151 150
151 LibraryAppletMode GetLibraryAppletMode() const {
152 return applet_mode;
153 }
154
155 bool IsInitialized() const {
156 return initialized;
157 }
158
152protected: 159protected:
153 struct CommonArguments { 160 struct CommonArguments {
154 u32_le arguments_version; 161 u32_le arguments_version;
@@ -162,6 +169,7 @@ protected:
162 169
163 CommonArguments common_args{}; 170 CommonArguments common_args{};
164 AppletDataBroker broker; 171 AppletDataBroker broker;
172 LibraryAppletMode applet_mode;
165 bool initialized = false; 173 bool initialized = false;
166}; 174};
167 175
diff --git a/src/core/hle/service/am/applets/controller.cpp b/src/core/hle/service/am/applets/controller.cpp
index a33f05f97..218c8d1e4 100644
--- a/src/core/hle/service/am/applets/controller.cpp
+++ b/src/core/hle/service/am/applets/controller.cpp
@@ -47,7 +47,7 @@ static Core::Frontend::ControllerParameters ConvertToFrontendParameters(
47 47
48Controller::Controller(Core::System& system_, LibraryAppletMode applet_mode_, 48Controller::Controller(Core::System& system_, LibraryAppletMode applet_mode_,
49 const Core::Frontend::ControllerApplet& frontend_) 49 const Core::Frontend::ControllerApplet& frontend_)
50 : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {} 50 : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {}
51 51
52Controller::~Controller() = default; 52Controller::~Controller() = default;
53 53
diff --git a/src/core/hle/service/am/applets/controller.h b/src/core/hle/service/am/applets/controller.h
index 07cb92bf9..2d4dae0bd 100644
--- a/src/core/hle/service/am/applets/controller.h
+++ b/src/core/hle/service/am/applets/controller.h
@@ -120,7 +120,6 @@ public:
120 void ConfigurationComplete(); 120 void ConfigurationComplete();
121 121
122private: 122private:
123 LibraryAppletMode applet_mode;
124 const Core::Frontend::ControllerApplet& frontend; 123 const Core::Frontend::ControllerApplet& frontend;
125 Core::System& system; 124 Core::System& system;
126 125
diff --git a/src/core/hle/service/am/applets/error.cpp b/src/core/hle/service/am/applets/error.cpp
index a9f0a9c95..23e30aa45 100644
--- a/src/core/hle/service/am/applets/error.cpp
+++ b/src/core/hle/service/am/applets/error.cpp
@@ -88,7 +88,7 @@ ResultCode Decode64BitError(u64 error) {
88 88
89Error::Error(Core::System& system_, LibraryAppletMode applet_mode_, 89Error::Error(Core::System& system_, LibraryAppletMode applet_mode_,
90 const Core::Frontend::ErrorApplet& frontend_) 90 const Core::Frontend::ErrorApplet& frontend_)
91 : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {} 91 : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {}
92 92
93Error::~Error() = default; 93Error::~Error() = default;
94 94
diff --git a/src/core/hle/service/am/applets/error.h b/src/core/hle/service/am/applets/error.h
index a3e520cd4..e606d12ce 100644
--- a/src/core/hle/service/am/applets/error.h
+++ b/src/core/hle/service/am/applets/error.h
@@ -41,7 +41,6 @@ public:
41private: 41private:
42 union ErrorArguments; 42 union ErrorArguments;
43 43
44 LibraryAppletMode applet_mode;
45 const Core::Frontend::ErrorApplet& frontend; 44 const Core::Frontend::ErrorApplet& frontend;
46 ResultCode error_code = RESULT_SUCCESS; 45 ResultCode error_code = RESULT_SUCCESS;
47 ErrorAppletMode mode = ErrorAppletMode::ShowError; 46 ErrorAppletMode mode = ErrorAppletMode::ShowError;
diff --git a/src/core/hle/service/am/applets/general_backend.cpp b/src/core/hle/service/am/applets/general_backend.cpp
index 71016cce7..b26abad36 100644
--- a/src/core/hle/service/am/applets/general_backend.cpp
+++ b/src/core/hle/service/am/applets/general_backend.cpp
@@ -39,7 +39,7 @@ static void LogCurrentStorage(AppletDataBroker& broker, std::string_view prefix)
39 39
40Auth::Auth(Core::System& system_, LibraryAppletMode applet_mode_, 40Auth::Auth(Core::System& system_, LibraryAppletMode applet_mode_,
41 Core::Frontend::ParentalControlsApplet& frontend_) 41 Core::Frontend::ParentalControlsApplet& frontend_)
42 : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {} 42 : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {}
43 43
44Auth::~Auth() = default; 44Auth::~Auth() = default;
45 45
@@ -155,7 +155,7 @@ void Auth::AuthFinished(bool is_successful) {
155 155
156PhotoViewer::PhotoViewer(Core::System& system_, LibraryAppletMode applet_mode_, 156PhotoViewer::PhotoViewer(Core::System& system_, LibraryAppletMode applet_mode_,
157 const Core::Frontend::PhotoViewerApplet& frontend_) 157 const Core::Frontend::PhotoViewerApplet& frontend_)
158 : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {} 158 : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {}
159 159
160PhotoViewer::~PhotoViewer() = default; 160PhotoViewer::~PhotoViewer() = default;
161 161
@@ -205,7 +205,7 @@ void PhotoViewer::ViewFinished() {
205} 205}
206 206
207StubApplet::StubApplet(Core::System& system_, AppletId id_, LibraryAppletMode applet_mode_) 207StubApplet::StubApplet(Core::System& system_, AppletId id_, LibraryAppletMode applet_mode_)
208 : Applet{system_.Kernel()}, id{id_}, applet_mode{applet_mode_}, system{system_} {} 208 : Applet{system_, applet_mode_}, id{id_}, system{system_} {}
209 209
210StubApplet::~StubApplet() = default; 210StubApplet::~StubApplet() = default;
211 211
diff --git a/src/core/hle/service/am/applets/general_backend.h b/src/core/hle/service/am/applets/general_backend.h
index d9e6d4384..7496ded88 100644
--- a/src/core/hle/service/am/applets/general_backend.h
+++ b/src/core/hle/service/am/applets/general_backend.h
@@ -33,7 +33,6 @@ public:
33 void AuthFinished(bool is_successful = true); 33 void AuthFinished(bool is_successful = true);
34 34
35private: 35private:
36 LibraryAppletMode applet_mode;
37 Core::Frontend::ParentalControlsApplet& frontend; 36 Core::Frontend::ParentalControlsApplet& frontend;
38 Core::System& system; 37 Core::System& system;
39 bool complete = false; 38 bool complete = false;
@@ -65,7 +64,6 @@ public:
65 void ViewFinished(); 64 void ViewFinished();
66 65
67private: 66private:
68 LibraryAppletMode applet_mode;
69 const Core::Frontend::PhotoViewerApplet& frontend; 67 const Core::Frontend::PhotoViewerApplet& frontend;
70 bool complete = false; 68 bool complete = false;
71 PhotoViewerAppletMode mode = PhotoViewerAppletMode::CurrentApp; 69 PhotoViewerAppletMode mode = PhotoViewerAppletMode::CurrentApp;
@@ -86,7 +84,6 @@ public:
86 84
87private: 85private:
88 AppletId id; 86 AppletId id;
89 LibraryAppletMode applet_mode;
90 Core::System& system; 87 Core::System& system;
91}; 88};
92 89
diff --git a/src/core/hle/service/am/applets/profile_select.cpp b/src/core/hle/service/am/applets/profile_select.cpp
index ab8b6fcc5..c91a9776a 100644
--- a/src/core/hle/service/am/applets/profile_select.cpp
+++ b/src/core/hle/service/am/applets/profile_select.cpp
@@ -17,7 +17,7 @@ constexpr ResultCode ERR_USER_CANCELLED_SELECTION{ErrorModule::Account, 1};
17 17
18ProfileSelect::ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_, 18ProfileSelect::ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_,
19 const Core::Frontend::ProfileSelectApplet& frontend_) 19 const Core::Frontend::ProfileSelectApplet& frontend_)
20 : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {} 20 : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {}
21 21
22ProfileSelect::~ProfileSelect() = default; 22ProfileSelect::~ProfileSelect() = default;
23 23
diff --git a/src/core/hle/service/am/applets/profile_select.h b/src/core/hle/service/am/applets/profile_select.h
index 90f054030..f0dd6c1f3 100644
--- a/src/core/hle/service/am/applets/profile_select.h
+++ b/src/core/hle/service/am/applets/profile_select.h
@@ -47,7 +47,6 @@ public:
47 void SelectionComplete(std::optional<Common::UUID> uuid); 47 void SelectionComplete(std::optional<Common::UUID> uuid);
48 48
49private: 49private:
50 LibraryAppletMode applet_mode;
51 const Core::Frontend::ProfileSelectApplet& frontend; 50 const Core::Frontend::ProfileSelectApplet& frontend;
52 51
53 UserSelectionConfig config; 52 UserSelectionConfig config;
diff --git a/src/core/hle/service/am/applets/software_keyboard.cpp b/src/core/hle/service/am/applets/software_keyboard.cpp
index c3a05de9c..73a06def1 100644
--- a/src/core/hle/service/am/applets/software_keyboard.cpp
+++ b/src/core/hle/service/am/applets/software_keyboard.cpp
@@ -44,7 +44,7 @@ void SetReplyBase(std::vector<u8>& reply, SwkbdState state, SwkbdReplyType reply
44 44
45SoftwareKeyboard::SoftwareKeyboard(Core::System& system_, LibraryAppletMode applet_mode_, 45SoftwareKeyboard::SoftwareKeyboard(Core::System& system_, LibraryAppletMode applet_mode_,
46 Core::Frontend::SoftwareKeyboardApplet& frontend_) 46 Core::Frontend::SoftwareKeyboardApplet& frontend_)
47 : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend{frontend_}, system{system_} {} 47 : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {}
48 48
49SoftwareKeyboard::~SoftwareKeyboard() = default; 49SoftwareKeyboard::~SoftwareKeyboard() = default;
50 50
diff --git a/src/core/hle/service/am/applets/software_keyboard.h b/src/core/hle/service/am/applets/software_keyboard.h
index 85aeb4eb1..7c67b7574 100644
--- a/src/core/hle/service/am/applets/software_keyboard.h
+++ b/src/core/hle/service/am/applets/software_keyboard.h
@@ -136,7 +136,6 @@ private:
136 void ReplyChangedStringUtf8V2(); 136 void ReplyChangedStringUtf8V2();
137 void ReplyMovedCursorUtf8V2(); 137 void ReplyMovedCursorUtf8V2();
138 138
139 LibraryAppletMode applet_mode;
140 Core::Frontend::SoftwareKeyboardApplet& frontend; 139 Core::Frontend::SoftwareKeyboardApplet& frontend;
141 Core::System& system; 140 Core::System& system;
142 141
diff --git a/src/core/hle/service/am/applets/web_browser.cpp b/src/core/hle/service/am/applets/web_browser.cpp
index b28b849bc..2404921fd 100644
--- a/src/core/hle/service/am/applets/web_browser.cpp
+++ b/src/core/hle/service/am/applets/web_browser.cpp
@@ -210,7 +210,7 @@ void ExtractSharedFonts(Core::System& system) {
210 210
211WebBrowser::WebBrowser(Core::System& system_, LibraryAppletMode applet_mode_, 211WebBrowser::WebBrowser(Core::System& system_, LibraryAppletMode applet_mode_,
212 const Core::Frontend::WebBrowserApplet& frontend_) 212 const Core::Frontend::WebBrowserApplet& frontend_)
213 : Applet{system_.Kernel()}, applet_mode{applet_mode_}, frontend(frontend_), system{system_} {} 213 : Applet{system_, applet_mode_}, frontend(frontend_), system{system_} {}
214 214
215WebBrowser::~WebBrowser() = default; 215WebBrowser::~WebBrowser() = default;
216 216
diff --git a/src/core/hle/service/am/applets/web_browser.h b/src/core/hle/service/am/applets/web_browser.h
index 5eafbae7b..21fd910c2 100644
--- a/src/core/hle/service/am/applets/web_browser.h
+++ b/src/core/hle/service/am/applets/web_browser.h
@@ -64,7 +64,6 @@ private:
64 void ExecuteWifi(); 64 void ExecuteWifi();
65 void ExecuteLobby(); 65 void ExecuteLobby();
66 66
67 LibraryAppletMode applet_mode;
68 const Core::Frontend::WebBrowserApplet& frontend; 67 const Core::Frontend::WebBrowserApplet& frontend;
69 68
70 bool complete{false}; 69 bool complete{false};