From 0313d020736a6f5772a2b7b64635d78162af7b17 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 18 Dec 2021 00:37:30 +0600 Subject: [PATCH] Delegate input events of HardwareRenderer to RendererStack --- src/qt/qt_hardwarerenderer.cpp | 27 +++++++++++++++------------ src/qt/qt_hardwarerenderer.hpp | 8 +++++--- src/qt/qt_rendererstack.cpp | 5 +++-- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 5e34c1079..077021a24 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -47,18 +47,21 @@ void HardwareRenderer::resizeEvent(QResizeEvent *event) { QOpenGLWindow::resizeEvent(event); } -void HardwareRenderer::mouseReleaseEvent(QMouseEvent *event) +bool HardwareRenderer::event(QEvent *event) { - if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) + switch (event->type()) { - plat_mouse_capture(1); - this->setCursor(Qt::BlankCursor); - return; + default: + return QOpenGLWindow::event(event); + case QEvent::MouseButtonPress: + case QEvent::MouseMove: + case QEvent::MouseButtonRelease: + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::Wheel: + case QEvent::Enter: + case QEvent::Leave: + return QApplication::sendEvent(parentWidget, event); } - if (mouse_capture && event->button() == Qt::MiddleButton) - { - plat_mouse_capture(0); - this->setCursor(Qt::ArrowCursor); - return; - } -} \ No newline at end of file + return false; +} diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index e5f1c1845..0068eb7dc 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -23,15 +23,17 @@ class HardwareRenderer : public QOpenGLWindow, protected QOpenGLFunctions, publi private: bool wayland = false; + QWidget* parentWidget{nullptr}; public: void resizeGL(int w, int h) override; void initializeGL() override; void paintGL() override; - HardwareRenderer(QWindow* parent = nullptr) - : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, parent), QOpenGLFunctions() + HardwareRenderer(QWidget* parent = nullptr) + : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, parent->windowHandle()), QOpenGLFunctions() { setMinimumSize(QSize(16, 16)); setFlags(Qt::FramelessWindowHint); + parentWidget = parent; } ~HardwareRenderer() { @@ -49,5 +51,5 @@ public slots: protected: void resizeEvent(QResizeEvent *event) override; - void mouseReleaseEvent(QMouseEvent* event) override; + bool event(QEvent* event) override; }; diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index e3ab5fc8e..72d79fae6 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -184,7 +184,7 @@ void RendererStack::switchRenderer(Renderer renderer) { case Renderer::OpenGL: { this->createWinId(); - auto hw = new HardwareRenderer(this->windowHandle()); + auto hw = new HardwareRenderer(this); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGL); current.reset(this->createWindowContainer(hw, this)); @@ -193,7 +193,7 @@ void RendererStack::switchRenderer(Renderer renderer) { case Renderer::OpenGLES: { this->createWinId(); - auto hw = new HardwareRenderer(this->windowHandle()); + auto hw = new HardwareRenderer(this); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); current.reset(this->createWindowContainer(hw, this)); @@ -201,6 +201,7 @@ void RendererStack::switchRenderer(Renderer renderer) { } } current->setFocusPolicy(Qt::NoFocus); + current->setFocusProxy(this); addWidget(current.get()); for (auto& in_use : buffers_in_use)