Suppress enter key when alt is held to prevent stray inputs when using the fullscreen shortcut
This commit is contained in:
parent
a324b7853d
commit
9ff794f502
|
@ -25,6 +25,7 @@ struct ControllerState {
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
const Uint8* keys = nullptr;
|
const Uint8* keys = nullptr;
|
||||||
|
SDL_Keymod keymod = SDL_Keymod::KMOD_NONE;
|
||||||
int numkeys = 0;
|
int numkeys = 0;
|
||||||
std::atomic_int32_t mouse_wheel_pos = 0;
|
std::atomic_int32_t mouse_wheel_pos = 0;
|
||||||
std::mutex cur_controllers_mutex;
|
std::mutex cur_controllers_mutex;
|
||||||
|
@ -84,6 +85,17 @@ void recomp::set_cursor_visible(bool visible) {
|
||||||
cursor_enabled.store(visible);
|
cursor_enabled.store(visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool should_override_keystate(SDL_Scancode key, SDL_Keymod mod) {
|
||||||
|
// Override Enter when Alt is held.
|
||||||
|
if (key == SDL_Scancode::SDL_SCANCODE_RETURN) {
|
||||||
|
if (mod & SDL_Keymod::KMOD_ALT) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool sdl_event_filter(void* userdata, SDL_Event* event) {
|
bool sdl_event_filter(void* userdata, SDL_Event* event) {
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
case SDL_EventType::SDL_KEYDOWN:
|
case SDL_EventType::SDL_KEYDOWN:
|
||||||
|
@ -100,9 +112,11 @@ bool sdl_event_filter(void* userdata, SDL_Event* event) {
|
||||||
set_scanned_input({(uint32_t)InputType::Keyboard, keyevent->keysym.scancode});
|
set_scanned_input({(uint32_t)InputType::Keyboard, keyevent->keysym.scancode});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (!should_override_keystate(keyevent->keysym.scancode, static_cast<SDL_Keymod>(keyevent->keysym.mod))) {
|
||||||
queue_if_enabled(event);
|
queue_if_enabled(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_EventType::SDL_CONTROLLERDEVICEADDED:
|
case SDL_EventType::SDL_CONTROLLERDEVICEADDED:
|
||||||
{
|
{
|
||||||
|
@ -369,6 +383,7 @@ const recomp::DefaultN64Mappings recomp::default_n64_controller_mappings = {
|
||||||
|
|
||||||
void recomp::poll_inputs() {
|
void recomp::poll_inputs() {
|
||||||
InputState.keys = SDL_GetKeyboardState(&InputState.numkeys);
|
InputState.keys = SDL_GetKeyboardState(&InputState.numkeys);
|
||||||
|
InputState.keymod = SDL_GetModState();
|
||||||
|
|
||||||
{
|
{
|
||||||
std::lock_guard lock{ InputState.cur_controllers_mutex };
|
std::lock_guard lock{ InputState.cur_controllers_mutex };
|
||||||
|
@ -487,6 +502,9 @@ float recomp::get_input_analog(const recomp::InputField& field) {
|
||||||
switch ((InputType)field.input_type) {
|
switch ((InputType)field.input_type) {
|
||||||
case InputType::Keyboard:
|
case InputType::Keyboard:
|
||||||
if (InputState.keys && field.input_id >= 0 && field.input_id < InputState.numkeys) {
|
if (InputState.keys && field.input_id >= 0 && field.input_id < InputState.numkeys) {
|
||||||
|
if (should_override_keystate(static_cast<SDL_Scancode>(field.input_id), InputState.keymod)) {
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
return InputState.keys[field.input_id] ? 1.0f : 0.0f;
|
return InputState.keys[field.input_id] ? 1.0f : 0.0f;
|
||||||
}
|
}
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
|
@ -514,6 +532,9 @@ bool recomp::get_input_digital(const recomp::InputField& field) {
|
||||||
switch ((InputType)field.input_type) {
|
switch ((InputType)field.input_type) {
|
||||||
case InputType::Keyboard:
|
case InputType::Keyboard:
|
||||||
if (InputState.keys && field.input_id >= 0 && field.input_id < InputState.numkeys) {
|
if (InputState.keys && field.input_id >= 0 && field.input_id < InputState.numkeys) {
|
||||||
|
if (should_override_keystate(static_cast<SDL_Scancode>(field.input_id), InputState.keymod)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return InputState.keys[field.input_id] != 0;
|
return InputState.keys[field.input_id] != 0;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue