Ignore Mouse Capture when Left Ctrl or Left ALT is mapped to a Dreamcast Key (#1203)

This commit is contained in:
vkedwardli 2023-09-24 22:02:18 +08:00 committed by GitHub
parent 39a212140a
commit f75a16f40c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 1 deletions

View File

@ -254,6 +254,28 @@ void input_sdl_handle()
checkRawInput();
if (event.key.repeat == 0)
{
auto is_key_mapped = [](u32 code) -> bool {
#if defined(_WIN32) && !defined(TARGET_UWP)
if (config::UseRawInput)
{
for (int i = 0; i < GamepadDevice::GetGamepadCount(); i++)
{
auto gamepad = GamepadDevice::GetGamepad(i);
if (dynamic_cast<rawinput::RawKeyboard*>(gamepad.get()) != nullptr)
{
bool mapped = (gamepad->get_input_mapping()->get_button_id(0, code) != EMU_BTN_NONE);
if (mapped) return true;
}
}
return false;
}
else
#endif
{
return (sdl_keyboard->get_input_mapping()->get_button_id(0, code) != EMU_BTN_NONE);
}
};
if (event.type == SDL_KEYDOWN
&& ((event.key.keysym.sym == SDLK_RETURN && (event.key.keysym.mod & KMOD_ALT))
|| (event.key.keysym.sym == SDLK_F11 && (event.key.keysym.mod & (KMOD_ALT | KMOD_CTRL | KMOD_SHIFT | KMOD_GUI)) == 0)))
@ -272,7 +294,7 @@ void input_sdl_handle()
}
window_fullscreen = !window_fullscreen;
}
else if (event.type == SDL_KEYDOWN && (event.key.keysym.mod & KMOD_LALT) && (event.key.keysym.mod & KMOD_LCTRL))
else if (event.type == SDL_KEYDOWN && (event.key.keysym.mod & KMOD_LALT) && (event.key.keysym.mod & KMOD_LCTRL) && !(is_key_mapped(SDL_SCANCODE_LALT) || is_key_mapped(SDL_SCANCODE_LCTRL)) )
{
captureMouse(!mouseCaptured);
}