From 08eba996af8578a4477f35c03969cd3ed15eaa40 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 4 Mar 2023 18:18:58 +0200 Subject: [PATCH] qt(windows): Accept raw input from non-primary monitor windows. --- src/qt/qt_winrawinputfilter.cpp | 16 ++++++++++++++-- src/qt/qt_winrawinputfilter.hpp | 8 +++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp index 522130432..ccaea1f56 100644 --- a/src/qt/qt_winrawinputfilter.cpp +++ b/src/qt/qt_winrawinputfilter.cpp @@ -45,9 +45,11 @@ #include #include +#include "qt_rendererstack.hpp" + extern "C" void win_joystick_handle(PRAWINPUT); std::unique_ptr -WindowsRawInputFilter::Register(QMainWindow *window) +WindowsRawInputFilter::Register(MainWindow *window) { HWND wnd = (HWND) window->winId(); @@ -70,7 +72,7 @@ WindowsRawInputFilter::Register(QMainWindow *window) return inputfilter; } -WindowsRawInputFilter::WindowsRawInputFilter(QMainWindow *window) +WindowsRawInputFilter::WindowsRawInputFilter(MainWindow *window) { this->window = window; @@ -108,8 +110,18 @@ WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *mess MSG *msg = static_cast(message); if (msg->message == WM_INPUT) { + if (window->isActiveWindow() && menus_open == 0) handle_input((HRAWINPUT) msg->lParam); + else + { + for (auto &w : window->renderers) { + if (w && w->isActiveWindow()) { + handle_input((HRAWINPUT) msg->lParam); + break; + } + } + } return true; } diff --git a/src/qt/qt_winrawinputfilter.hpp b/src/qt/qt_winrawinputfilter.hpp index b03f6783e..81b2c0d48 100644 --- a/src/qt/qt_winrawinputfilter.hpp +++ b/src/qt/qt_winrawinputfilter.hpp @@ -41,6 +41,8 @@ #include +#include "qt_mainwindow.hpp" + #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) # define result_t qintptr #else @@ -51,7 +53,7 @@ class WindowsRawInputFilter : public QObject, public QAbstractNativeEventFilter Q_OBJECT public: - static std::unique_ptr Register(QMainWindow *window); + static std::unique_ptr Register(MainWindow *window); bool nativeEventFilter(const QByteArray &eventType, void *message, result_t *result) override; @@ -61,7 +63,7 @@ public slots: void mousePoll(); private: - QMainWindow *window; + MainWindow *window; uint16_t scancode_map[768]; int buttons = 0; int dx = 0; @@ -69,7 +71,7 @@ private: int dwheel = 0; int menus_open = 0; - WindowsRawInputFilter(QMainWindow *window); + WindowsRawInputFilter(MainWindow *window); void handle_input(HRAWINPUT input); void keyboard_handle(PRAWINPUT raw);