From b206ea5cfe90bca01b48e44a0cf93cb51f4877d1 Mon Sep 17 00:00:00 2001 From: Liam Date: Sun, 4 Feb 2024 16:05:44 -0500 Subject: [PATCH] am: fix focus states and display of indirect keyboard --- .../hle/service/am/library_applet_creator.cpp | 22 +++++++------------ .../hle/service/am/system_buffer_manager.cpp | 3 ++- src/core/hle/service/am/window_controller.cpp | 4 ++-- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/core/hle/service/am/library_applet_creator.cpp b/src/core/hle/service/am/library_applet_creator.cpp index a883a021e4..c48ed29bcb 100644 --- a/src/core/hle/service/am/library_applet_creator.cpp +++ b/src/core/hle/service/am/library_applet_creator.cpp @@ -118,23 +118,17 @@ std::shared_ptr CreateGuestApplet(Core::System& system, switch (mode) { case LibraryAppletMode::AllForeground: case LibraryAppletMode::NoUi: - applet->focus_state = FocusState::InFocus; - applet->hid_registration.EnableAppletToGetInput(true); - applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); - applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); - break; - case LibraryAppletMode::AllForegroundInitiallyHidden: - applet->system_buffer_manager.SetWindowVisibility(false); - applet->focus_state = FocusState::NotInFocus; - applet->hid_registration.EnableAppletToGetInput(false); - applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); - break; case LibraryAppletMode::PartialForeground: case LibraryAppletMode::PartialForegroundIndirectDisplay: - default: - applet->focus_state = FocusState::Background; applet->hid_registration.EnableAppletToGetInput(true); - applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); + applet->focus_state = FocusState::InFocus; + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); + break; + case LibraryAppletMode::AllForegroundInitiallyHidden: + applet->hid_registration.EnableAppletToGetInput(false); + applet->focus_state = FocusState::NotInFocus; + applet->system_buffer_manager.SetWindowVisibility(false); + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoBackground); break; } diff --git a/src/core/hle/service/am/system_buffer_manager.cpp b/src/core/hle/service/am/system_buffer_manager.cpp index 7fb9e3a757..48923fe41a 100644 --- a/src/core/hle/service/am/system_buffer_manager.cpp +++ b/src/core/hle/service/am/system_buffer_manager.cpp @@ -38,7 +38,8 @@ bool SystemBufferManager::Initialize(Nvnflinger::Nvnflinger* nvnflinger, Kernel: } Nvnflinger::LayerBlending blending = Nvnflinger::LayerBlending::None; - if (mode == LibraryAppletMode::PartialForeground) { + if (mode == LibraryAppletMode::PartialForeground || + mode == LibraryAppletMode::PartialForegroundIndirectDisplay) { blending = Nvnflinger::LayerBlending::Coverage; } diff --git a/src/core/hle/service/am/window_controller.cpp b/src/core/hle/service/am/window_controller.cpp index f00957f830..c07ef228b8 100644 --- a/src/core/hle/service/am/window_controller.cpp +++ b/src/core/hle/service/am/window_controller.cpp @@ -62,12 +62,12 @@ void IWindowController::SetAppletWindowVisibility(HLERequestContext& ctx) { applet->hid_registration.EnableAppletToGetInput(visible); if (visible) { - applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); applet->focus_state = FocusState::InFocus; + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoForeground); } else { applet->focus_state = FocusState::NotInFocus; + applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::ChangeIntoBackground); } - applet->message_queue.PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess);