From 35599e971d9eb5111018898d81bb9898a255cd5f Mon Sep 17 00:00:00 2001 From: MarcZX10 <67475268+MarcZX10@users.noreply.github.com> Date: Wed, 28 Oct 2026 11:09:23 +0000 Subject: [PATCH] feat(libSceVideoOut): keep key presses from the title's keyboard while a dialog is shown KeyboardInput no longer publishes a key press to libSceKeyboard while a modal dialog captures input, so the keys that answer the dialog are not also typed into the title. Key releases still reach it. keyboard_tests links libSceIme because it builds KeyboardInput.cpp itself. --- core/libs/prx/libSceKeyboard/CMakeLists.txt | 4 ++-- core/libs/prx/libSceVideoOut/src/KeyboardInput.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/libs/prx/libSceKeyboard/CMakeLists.txt b/core/libs/prx/libSceKeyboard/CMakeLists.txt index 6f23ed265f..6081d60f0f 100644 --- a/core/libs/prx/libSceKeyboard/CMakeLists.txt +++ b/core/libs/prx/libSceKeyboard/CMakeLists.txt @@ -12,11 +12,11 @@ if(BUILD_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/../libSceVideoOut/src/KeyboardInput.cpp ) target_include_directories(keyboard_tests PRIVATE ${LIBS_INCLUDE_DIR} ${ANYPS5_SDL2_INCLUDE_DIR}) - target_link_libraries(keyboard_tests PRIVATE libSceKeyboard libkernel libc) + target_link_libraries(keyboard_tests PRIVATE libSceKeyboard libSceIme libkernel libc) configure_windows_unwind(keyboard_tests) add_test(NAME keyboard_input COMMAND keyboard_tests) if(WIN32) set_tests_properties(keyboard_input PROPERTIES ENVIRONMENT_MODIFICATION - "PATH=path_list_prepend:$") + "PATH=path_list_prepend:$;PATH=path_list_prepend:$") endif() endif() diff --git a/core/libs/prx/libSceVideoOut/src/KeyboardInput.cpp b/core/libs/prx/libSceVideoOut/src/KeyboardInput.cpp index 241b61fa8e..c1ff90d39e 100644 --- a/core/libs/prx/libSceVideoOut/src/KeyboardInput.cpp +++ b/core/libs/prx/libSceVideoOut/src/KeyboardInput.cpp @@ -1,5 +1,6 @@ #include "prx/libSceVideoOut/include/KeyboardInput.hpp" #include "prx/libSceKeyboard/include/KeyboardState.hpp" +#include "prx/libSceIme/include/ModalDialog.hpp" #include "SDL_keyboard.h" @@ -9,6 +10,7 @@ void KeyboardInput::HandleEvent(const SDL_Event& event, unsigned windowId) { case SDL_KEYDOWN: case SDL_KEYUP: if (event.key.windowID != windowId || !focused || event.key.repeat != 0) return; + if (event.type == SDL_KEYDOWN && ModalDialogCapturesInput_nid_postfix()) return; if (event.key.keysym.scancode <= SDL_SCANCODE_UNKNOWN || event.key.keysym.scancode > SDL_SCANCODE_RGUI) return; input.keyCode = static_cast(event.key.keysym.scancode); input.pressed = event.type == SDL_KEYDOWN;