diff options
author | 2024-08-24 19:16:09 +0200 | |
---|---|---|
committer | 2024-08-24 19:16:22 +0200 | |
commit | 3a817b47da27087f441e8bb6d7dcd7ba9d9b51a3 (patch) | |
tree | 71ec5c5d91605d755c096cd3bd5660542c6db2f7 /src/osd/modules/input/input_rawinput.cpp | |
parent | 692d1f70699cbb65ab423631faed3e1c78c47dcb (diff) |
osd/input_common: increase event queue size,
input_rawinput/win32: empty event queue on resets,
input_raw: set RIDEV_INPUTSINK flag because of missed keyup events, causing stuck inputs (MT8789)
Diffstat (limited to 'src/osd/modules/input/input_rawinput.cpp')
-rw-r--r-- | src/osd/modules/input/input_rawinput.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/osd/modules/input/input_rawinput.cpp b/src/osd/modules/input/input_rawinput.cpp index 1bcbb38f781..5b6813dcd59 100644 --- a/src/osd/modules/input/input_rawinput.cpp +++ b/src/osd/modules/input/input_rawinput.cpp @@ -317,6 +317,7 @@ public: virtual void reset() override { + rawinput_device::reset(); m_pause_pressed = std::chrono::steady_clock::time_point::min(); memset(&m_keyboard, 0, sizeof(m_keyboard)); m_e1 = 0xffff; @@ -325,7 +326,6 @@ public: virtual void poll(bool relative_reset) override { rawinput_device::poll(relative_reset); - if (m_keyboard.state[0x80 | 0x45] && (std::chrono::steady_clock::now() > (m_pause_pressed + std::chrono::milliseconds(30)))) m_keyboard.state[0x80 | 0x45] = 0x00; } @@ -452,6 +452,7 @@ public: virtual void reset() override { + rawinput_device::reset(); memset(&m_mouse, 0, sizeof(m_mouse)); m_x = m_y = m_v = m_h = 0; } @@ -498,11 +499,9 @@ public: virtual void process_event(RAWINPUT const &rawinput) override { - // If this data was intended for a rawinput mouse if (rawinput.data.mouse.usFlags == MOUSE_MOVE_RELATIVE) { - m_x += rawinput.data.mouse.lLastX * input_device::RELATIVE_PER_PIXEL; m_y += rawinput.data.mouse.lLastY * input_device::RELATIVE_PER_PIXEL; @@ -559,6 +558,7 @@ public: virtual void reset() override { + rawinput_device::reset(); memset(&m_lightgun, 0, sizeof(m_lightgun)); m_v = 0; m_h = 0; @@ -608,7 +608,6 @@ public: // If this data was intended for a rawinput lightgun if (rawinput.data.mouse.usFlags & MOUSE_MOVE_ABSOLUTE) { - // update the X/Y positions m_lightgun.lX = normalize_absolute_axis(rawinput.data.mouse.lLastX, 0, input_device::ABSOLUTE_MAX); m_lightgun.lY = normalize_absolute_axis(rawinput.data.mouse.lLastY, 0, input_device::ABSOLUTE_MAX); @@ -703,9 +702,7 @@ public: RAWINPUTDEVICE registration; registration.usUsagePage = usagepage(); registration.usUsage = usage(); - registration.dwFlags = RIDEV_DEVNOTIFY; - if (background_input()) - registration.dwFlags |= RIDEV_INPUTSINK; + registration.dwFlags = RIDEV_DEVNOTIFY | RIDEV_INPUTSINK; registration.hwndTarget = dynamic_cast<win_window_info &>(*osd_common_t::window_list().front()).platform_window(); // register the device |